2015-10-26 13 views
6

sau XSD (một phần):Làm thế nào để nói với JAXB không để tạo ra @XmlSchemaType Chú

<xs:complexType name="Fruit"> 
    <xs:sequence> 
     <xs:element name="type" type="FruitType"/> 
    </xs:sequence> 
</xs:complexType> 
<xs:simpleType name="FruitType"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="ABC"> 
     </xs:enumeration> 
     <xs:enumeration value="DEF"> 
     </xs:enumeration> 
     <xs:enumeration value="GHI"> 
     </xs:enumeration> 
     <xs:enumeration value="JKL"> 
     </xs:enumeration> 
    </xs:restriction> 
</xs:simpleType> 

đang Generating với XJC sẽ tạo mã java sau (FruitType là một Enum):

@XmlElement(required = true) 
    @XmlSchemaType(name = "string") 
    protected FruitType fruit; 

Khi tạo một SOAP WebService với JAX-WS, phần tử sau sẽ được tạo:

<xs:element name="type" type="xs:string"/> 

Rõ ràng nhất là ist sai rồi. Tôi mong đợi điều này là

<xs:element name="type" type="FruitType"/> 

Nếu tôi xóa dòng này bằng tay

@XmlSchemaType(name = "string") 

trong mọi Java Mã của tôi trong wsdl là tốt:

<xs:element name="type" type="tns:FruitType"/> 

Vì vậy, câu hỏi là : Làm cách nào tôi có thể yêu cầu JAXB không tạo @XmlSchemaType?

+3

Hãy viết giải pháp của bạn như là câu trả lời, nó hầu như không đáng chú ý bên trong câu hỏi. – Lia

+0

@dbaer Giải pháp của bạn làm việc cho tôi. Vui lòng chuyển câu trả lời này thành câu trả lời và bạn sẽ nhận được upvotes. –

Trả lời

1

Thay vì tham chiếu FruitType với loại

<xs:complexType name="Fruit"> 
    <xs:sequence> 
     <xs:element name="type" type="FruitType"/> 
    </xs:sequence> 
</xs:complexType> 

lừa ist để có một inline simpleType:

<xs:complexType name="Fruit"> 
    <xs:sequence> 
     <xs:element name="type"> 
      <xs:simpleType> 
       <xs:restriction base="FruitType"/> 
      </xs:simpleType> 
     </xs:element> 
    </xs:sequence> 
</xs:complexType> 

này sẽ tạo ra các tập tin java chính xác và WSDL:

<xs:element name="type" type="tns:FruitType"/> 
Các vấn đề liên quan