2010-07-06 37 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