有什么方法可以使 JAX-WS 生成的默认 WSDL(通过 ?wsdl
返回)使用 XML choice
而不是 any
和 sequence
?
最佳答案
我假设您指的是 WSDL 的 <types/>
部分中的 XML 模式。此模式的生成不受 JAX-WS 管理,而是由 JAXB 规范管理。这是 JAX-WS 中数据绑定(bind)的规范。
但要实际回答您的问题:是的,您可以在代表您的数据类型的类中使用适当的 @XMLElements
注释来做到这一点。例如,以这样的 Web 服务接口(interface)为例:
@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
中只有一个元素,所以这并不重要。关于wsdl - 带有 JAX-WS 的 XML 序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14642405/