gpt4 book ai didi

java - 嵌入式 XSD 中的 JAXB 绑定(bind)

转载 作者:搜寻专家 更新时间:2023-11-01 02:51:43 26 4
gpt4 key购买 nike

我有一个带有嵌入式 xsdwsdl

<wsdl:definitions name="AcmeService"
targetNamespace="http://www.acme.com/services/Acme/WcfService"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://www.acme.com/services/Acme/WcfService"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xsd:schema targetNamespace="http://www.acme.com/services/Acme/WcfService/Imports">
<xsd:import schemaLocation="http://services01.acme.com/WebServices/AcmeWcfClient/service/AcmeService.svc?xsd=xsd0" namespace="http://www.acme.com/services/Acme/WcfService" />
<xsd:import schemaLocation="http://services01.acme.com/WebServices/AcmeWcfClient/service/AcmeService.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
</xsd:schema>
</wsdl:types>
<!-- Some more WSDL Content -->
</wsdl:definitions>

我的“xsd”包含以下定义:

<xs:schema elementFormDefault="qualified" targetNamespace="http://www.acme.com/services/Acme/WcfService">
<xs:element name="SetApplication">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="application" nillable="true" type="tns:Application"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Application">
<xs:sequence>
<xs:element minOccurs="0" name="SomeElement" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="AnotherElement" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="AcmeDetails" nillable="true" type="tns:Acme"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Application" nillable="true" type="tns:Application"/>
<xs:complexType name="Acme">
<xs:sequence>
<xs:element minOccurs="0" name="PropertyOne" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="PropertyTwo" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Acme" nillable="true" type="tns:Acme"/>
<xs:element name="GetAcmeDetails">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="acme" nillable="true" type="tns:Acme"/> <!-- "acme" name is lowercase on purpose -->
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAcmeDetailsResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="GetAcmeDetailsResult" nillable="true" type="tns:Acme"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

我的问题在于,当使用 wsimport 生成服务 stub 时,Acme 的定义如下:

@XmlType(name = "Acme", namespace = "http://www.acme.com/services/Acme/WcfService", propOrder = {

问题是我需要 AcmeAcmeDetails 来解析相同的底层 Acme 对象。

查看其他几个类似的问题(hereherehere),我尝试使用以下 XML 创建绑定(bind):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxws:bindings
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
wsdlLocation="Acme_Service.wsdl">
<enableWrapperStyle>true</enableWrapperStyle>
<enableAsyncMapping>false</enableAsyncMapping>
<jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema/xs:complexType[@name='Application']/xs:sequence/xs:element[@name='AcmeDetails']">
<jaxb:class name="AcmeDetails"/>
</jaxws:bindings>
</jaxws:bindings>

上述绑定(bind)生成了“AcmeDetails”类,但 XMLType 注释仍然是“Acme”。

非常感谢在上面的摘录中生成与 AcmeAcmeDetails 的绑定(bind)的任何帮助。

最佳答案

可以使用 JAXB 外部绑定(bind)声明文件自定义由 WSDL 文件导入的外部 XML 模式文件:

<jxb:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="1.0">
<jxb:bindings schemaLocation="your-imported-xsd-location" node="/xsd:schema">
<jxb:schemaBindings>
<jxb:package name="fromjava.client"/>
</jxb:schemaBindings>
</jxb:bindings>
...
</jxb:bindings>

可以使用 -b 开关将外部 JAXB 绑定(bind)声明文件传递给 wsimport。有关详细信息,请参阅 JAX-WS 工具文档。

以上摘自this link ;虽然很可能适用于您的版本,但您可以仔细检查一下;

关于java - 嵌入式 XSD 中的 JAXB 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9981896/

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