我通过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注释的此类。

您还可以使用parseMethodprintMethod<jxb:javaType />属性提供自己的适配器方法。

Java Web服务教程的Customizing JAXB Bindings部分提供了有关使用<jxb:javaType />可以做什么的更多详细信息。

10-05 19:11