2015-10-26 43 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"/>