2010-07-06 32 views
6

我使用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> 

任何人都可以发现我做错了什么吗?

回答

0

道歉。我想用Sun的JDK中的JAXB,但我没有。在生成绑定时由JDeveloper创建的类/文件夹中存在剩余的jaxb.properties。我实际上是使用EclipseLink/MOXy的JAXB2.0。

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

+1

现在这个问题(https://bugs.eclipse.org/319028)一直在EclipseLink MOXy中修复。 – 2010-07-08 15:31:46