有没有办法让JAX-WS(通过?wsdl
返回)生成默认WSDL以使用XML choice
而不是any
和sequence
?
答案 0 :(得分:2)
我假设您的意思是WSDL的<types/>
部分中的XML模式。此模式的生成不受JAX-WS的约束,而是受JAXB规范的约束。这是JAX-WS中数据绑定的规范。
但要真正回答您的问题:是的,您可以在代表您的数据类型的类中使用适当的@XMLElements
注释来执行此操作。例如,采用如下的Web服务接口:
@WebService
public interface Chooser {
String chooseOne(Choice myChoice);
}
然后,XSD的内容取决于Choice
类的结构。您可以通过以下方式强制生成choice
元素:
public class Choice {
@XmlElements(value = { @XmlElement(type = First.class),
@XmlElement(type = Second.class) })
private Object myChoice;
}
类First
和Second
是选择中可能的元素。从此代码生成的模式如下所示:
<xs:complexType name="choice">
<xs:sequence>
<xs:choice minOccurs="0">
<xs:element name="myChoice" type="tns:first"></xs:element>
<xs:element name="myChoice" type="tns:second"></xs:element>
</xs:choice>
</xs:sequence>
</xs:complexType>
这仍然会将choice
包裹在sequence
中,但由于sequence
中只有一个元素,这并不重要。