使用JAX-WS的XML序列

时间:2013-02-01 08:37:40

标签: wsdl jax-ws code-generation

有没有办法让JAX-WS(通过?wsdl返回)生成默认WSDL以使用XML choice而不是anysequence

1 个答案:

答案 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;

}

FirstSecond是选择中可能的元素。从此代码生成的模式如下所示:

<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中只有一个元素,这并不重要。