【发布时间】:2012-11-29 15:03:45
【问题描述】:
问题:使用 CXF wsdl2java,是否可以在生成的 Java 存根中包含模式元素和类型的限制?
用例: 如果我的 WSDL 包含以下类型:
<xs:complexType name="TestResponse">
<xs:sequence>
<xs:element name="code">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:maxInclusive value="5"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="text">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="5"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
wsdljava 默认生成带有 setter 的存根,例如:
public void setCode(Integer value) {
this.code = value;
}
public void setText(String value) {
this.text = value;
}
如果有类似的东西会很棒:
public void setCode(Integer value) {
if (value > 5) throw new ValidationException();
this.code = value;
}
public void setText(String value) {
if (value.length() > 5) throw new ValidationException();
this.text = value;
}
对于 XJC 和因此 CXFs wsdljava 目前不存在这样的工具/JAXB 插件是否正确?
到目前为止我发现了什么:
至少在 2010 年,根据 Oracle Java 中的 post 编程论坛,似乎不支持开箱即用或任何可用插件。
我知道以下可能的替代方法(但尚未完全测试):
- 使用 krasa-jaxb-tools JAXB 插件在存根上生成 JSR-303 注释,正如在 stackoverflow here 和 here 上已经讨论过的那样
- 转储 XJC 和 CXF wsdl2java 并使用 XmlBeans 生成存根(这对我来说不是一个选项,因为我们的项目严重依赖 CXF)
- 等待 CXF 在它们被序列化后验证存根,如 here 所述(但是,这意味着在调用设置器时会丢失验证)
【问题讨论】: