JAXB:空字符串不会产生空元素

标签 jaxb

我正在使用来自 Sun JDK 1.6.0_18 的 JAXB 2.1.10:

D:\apps\jdk160_18\bin>xjc.exe -version
xjc 版本“JDK 6 中的 JAXB 2.1.10”
JavaTM Architecture for XML Binding(JAXB) 引用实现,(在 JDK 6 中构建 JAXB 2.1.10)

当 JAXB 对象具有空字符串的值( <someStringField></someStringField> )时,我需要让 JAXB 的编码器生成一个空元素(例如 <someStringField/>"" )。但是,JAXB 并没有这样做,而是从其输出中完全省略了该元素(就好像它是可选元素一样)。

我在 Internet 上的搜索表明 JAXB 通常应该创建此标记,只要您将该字段设置为非空的空字符串(即 myJAXBObject.setSomeStringField(""); ):

How to instantiate an empty element with JAXB
https://jaxb.dev.java.net/tutorial/section_2_2_12_8-No-Value.html#No%20Value

在我的 XSD 中,我尝试表明(以我所知道的各种方式)元素的存在是强制性的,即使它是空的:

      <xs:element name="outerElement">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="someStringField" type="xs:string" nillable="false" minOccurs="1" />
            <xs:element name="someOtherStringField" type="xs:string" />

生成的代码如下所示(两个元素相同):
    @XmlElement(name = "someStringField", required = true)
    protected String someStringField;
    @XmlElement(name = "someOtherStringField", required = true)
    protected String someOtherStringField;

但是,当我编码以下对象时...
outerElement.setSomeStringField("");
outerElement.setSomeOtherStringField("Value was set");

我得到:
<outerElement>
           <someOtherStringField>Value was set</someOtherStringField>
</outerElement>

当我期待:
<outerElement>
           <someStringField></someStringField>
           <someOtherStringField>Value was set</someOtherStringField>
</outerElement>

或者:
<outerElement>
           <someStringField/>
           <someOtherStringField>Value was set</someOtherStringField>
</outerElement>

谁能发现我做错了什么?

最佳答案

感谢您提请我们注意此问题 (https://bugs.eclipse.org/319028)。该错误已得到修复,并将包含在 EclipseLink 2.1.1 维护版本中。如果您想更早地访问此修复程序,您可以从 7 月 8 日开始从以下位置获取每晚下载:

  • http://www.eclipse.org/eclipselink/downloads/nightly.php
  • 关于JAXB:空字符串不会产生空元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3186621/

    相关文章:

    java - 如何让 JAXB 解析 BigInteger 的科学记数法?

    java - 在运行期间使用 JAXB 编写 X3D 格式的 XML

    java - Dozer Converter 将字符串映射到字符串

    java - 解码错误 : unexpected element (uri: local:), 预期元素为

    java - JAXB,包含时如何跳过类标签

    java - JAXB 编码期间的类转换

    java - 为什么在解码期间不使用 ObjectFactory?

    java - 访问用于 JAXRS 资源方法的默认 JAXB 编码器

    java - 错误: "A JSONArray text must start with ' [' at 1 [character 2 line 1]" should not apply

    java - 在 JAR 中组织 XSD