java - xs :integer produces @XmlElement with "type=String.class" 上的 JAXB javaType 自定义

标签 java jaxb2 xjc

当使用 XJC 从 XSD 生成 Java bean 时,我需要映射 xs:integerInteger而不是 BigInteger .我添加了一个 javaType标记到我的 JAXB 自定义文件(如本网站的许多答案中所述),并且工作正常。

但是在生成的代码中我注意到@XmlElement标签现在有一个 type=String.class参数.

所以现在我想知道,为什么 String ?
是因为 parse 和 print 方法正在从/向字符串对象转换吗?

我试过 xjc:javaType而不是 jaxb:javaType ,允许我替换生成的 Adapter1<String, Integer>自定义 MyAdapter<BigInteger, Integer> ,但发生了完全相同的事情。

如果这是正常的 XJC 行为,是否可以调整它以生成没有此参数的代码,或者使用除 String 以外的其他值? ?

请注意,一切正常,但我想了解一下。
我还使用 Enunciate 来记录我的 API,它似乎被这个 type 搞糊涂了。东西(但这可能是 Enunciate 中的错误)。


我正在使用 JAXB RI 2.2.6,这里有一些代码来说明我的问题:

bindings.xjb

<jaxb:bindings version="2.0" ...>
    <jaxb:globalBindings>
        <jaxb:javaType
                name="java.lang.Integer"
                xmlType="xs:integer"
                parseMethod="..."
                printMethod="..." />
        </jaxb:globalBindings>
</jaxb:bindings>

XSD 中的字段定义

<xs:complexType name="MyType">
    <xs:sequence>
        <xs:element name="myField" type="xs:integer" />
    </xs:sequence>
</xs:complexType>

生成的 Java 字段

@XmlElement(namespace = "...", required = true, type = String.class)
@XmlJavaTypeAdapter(Adapter1.class)
@XmlSchemaType(name = "integer")
protected Integer myField;

最佳答案

我知道这是一个老问题,但对于仍在寻找答案的人来说: 使用类型 xs:int 而不是 xs:integer 将创建一个普通的 java int 而不是 Biginteger

关于java - xs :integer produces @XmlElement with "type=String.class" 上的 JAXB javaType 自定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16280273/

相关文章:

java - 是否可以通过在 Android 上使用 Appium 滑动来从最近使用的应用程序屏幕中终止应用程序?

java - 解码后返回 null 和空 List

java - 常见嵌套类型的 JAXB 绑定(bind)

xml - 如何指定 XmlAccessorType 用于 JAXB xjc 生成的类

maven - org.codehaus.mojo : jaxb2-maven-plugin : 1. 6 --> 遇到 API 不兼容

java - Jetty 列出端口 80 上的应用程序,该应用程序通常位于另一个端口上

java - 如何从 RCaller java 调用 R 脚本文件?

java - 将 SQLite 数据库中的 Blob 数据解码为人类可读的文本

java - 将空字符串设置为 xsi :nil=true

java - 如何使用 Jax-RS 返回 Java List<String> Json