gpt4 book ai didi

jaxb - WebService 客户端和列表>

转载 作者:行者123 更新时间:2023-12-01 11:04:36 27 4
gpt4 key购买 nike

当我尝试从 wsdl 文档生成客户端时,我得到的客户端似乎有很多 JAXBElement 属性,例如

protected List<JAXBElement<?>> nameOrLinkingNameOrFamilyName;

我使用 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>

据我所知,这与 wsdl 文档中的 choice 标签有关。

提前致谢

最佳答案

将为选择属性生成一个 JAXBElement,其中多个 XML 元素将对应于同一个 Java 类。这是为了保留有关元素的信息,因为这不能从值的类型派生。

binding.xml

以下 JAXB 模式绑定(bind)文件将确保生成选择属性:

<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<globalBindings choiceContentProperty="true"/>
</bindings>

将生成 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>

由于 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;

将生成 JAXBElement 属性的 XML 模式

现在我们将修改选择结构,使 noteemail 方法都对应于 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>

由于 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;

了解更多信息

关于jaxb - WebService 客户端和列表<JAXBElement<?>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7206405/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com