有没有办法让JAX-WS生成的默认WSDL(通过
?wsdl
返回)使用XML choice
而不是any
和sequence
??wsdl
返回)使用XML choice
而不是any
和sequence
?<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
中只有一个元素,所以这并不重要。
choice
的element
设置了一个唯一的name
。在理解了基本思想后,这很容易实现 ;) - no id