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

dba*_*aer 8 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>
Run Code Online (Sandbox Code Playgroud)

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

    @XmlElement(required = true)
    @XmlSchemaType(name = "string")
    protected FruitType fruit;
Run Code Online (Sandbox Code Playgroud)

使用JAX-WS生成SOAP WebService时,将生成以下元素:

<xs:element name="type" type="xs:string"/>
Run Code Online (Sandbox Code Playgroud)

这显然是错的.我希望这是

<xs:element name="type" type="FruitType"/>
Run Code Online (Sandbox Code Playgroud)

如果我手动删除这一行

    @XmlSchemaType(name = "string")
Run Code Online (Sandbox Code Playgroud)

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

<xs:element name="type" type="tns:FruitType"/>
Run Code Online (Sandbox Code Playgroud)

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

dba*_*aer 7

而不是用 type 引用 FruitType

<xs:complexType name="Fruit">
    <xs:sequence>
        <xs:element name="type" type="FruitType"/>
    </xs:sequence>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)

技巧是有一个 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>
Run Code Online (Sandbox Code Playgroud)

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

<xs:element name="type" type="tns:FruitType"/>
Run Code Online (Sandbox Code Playgroud)