JAXB Bindings in embedded XSD
Ich habe eine wsdl
mit einem eingebetteten xsd
.
<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>
Mein 'xsd" enthält die folgenden Definitionen:
<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>
Mein problem kommt von der Tatsache, dass bei der Erzeugung des service-stubs, die mit wsimport, ich bin Links mit der folgenden definition für Acme
:
@XmlType(name = "Acme", namespace = "http://www.acme.com/services/Acme/WcfService", propOrder = {
Das Problem ist, dass ich müssen beide Acme
und AcmeDetails
zu beheben, um das gleiche zugrunde liegende Acme
Objekt.
Suche auf ein paar andere, ähnliche, Fragen (hier, hier, und hier) ich habe versucht, eine Bindung mit dem folgenden XML-Code:
<?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>
Den oben genannten Bindung erzeugt die Klasse 'AcmeDetails' aber die XMLType Annotation bleibt 'Acme'.
Jede Hilfe in der Erzeugung von Bindungen zu beiden Acme
und AcmeDetails
im obigen Auszug sehr geschätzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Externe XML-schema-Dateien importiert die WSDL-Datei angepasst werden kann mit ein JAXB externe verbindlich-Datei:
Den externen JAXB binding-Deklaration-Datei kann übergeben werden, wsimport mit dem -b switch. Finden Sie die JAX-WS-tools-Dokumentation für details.
Der obige Auszug stammt aus dieser link, während die meisten wahrscheinlich zutreffend für Ihre version, Sie könnten überprüfen dasselbe;
wsdlLocation
,node
, undschemaLocation
in meiner bindings-Datei. Ich bin mir ziemlich sicher, dass meineXPath
korrekt ist, obwohl (beide dokumentierten versuche, die dort gearbeitet haben), aber irgendwo in der Mischung der Dinge, die ich bekommen es falsch.Acme
es entweder Bedürfnisse zu generieren, die eine Zuordnung zuAcmeDetails
oder bleiben einfachAcme
.