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

时间:2010-07-06 13:33:45

标签: 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” 用于XML绑定的JavaTM体系结构(JAXB)参考实现,(在JDK 6中构建JAXB 2.1.10)

当JAXB对象具有空字符串(<someStringField></someStringField>)的值时,我需要让JAXB的marshaller生成一个空元素(例如<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>

有人能发现我做错了吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

道歉。我 THOUGHT 我使用的是Sun的JDK的JAXB,但事实并非如此。我的类/文件夹中有一个遗留的jaxb.properties,它是由JDeveloper在生成绑定时创建的。我实际上是在使用EclipseLink / MOXy中的JAXB2.0。

删除属性文件允许使用JAXB2.1并修复我的问题。