我通过 maven pom 中的 wsdl2java 目标生成代理类。
示例 xsd:
<xs:complexType name="address">
<xs:sequence>
<xs:element name="street" type="xs:string" />
<xs:element name="homeNo" type="xs:int" />
</xs:sequence>
</xs:complexType>
生成的类具有 int (原始类型)的 homeNo 属性。我想要“大整数”包装类型。怎么强制呢?一种方法是添加 nillable="true"但它很糟糕,而且在模式中看起来不太好。
最佳答案
您可以使用绑定(bind)文件自定义 Java 类型之间的转换。例如,如果您希望将所有 xsd:int 元素绑定(bind)到 BigInteger,请创建一个包含以下内容的文件 bindings.xjb
<jxb:bindings version="1.0"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:globalBindings>
<!-- use BigInteger instead of int-->
<jxb:javaType name="java.math.BigInteger" xmlType="xs:int"/>
</jxb:globalBindings>
</jxb:bindings>
当您调用 wsdl2java 时,请使用 -b
指定绑定(bind)文件的选项
wsdl2java -b bindings.xjb foo.wsdl
这将导致 XJC 生成一个适配器类,其名称可能类似于
org.w3._2001.xmlschema.Adapter1
您生成的对象将使用此类和 @XmlJavaTypeAdapter注释。
您还可以使用parseMethod
提供您自己的适配器方法。和printMethod
<jxb:javaType />
的属性.
Customizing JAXB Bindings Java Web 服务教程的部分提供了有关可以使用 <jxb:javaType />
执行哪些操作的更多详细信息。 .
关于java - Apache CXF 我不需要基元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22246838/