2010-07-06 33 views
6

Tôi đang sử dụng JAXB 2.1.10 từ của Sun JDK 1.6.0_18:JAXB: string rỗng không tạo ra phần tử rỗng

D: \ apps \ jdk160_18 \ bin> xjc.exe -version phiên bản XJC "JAXB 2.1.10 trong JDK 6" JavaTM Kiến trúc cho XML Binding (JAXB) Thực hiện tham khảo, (xây dựng JAXB 2.1.10 trong JDK 6)

tôi cần phải có marshaller JAXB của sản xuất một phần tử rỗng (ví dụ <someStringField></someStringField> hoặc <someStringField/>) khi đối tượng JAXB có giá trị của chuỗi rỗng (""). Tuy nhiên, thay vì làm điều đó, JAXB bỏ qua phần tử hoàn toàn từ đầu ra của nó (như thể nó là nơi một phần tử tùy chọn).

tìm kiếm của tôi trong Internet chỉ ra rằng JAXB thường nên tạo thẻ này, miễn là bạn thiết lập các lĩnh vực để các chuỗi rỗng không null (tức là 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

trong XSD của tôi, tôi đã cố gắng để chỉ ra (bằng mọi cách tôi biết) rằng sự hiện diện của nguyên tố là bắt buộc ngay cả khi nó là rỗng:

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

các mã được tạo ra loo ks như thế này (đó là giống nhau cho cả hai yếu tố):

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

Tuy nhiên, khi tôi sắp xếp các đối tượng sau đây ...

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

tôi nhận được:

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

Khi tôi mong đợi:

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

Hoặc:

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

Mọi người có thể phát hiện ra những gì tôi đang làm sai không?

Trả lời

0

Xin lỗi. Tôi THOUGHT Tôi đã sử dụng JAXB từ JDK của Sun, nhưng tôi thì không. Có một jaxb.properties còn sót lại trong các lớp/thư mục của tôi đã được tạo bởi JDeveloper khi tôi tạo ra các ràng buộc. Tôi đã thực sự sử dụng JAXB2.0 từ EclipseLink/MOXy.

Xóa tệp thuộc tính cho phép sử dụng JAXB2.1 và khắc phục sự cố của tôi.

+1

Vấn đề này (https://bugs.eclipse.org/319028) bây giờ đã được cố định trong EclipseLink MOXy. –

Các vấn đề liên quan