2015-10-26 94 views
6

以下XSD(部分):如何告訴JAXB不產生@XmlSchemaType註釋

與XJC會生成Java代碼(FruitType是一個枚舉)
<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> 

生成代碼:

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

當使用JAX-WS生成SOAP WebService時,將生成以下元素:

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

這明顯錯了。我期望這是

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

如果我的手在我的Java代碼都在WSDL中刪除此行

@XmlSchemaType(name = "string") 

是好的:

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

所以,問題是:我如何告訴JAXB不要生成@XmlSchemaType?

+3

請把你的解決方案寫成答案,在問題內部幾乎不可見。 – Lia

+0

@dbaer你的解決方案適合我。請將此轉爲答案,您將獲得upvotes。 –

回答

1

而不是引用FruitType型

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

的伎倆IST有一個簡單類型內聯:

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

這將產生正確的Java文件和WSDL:

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