java - Apache CXF 我不需要基元

标签 java maven wsdl cxf wsdl2java

我通过 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/

相关文章:

java - 方法返回空指针错误

java - 按给定因子缩放线段

maven - 在当前项目和插件组中找不到前缀 'sonar' 的插件错误

wsdl - 如何从 wsdl 生成 xsd

binding - ws jaxb自定义外部映射

java - 使用单个基类接口(interface)处理子类中的不同参数类型

android - 线程 "pool-1-thread-1"java.lang.NoClassDefFoundError : org/eclipse/aether/spi/connector/Transfer$State 中的异常

java - 在当前项目和插件组中未找到前缀 'jetty' 的插件

xsd - 从 XSD 生成 DDIC 结构?

java - 在 JPA 存储库中使用 @MOdify 和 @Query 受哪些规则约束?