跟随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?
而不是用 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)
| 归档时间: |
|
| 查看次数: |
1089 次 |
| 最近记录: |