我使用JAXB 2.1.10从Sun的JDK 1.6.0_18:JAXB:空字符串不会产生空元素
d:\ APPS \ jdk160_18 \ BIN> xjc.exe -version XJC版“JAXB 2.1.10在JDK 6" 的JavaTM架构XML绑定(JAXB)参考实现,
我需要JAXB的编组产生一个空的元素(JDK 6建造JAXB 2.1.10)(例如<someStringField></someStringField>
或<someStringField/>
)时JAXB对象具有空字符串的值(""
)。但是,JAXB不是这样做的,而是从输出中完全忽略该元素(就好像它是一个可选元素一样)。
我在网上搜索表明,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" />
生成的代码厕所KS这样的(这是相同的两个元素):
@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 MOXy中修复。 – 2010-07-08 15:31:46