我通过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”,但这很糟糕,在架构中看起来也不好。
最佳答案
您可以使用绑定文件来自定义与Java类型之间的转换。例如,如果您想将所有xsd:int元素都绑定到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
选项指定绑定文件wsdl2java -b bindings.xjb foo.wsdl
这将导致XJC生成适配器类,其名称可能类似于
org.w3._2001.xmlschema.Adapter1
您生成的对象将使用带有@XmlJavaTypeAdapter注释的此类。
您还可以使用
parseMethod
的printMethod
和<jxb:javaType />
属性提供自己的适配器方法。Java Web服务教程的Customizing JAXB Bindings部分提供了有关使用
<jxb:javaType />
可以做什么的更多详细信息。