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?
Ten problem (https://bugs.eclipse.org/319028) została już naprawiono w EclipseLink MOXy. –