如何告诉JAXB不要生成@XmlSchemaType Annotation

时间:2015-10-26 13:19:44

标签: soap jaxb

跟随xsd(部分):

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

使用xjc生成代码将生成以下java代码(FruitType是枚举):

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

如果我手动删除此行

    @XmlSchemaType(name = "string")

在我的Java代码中,wsdl中的所有内容都很好:

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

所以问题是:如何告诉JAXB不生成@XmlSchemaType?

1 个答案:

答案 0 :(得分:1)

而不是引用类型为

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

诀窍是有一个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>

这将生成正确的java文件和WSDL:

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