Nic*_*las 3 cxf jaxb webservice-client
当我尝试从wsdl文档生成客户端时,我得到一个似乎有很多JAXBElement属性的客户端,例如
protected List<JAXBElement<?>> nameOrLinkingNameOrFamilyName;
Run Code Online (Sandbox Code Playgroud)
我使用soapUI生成apache cxf 2.3.3作为工具,也作为配置文件生成如下:
<jaxb:bindings version="2.1"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jaxb:globalBindings generateElementProperty="false"/>
</jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)
据我所知,这与wsdl文档中的选择标签有关.
提前致谢
JAXBElement将为选择属性生成A ,其中多个XML元素将对应于同一Java类.这是为了保留有关元素的信息,因为这不能从值的类型派生.
binding.xml
以下JAXB模式绑定文件将确保生成choice属性:
<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<globalBindings choiceContentProperty="true"/>
</bindings>
Run Code Online (Sandbox Code Playgroud)
将产生Object属性的XML模式
在此版本的XML模式中,所有XML元素都将对应于不同的Java类:
<xsd:choice>
<xsd:element name="address" type="address"/>
<xsd:element name="phone-number" type="phoneNumber"/>
<xsd:element name="note" type="xsd:string"/>
</xsd:choice>
Run Code Online (Sandbox Code Playgroud)
由于choice属性的值足以唯一标识元素,因此该属性不包含JAXBElement来保留此信息:
@XmlElements({
@XmlElement(name = "address", type = Address.class),
@XmlElement(name = "phone-number", type = PhoneNumber.class),
@XmlElement(name = "note", type = String.class)
})
protected Object addressOrPhoneNumberOrNote;
Run Code Online (Sandbox Code Playgroud)
将产生JAXBElement属性的XML模式
现在我们将修改选择结构,以便note和email方法都对应于String类.
<xsd:choice>
<xsd:element name="address" type="address"/>
<xsd:element name="phone-number" type="phoneNumber"/>
<xsd:element name="note" type="xsd:string"/>
<xsd:element name="email" type="xsd:string"/>
</xsd:choice>
Run Code Online (Sandbox Code Playgroud)
由于choice属性的值不再足以唯一标识元素,因此该属性必须包含JAXBElement以保留此信息:
@XmlElementRefs({
@XmlElementRef(name = "phone-number", type = JAXBElement.class),
@XmlElementRef(name = "email", type = JAXBElement.class),
@XmlElementRef(name = "address", type = JAXBElement.class),
@XmlElementRef(name = "note", type = JAXBElement.class)
})
protected JAXBElement<?> addressOrPhoneNumberOrNote;
Run Code Online (Sandbox Code Playgroud)
欲获得更多信息
| 归档时间: |
|
| 查看次数: |
3291 次 |
| 最近记录: |