2010-07-06 19 views
6

Używam JAXB 2.1.10 z Sun JDK 1.6.0_18:JAXB: Pusty ciąg nie wywołuje pusty element

D: \ apps \ jdk160_18 \ bin> xjc.exe -version wersji XJC „JAXB 2.1.10 w JDK 6" JavaTM Architektury XML Binding (JAXB) realizacja Reference (build JAXB 2.1.10 w JDK 6)

muszę mieć naziemnego JAXB produkują pustego elementu (np <someStringField></someStringField> lub <someStringField/>), gdy obiekt JAXB ma wartość pustego ciągu (""). Jednak zamiast tego JAXB całkowicie pomija ten element z jego danych wyjściowych (tak, jakby był elementem opcjonalnym).

Moje poszukiwania w internecie wskazuje, że JAXB powinny normalnie tworzyć ten tag, tak długo, jak ustawić pole do niepuste pusty ciąg (tj 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

w moim XSD, próbowałem wskazać (w każdym calu wiem), że obecność elementu jest obowiązkowe, nawet jeśli jest pusty:

 <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" /> 

wygenerowany kod loo jaw tak (to jest taka sama dla obu elementów):

@XmlElement(name = "someStringField", required = true) 
    protected String someStringField; 
    @XmlElement(name = "someOtherStringField", required = true) 
    protected String someOtherStringField; 

Jednak, kiedy marszałek następujący obiekt ...

outerElement.setSomeStringField(""); 
outerElement.setSomeOtherStringField("Value was set"); 

uzyskać:

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

Kiedy Oczekuje:

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

Lub:

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

Czy ktoś może zauważyć, co robię źle?

Odpowiedz

0

Przeprosiny. I THOUGHT Używałem JAXB z JDK firmy Sun, ale nie byłem. W moich klasach/folderach zostały utworzone pliki jaxb.properties, które zostały utworzone przez JDeveloper podczas generowania powiązań. Właściwie korzystałem z JAXB2.0 z EclipseLink/MOXy.

Usuwanie pliku właściwości dozwolone JAXB2.1 do wykorzystania i naprawienia mojego problemu.

+1

Ten problem (https://bugs.eclipse.org/319028) została już naprawiono w EclipseLink MOXy. –