Ich habe eine wsdl
mit einem eingebetteten xsd
.JAXB Bindungen in 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 folgende 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, wenn die Service-Stubs mit wsimport zu erzeugen, ich mit der folgenden Definition links bin für Acme
:
@XmlType(name = "Acme", namespace = "http://www.acme.com/services/Acme/WcfService", propOrder = {
Das Problem ist, dass ich auf den gleichen Basiswertsowohl Acme
und AcmeDetails
lösen müssenObjekt.
an ein Paar Suche von anderen, ähnlichen Fragen (here, here und here) Ich habe versucht, eine Bindung mit dem folgende XML zu erstellen:
<?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>
Die obige Bindung erzeugt die Klasse ‚AcmeDetails‘ aber die XMLType-Anmerkung bleibt "Acme".
Jede Hilfe bei der Erzeugung von Bindungen zu sowohl Acme
als auch AcmeDetails
in dem obigen Extrakt wurde sehr geschätzt.
Danke für die Info. Ich habe diesen Artikel vorher gelesen (ich denke, dass Sie das in einem separaten Post hervorgehoben haben). Das Bit, das ich vielleicht vermisse, ist, dass ich wahrscheinlich meine 'wsdlLocation',' node' und 'schemaLocation' in meiner Bindungsdatei vermische. Ich bin mir ziemlich sicher, dass mein 'XPath' korrekt ist (beide dokumentierten Versuche hätten funktionieren sollen), aber irgendwo in der Mischung von Dingen verstehe ich es falsch. – radimpe
Eigentlich sind dies zwei getrennte Bindungen. Wenn Sie genauer hinsehen, http://java.sun.com/xml/ns/jaxb}bindings, das das Attribut schemaLocation für die externe XSD-Datei hat (siehe XSD [hier] (http: // java. sun.com/xml/ns/jaxb/bindingschema_2_0.xsd)) unterscheidet sich von {http://java.sun.com/xml/ns/jaxws}bindings mit dem Attribut wsdlLocation (siehe Schema [hier] (http://java.sun.com/xml/ns/jaxws/wsdl_customizationschema_2_0.xsd)). Wiederum eine benutzerdefinierte Bindung für XSD, die andere benutzerdefinierte Bindungen für WSDL. –
Ich habe den schema/wsdlocation-Teil meiner bindings.xml aussortiert. Ich habe immer noch das ursprüngliche Problem, dass abhängig von dem Pfad, auf den Sie auf "Acme" zugreifen, entweder eine Zuordnung zu "AcmeDetails" erstellt werden muss oder einfach "Acme" bleiben muss. – radimpe