CXF wsdl2java:验证生成的存根中的XML限制

时间:2012-11-29 15:03:46

标签: cxf jaxb2 wsdl2java

问题:使用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 herehere已经讨论
  • 转储XJC和CXF wsdl2java并使用XmlBeans生成存根(因为我们的项目严重依赖CXF,因此对我来说不是一个选项)
  • 等待CXF按照讨论的here序列化后验证存根(但是,这意味着在调用setter时松开验证)

1 个答案:

答案 0 :(得分:2)

我还没有看到过这样做的XJC插件。如果你想为一些基本的验证步骤编写一个,我们肯定会感谢你的贡献。

如果您想转而使用XMLBeans作为数据模型,CXF的wsdl2java确实支持XMLBeans。将“-db xmlbeans”标志添加到命令行,它应该生成XMLBeans而不是JAXB。