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

JAXB:空字符串不会生成空元素,jaxb,Jaxb,我正在使用Sun JDK1.6.0_18中的JAXB2.1.10: D:\apps\jdk160_18\bin>xjc.exe-版本 xjc版本“JDK 6中的JAXB 2.1.10” JavaTM XML绑定体系结构(JAXB)参考实现(在JDK 6中构建JAXB 2.1.10) 当JAXB对象具有空字符串(“)的值时,我需要让JAXB的封送器生成一个空元素(例如或)。但是,JAXB并没有这样做,而是从输出中完全忽略了元素(好像它是可选元素) 我在Internet上的搜索表明JAXB通常应该创

我正在使用Sun JDK1.6.0_18中的JAXB2.1.10:

D:\apps\jdk160_18\bin>xjc.exe-版本 xjc版本“JDK 6中的JAXB 2.1.10” JavaTM XML绑定体系结构(JAXB)参考实现(在JDK 6中构建JAXB 2.1.10)

当JAXB对象具有空字符串(
)的值时,我需要让JAXB的封送器生成一个空元素(例如
)。但是,JAXB并没有这样做,而是从输出中完全忽略了元素(好像它是可选元素)

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

在我的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" />
但是,当我封送以下对象时

outerElement.setSomeStringField("");
outerElement.setSomeOtherStringField("Value was set");
我得到:

<outerElement>
           <someOtherStringField>Value was set</someOtherStringField>
</outerElement>

值已设置
当我期待的时候:

<outerElement>
           <someStringField></someStringField>
           <someOtherStringField>Value was set</someOtherStringField>
</outerElement>

值已设置
或:


值已设置

有人能看出我做错了什么吗?

抱歉。我认为我使用的是来自Sun的JDK的JAXB,但我没有。在我的类/文件夹中有一个剩余的jaxb.properties,它是在我生成绑定时由JDeveloper创建的。我实际上是在使用EclipseLink/MOXy中的JAXB2.0


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

感谢您提醒我们注意这个问题()。该bug已经修复,将包含在EclipseLink 2.1.1维护版本中。如果您希望更早地访问此修复程序,您可以从7月8日开始从以下位置获取夜间下载:

此问题()现已在EclipseLink MOXy中修复。
<outerElement>
           <someStringField></someStringField>
           <someOtherStringField>Value was set</someOtherStringField>
</outerElement>
<outerElement>
           <someStringField/>
           <someOtherStringField>Value was set</someOtherStringField>
</outerElement>