Zuordnung zwischen Java, WSDL und XML bei JAX-RPC-Anwendungen
Die Daten für JAX-RPC-Anwendungen (Java™ API for XML-based Remote Procedure Call) werden als XML (eXtensible Markup Language) übertragen. JAX-RPC-Anwendungen verwenden Zuordnungen zwischen den Java- und XML-Technologien (Extensible Markup Language), darunter XML-Schemata, Web Services Description Language (WSDL) und SOAP, die vom Anwendungsserver unterstützt werden.
Für JAX-RPC-Anwendungen sind die meisten dieser Zuordnungen zwischen Java und XML in der JAX-RPC-Spezifikation (Java API for XML-based Remote Procedure Call) definiert. Einige optionale oder nicht in JAX-RPC definierten Zuordnungen werden ebenfalls unterstützt. Eine vollständige Liste der APIs finden Sie in der JAX-RPC-Spezifikation. Eine vollständige Liste der unterstützten Standards und Spezifikationen finden Sie in der Dokumentation zu den Web-Service-Spezifikationen und APIs.
Notationskonventionen
Namespacepräfix | Namespace |
---|---|
xsd | http://www.w3.org/2001/XMLSchema |
xsi | http://www.w3.org/2001/XMLSchema-instance |
soapenc | http://schemas.xmlsoap.org/soap/encoding/ |
wsdl | http://schemas.xmlsoap.org/wsdl/ |
wsdlsoap | http://schemas.xmlsoap.org/wsdl/soap/ |
ns | Benutzerdefinierter Namespace |
apache | http://xml.apache.org/xml-soap |
wasws | http://websphere.ibm.com/webservices/ |
Detaillierte Zuordnungsinformationen
In den folgenden Abschnitten werden die unterstützten Zuordnungen erläutert:Java-WSDL-Zuordnung
Dieser Abschnitt enthält eine Zusammenfassung der Regeln für die Java-WSDL-Zuordnung. Die Regeln für die Java-WSDL-Zuordnung werden vom Befehl Java2WSDL für die Bottom-up-Verarbeitung verwendet. Bei der Bottom-up-Verarbeitung wird eine vorhandene Java-Service-Implementierung verwendet, um eine den Web-Service definierende WSDL-Datei zu erstellen. Die generierte WSDL-Datei muss möglicherweise zusätzlich manuelle bearbeitet werden. Die Gründe dafür sind folgende:- Nicht alle Java-Klassen und -Konstrukte besitzen Zuordnungen zu WSDL-Dateien. Beispielsweise können Java-Klassen, die die Regeln der Java-Bean-Spezifikation nicht unterstützen, möglicherweise nicht einem WSDL-Konstrukt zugeordnet werden.
- Einige Java-Klassen und -Konstrukte besitzen mehrere Zuordnungen zu einer WSDL-Datei. Beispielsweise kann ein java.lang.String einem xsd:string oder einem soapenc:string zugeordnet werden. Der Befehl Java2WSDL wählt eine dieser Zuordnungen aus, die WSDL-Datei muss jedoch bearbeitet werden, wenn eine andere Zuordnung gewünscht wird.
- Es kann mehrere Möglichkeiten geben, WSDL-Konstrukte zu generieren. wsdl:part in wsdl:message kann beispielsweise mit einem Attribut type oder element generiert werden. Der Befehl Java2WSDL trifft eine Auswahl auf der Basis der Einstellungen für die Optionen -style und -use.
- Die WSDL-Datei beschreibt die in der SOAP-Nachricht gesendeten Instanzdatenelemente. Wenn Sie das Format oder die Namen, die in der Nachricht verwendet werden, ändern möchten, müssen Sie die WSDL-Datei bearbeiten. Der Befehl Java2WSDL ordnet eine Java-Bean-Eigenschaft beispielsweise als XML-Element zu. In einigen Fällen können Sie die WSDL-Datei ändern, um die Java-Bean-Eigenschaft als XML-Attribut zuzuordnen.
- Die WSDL-Datei muss bearbeitet werden, wenn Header oder Anhänge unterstützt werden sollen.
- Die WSDL-Datei muss editiert werden, wenn Sie eine mehrteilige WSDL-Datei mit dem Konstrukt wsdl:import verwenden möchten.
- Zuordnung von Paketen zu Namespaces:
Die JAX-RPC-Spezifikation gibt nicht die Standardzuordnung von Java-Paketnamen zu XML-Namespaces an. Sie gibt an, dass jedes Java-Paket einem einzelnen XML-Namespace zugeordnet werden muss. Außerdem muss jeder XML-Namespace einem einzelnen Java-Paket zugeordnet sein. Es wird ein Standardzuordnungsalgorithmus bereitgestellt, der den Namespace erstellt, indem er die Namen des Java-Pakets umkehrt und das Präfix http:// hinzufügt. Beispielsweise wird ein Paket mit dem Namen com.ibm.webservice dem XML-Namespace http://webservice.ibm.com zugeordnet.
Die Standardzuordnung zwischen XML-Namespaces und Java-Paketnamen kann mit den Optionen "-NStoPkg" und "-PkgtoNS" der Befehle WSDL2Java und Java2WSDL außer Kraft gesetzt werden.
- ID-Zuordnung:
Java-IDs werden den WSDL- und XML-IDs direkt zugeordnet.
Namen von Java-Bean-Eigenschaften werden XML-IDs zugeordnet. Beispielsweise wird eine Java-Bean mit Methoden des Typs getInfo und setInfo einem XML-Konstrukt mit dem Namen info zugeordnet.
Die Namen der Methodenparameter der Serviceendpunktschnittstelle werden, sofern verfügbar, den WSDL- und XML-IDs direkt zugeordnet. Weitere Informationen finden Sie in der Dokumentation zur WSDL2Java-Befehlsoption "-implClass".
- Zusammenfassung der WSDL-Konstrukte:
Tabelle 2. Zuordnung von Java zu WSDL bzw. einem XML-Konstrukt. In der folgenden Tabelle wird die Zuordnung eines Java-Konstrukts zum zugehörigen WSDL- und XML-Konstrukt zusammenfassend dargestellt. Java-Konstrukt WSDL- und XML-Konstrukt Serviceendpunktschnittstelle wsdl:portType Methode wsdl:operation Parameter wsdl:input, wsdl:message, wsdl:part Rückgabe wsdl:output, wsdl:message, wsdl:part Auslösung (Throws) wsdl:fault, wsdl:message, wsdl:part Basiselementtypen einfache xsd- und soapenc-Typen Java-Beans xsd:complexType Java-Bean-Eigenschaften Verschachtelte xsd:elements von xsd:complexType Bereiche JAX-RPC definiert xsd:complexType und xsd:element mit einem Attribut maxOccurs="unbounded" Benutzerdefinierte Ausnahmen xsd:complexType - Konstrukt mit binding und service
Eine wsdl:binding, die mit dem generierten wsdl:portType übereinstimmt, wird generiert. Es wird ein wsdl:service mit einem Port, der die generierte wsdl:binding enthält, generiert. Die Namen der Elemente binding und service werden mit dem Befehl Java2WSDL gesteuert.
- style und useMit den Optionen -style und -use können Sie verschiedene Arten von WSDL-Dateien generieren. Die vier unterstützten Kombinationen lauten wie folgt:
- -style DOCUMENT -use LITERAL
- -style RPC -use LITERAL
- -style DOCUMENT -use LITERAL -wrapped false
- -style RPC -use ENCODED
- DOCUMENT LITERAL:
Der Befehl Java2WSDL generiert eine WSDL-Datei vom Typ "document-literal", die der Spezifikation "Web Services - Interoperability (WS-I)" entspricht. Das Element wsdl:binding wird mit den Attributen embedded style="document" und use="literal" generiert. Zur Beschreibung der Anforderungsnachricht wird für jede Methode einer Serviceendpunktschnittstelle ein xsd:element generiert. Ein ähnliches xsd:element wird für jede Methode einer Serviceendpunktschnittstelle generiert, um die Antwortnachricht zu beschreiben.
- RPC LITERAL:
Der Befehl Java2WSDL generiert eine WS-I-konforme WSDL-Datei vom Typ "rpc-literal". Das Element wsdl:binding wird mit den Attributen embedded style="rpc" und use="literal" generiert. Die wsdl:message-Konstrukte werden für die Eingaben und Ausgaben jeder Methode einer Serviceendpunktschnittstelle generiert. Die Parameter der Methode werden mit dem Element part in wsdl:message-Konstrukten beschrieben.
- DOCUMENT LITERAL not wrapped:
Der Befehl Java2WSDL generiert eine WSDL-Datei des Typs "document-literal", die der JAX-RPC-Spezifikation entspricht. Diese Datei ist nicht kompatibel mit .NET. Der Hauptunterschied zwischen DOCUMENT LITERAL und DOCUMENT LITERAL not wrapped ist die Verwendung von wsdl:message-Konstrukten für die Definition der Anforderungs- und Antwortnachrichten.
- RPC ENCODED:
Der Befehl Java2WSDL generiert eine WSDL-Datei des Typs "rpc-encoded", die der JAX-RPC-Spezifikation entspricht. Diese Datei ist nicht kompatibel mit der Spezifikation WS-I. Das Element wsdl:binding wird mit den Attributen embedded style="rpc" und use="encoded" generiert. Für die Darstellung von Typen und Arrays werden bestimmte soapenc-Zuordnungen verwendet.
Viele Java-Typen werden XML-Standardtypen direkt zugeordnet. java.lang.String wird beispielsweise xsd:string zugeordnet. Diese Zuordnungen sind in der JAX-RPC-Spezifikation beschrieben.
Java-Typen, die XML-Standardtypen nicht direkt zugeordnet werden können, werden im wsdl:types-Abschnitt generiert. Eine Java-Klasse, die mit dem Java-Bean-Muster übereinstimmt, wird einem xsd:complexType zugeordnet. Eine Beschreibung der Zuordnungsregeln finden Sie in der JAX-RPC-Spezifikation. Das folgende Beispiel veranschaulicht die Zuordnung für eine Beispielbasisklasse und abgeleitete Java-Klassen.Java: public abstract class Base { public Base() {} public int a; // zugeordnet private int b; // zugeordnet über setter-/getter-Methode private int c; // nicht zugeordnet private int[] d; // zugeordnet über indexierte setter-/getter-Methode public int getB() { return b;} // Eigenschaft b zuordnen public void setB(int b) {this.b = b;} public int[] getD() { return d;} // indexierte Eigenschaft d zuordnen public void setD(int[] d) {this.d = d;} public int getD(int index) { return d[index];} public void setB(int index, int value) {this.d[index] = value;} public void someMethod() {...} // nicht zugeordnet } public class Derived extends Base { public int x; // zugeordnet private int y; // nicht zugeordnet } Zugeordnet zu: <xsd:complexType name="Base" abstract="true"> <xsd:sequence> <xsd:element name="a" type="xsd:int"/> <xsd:element name="b" type="xsd:int"/> <xsd:element name="d" minOccurs="0" maxOccurs="unbounded" type="xsd:int"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="Derived"> <xsd:complexContent> <xsd:extension base="ns:Base"> <xsd:sequence> <xsd:element name="x" type="xsd:int"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType>
- Nicht unterstützte Klassen:
Wenn eine Klasse einem XML-Typ nicht zugeordnet werden kann, gibt der Befehl Java2WSDL eine Nachricht aus, und in der WSDL-Datei wird eine xsd:anyType-Referenz generiert. In diesen Situationen muss die Implementierung des Web-Service dahingehend geändert werden, dass sie JAX-RPC-kompatible Klassen verwendet.
WSDL-Java-Zuordnung
Der Befehl WSDL2Java generiert Java-Klassen auf der Basis der in der WSDL-Datei definierten Informationen.
- Zuordnung von Namespaces zu Paketen:
JAX-RPC definiert keine Zuordnung von XML-Namespaces zu Java-Paketnamen. Die JAX-RPC-Spezifikation legt fest, dass jedes Java-Paket einem einzelnen XML-Namespace zugeordnet werden muss. Außerdem muss jeder XML-Namespace einem einzelnen Java-Paket zugeordnet sein. Es wird ein Standardzuordnungsalgorithmus verwendet, der jedes Protokoll aus dem XML-Namespace löscht und die Namen zurücknimmt. Beispiel: Der XML-Namespace http://websphere.ibm.com wird mit dem Namen "com.ibm.websphere" zu einem Java-Paket.
Bei der Standardzuordnung eines XML-Namespace zu einem Java-Paket wird der Stammkontext (context-root) nicht berücksichtigt. Wenn zwei Namespaces bis zum ersten Schrägstrich (/) identisch sind, werden sie demselben Java-Paket zugeordnet. Beispiel: Die XML-Namespaces http://websphere.ibm.com/foo und http://websphere.ibm.com/bar werden beide dem Java-Paket "com.ibm.websphere" zugeordnet. Die Standardzuordnung zwischen XML-Namespaces und Java-Paketnamen kann mit den Optionen "-NStoPkg" und "-PkgtoNS" der Befehle WSDL2Java und Java2WSDL außer Kraft gesetzt werden.
XML-Namen decken einen wesentlich größeren Bereich ab als Java-IDs. Sie können Zeichen enthalten, die in Java-IDs nicht zulässig sind. Anhang 20 der JAX-RPC-Spezifikation enthält die Regeln, mit denen ein XML-Schema einer Java-ID zugeordnet werden kann.
- Zusammenfassung der Java-Konstrukte: In der folgenden Tabelle sind die XML-Java-Konstrukte zusammengefasst. Eine Beschreibung dieser Zuordnungen finden Sie in der JAX-RPC-Spezifikation.
Tabelle 3. Zuordnung einer WSDL oder eines XML-Konstrukts zu Java. Beschreibt die Zuordnung von XML-Konstrukten zu Java. WSDL- und XML-Konstrukt Java-Konstrukt xsd:complexType Java-Bean-Klasse, Java-Ausnahmeklasse oder Java-Bereich verschachteltes xsd:element/xsd:attribute Java-Bean-Eigenschaft xsd:simpleType (enumeration) JAX-RPC-Klasse für Enum (Aufzählung) wsdl:message Die Signatur des Methodenparameters wird in der Regel von wsdl:message bestimmt. Signatur der Methode der Serviceendpunktschnittstelle wsdl:portType Serviceendpunktschnittstelle wsdl:operation Methode einer Serviceendpunktschnittstelle wsdl:binding Stub wsdl:service Serviceschnittstelle wsdl:port Methode für Portzugriff in der Serviceschnittstelle - XML-Standardtypen zuordnen:
- Zuordnung einfacher XML-Typen laut JAX-RPC:
Viele XML-Typen werden Java-Typen direkt zugeordnet. Eine Beschreibung dieser Zuordnungen finden Sie in der JAX-RPC-Spezifikation.
Der Befehl WSDL2Java generiert Java-Typen für die XML-Schemakonstrukte, die im Abschnitt wsdl:types definiert sind. Die XML-Schemasprache ist breiter angelegt als die erforderliche bzw. die optionale Untergruppe, die in der JAX-RPC-Spezifikation definiert wird. Der Befehl WSDL2Java unterstützt die erforderlichen Zuordnungen und die meisten optionalen Zuordnungen sowie einige XML-Schemazuordnungen, die nicht in der JAX-RPC-Spezifikation definiert sind. Der Befehl WSDL2Java ignoriert einige Konstrukte, die er nicht unterstützt. Das Attribut default wird beispielsweise vom Befehl nicht unterstützt. Wenn ein xsd:element mit dem Attribut default definiert ist, wird das Attribut default ignoriert. In einigen Fällen ordnet der Befehl der Java-Schnittstelle javax.xml.soap.SOAPElement nicht unterstützte Konstrukte zu.
Die Java-Bean-Zuordnung ist in Abschnitt 4.2.3 der JAX-RPC-Spezifikation definiert. xsd:complexType definiert den Typ. Die verschachtelten xsd:elements in den xsd:sequence- oder xsd:all-Gruppen werden Java-Bean-Eigenschaften zugeordnet. Beispiel:XML: <xsd:complexType name="Sample"> <xsd:sequence> <xsd:element name="a" type="xsd:string"/> <xsd:element name="b" maxOccurs="unbounded" type="xsd:string"/> </xsd:sequence> </xsd:complexType> Java: public class Sample { // .. public Sample() {} // Bean-Eigenschaft a public String getA() {...} public void setA(String value) {...} // Indexiertes Bean-Merkmkal b public String[] getB() {...} public String getB(int index) {...} public void setB(String[] values) {...} public void setB(int index, String value) {...} }
- Zuordnung des Konstrukts wsdl:portType
Das Konstrukt wsdl:portType wird der Serviceendpunktschnittstelle zugeordnet. Der Name des Konstrukts wsdl:portType wird dem Namen der Klasse der Serviceendpunktschnittstelle zugeordnet.
- Zuordnung des Konstrukts wsdl:operation Ein Konstrukt wsdl:operation in einem wsdl:portType wird einer Methode der Serviceendpunktschnittstelle zugeordnet. Der Name des Konstrukts wsdl:operation wird dem Namen der Methode zugeordnet. Das wsdl:operation enthält die Elemente wsdl:input und wsdl:output, die mit dem Attribut message auf die wsdl:message-Konstrukte der Anforderung und Antwort verweisen. Das Konstrukt wsdl:operation kann ein Element wsdl:fault enthalten, das ein Element wsdl:message referenziert, das den Fehler beschreibt. Diese Fehler werden Java-Klassen zugeordnet, die die Ausnahme java.lang.Exception, wie im Abschnitt 4.3.6 der JAX-RPC-Spezifikation beschrieben, erweitern.
- Auswirkung des Formats document/literal wrappedWenn die WSDL-Datei das Format "document/literal wrapped" verwendet, werden die Methodenparameter aus dem xsd:element des Wrapper zugeordnet. Die Formate "document/literal wrapped" und "literal" werden vom Befehl WSDL2Java automatisch erkannt. Die folgenden Kriterien müssen erfüllt sein:
- Die WSDL-Datei muss die Angabe style="document" in ihrem wsdl:binding-Konstrukt enthalten.
- Die input- und output-Konstrukte der Operationen im Konstrukt wsdl:binding müssen soap:body-Elemente mit der Angabe use="literal" enthalten.
- Das wsdl:message-Element, auf das das input-Konstrukt wsdl:operation verweist, darf nur eine Komponente enthalten.
- Die Komponente muss mit dem Attribut element ein xsd:element referenzieren.
- Das referenzierte xsd:element oder Wrapper-Element muss denselben Namen haben wie die wsdl:operation.
- Das Wrapper-Element darf keine xsd:attribute-Elemente enthalten.
WSDL: <xsd:element name="myMethod"> <xsd:complexType> <xsd:sequence> <xsd:element name="param1" type="xsd:string"/> <xsd:element name="param2" type="xsd:int"/> </xsd:sequence> </xsd:complexType> </xsd:element> ... <wsdl:message name="response"/> <part name="parameters" element="ns:myMethod"/> </wsdl:message name="response"/> <wsdl:message name="response"/> ... <wsdl:operation name="myMethod"> <input name="input" message="request"/> <output name="output" message="response"/> </wsdl:operation> Java: void myMethod(String param1, int param2) ...
- Parameterzuordnung:
Wenn das Format document/literal wrapped nicht ermittelt werden kann, werden für die Parameterzuordnung die normalen JAX-RPC-Zuordnungsregeln verwendet, die im Abschnitt 4.3.4 der JAX-RPC-Spezifikation beschrieben sind.
Jeder Parameter wird von einem wsdl:message-Abschnitt definiert, der von den Elementen input und output referenziert wird.- Ein wsdl:part-Element in der wsdl:message der Anforderung wird dem Parameter input zugeordnet.
- Ein wsdl:part-Element in der wsdl:message der Antwort wird einem
return-Wert zugeordnet. Sind in der Antwort mehrere wsdl:part-Elemente enthalten, werden
diese output-Parametern zugeordnet.
- Für jeden output-Parameter wird, wie im Abschnitt 4.3.5 der JAX-RPC-Spezifikation beschrieben, eine Holder-Klasse generiert.
- Ein wsdl:part-Element, das die wsdl:message für Anforderung und Antwort ist, wird einem
inout-Parameter zugeordnet.
- Für jeden inout-Parameter wird, wie im Abschnitt 4.3.5 der JAX-RPC-Spezifikation beschrieben, eine Holder-Klasse generiert.
- Das Attribut wsdl:operation parameterOrder definiert die Reihenfolge der Parameter.
XML: <wsdl:message name="request"> <part name="param1" type="xsd:string"/> <part name="param2" type="xsd:int"/> </wsdl:message name="response"/> <wsdl:message name="response"/> ... <wsdl:operation name="myMethod" parameterOrder="param1, param2"> <input name="input" message="request"/> <output name="output" message="response"/> </wsdl:operation> Java: void myMethod(String param1, int param2) ...
- Auswirkung des Formats document/literal wrapped
- Zuordnung von wsdl:binding:Der Befehl WSDL2Java verwendet die wsdl:binding-Informationen, um einen implementierungsspezifischen, clientseitigen Stub zu generieren. WebSphere Application Server verwendet die wsdl:binding-Informationen auf der Serverseite, um die Anforderung ordnungsgemäß zu entserialisieren, den Web-Service aufzurufen und die Antwort zu serialisieren. Die Informationen in wsdl:binding dürfen die Generierung der Serviceendpunktschnittstelle nicht beeinflussen. Dies kann jedoch der Fall sein, wenn das Format "document/literal" wrapped verwendet wird oder MIME-Anhänge vorhanden sind.
- MIME-Anhänge: In einer mit WSDL 1.1-kompatiblen WSDL-Datei wird ein Teil einer Operationsnachricht, die in der Bindung als MIME-Anhang definiert ist, zu einem Parameter des Anhangstyps, unabhängig von der deklarierten Komponente. Beispiel:
Die JAX-RPC-Spezifikation erfordert Unterstützung für die folgenden MIME-Typen:XML: <wsdl:types> <schema ...> <complexType name="ArrayOfBinary"> <restriction base="soapenc:Array"> <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:binary[]"/> </restriction> </complexType> </schema> </wsdl:types> <wsdl:message name="request"> <part name="param1" type="ns:ArrayOfBinary"/> <wsdl:message name="response"/> <wsdl:message name="response"/> ... <wsdl:operation name="myMethod"> <input name="input" message="request"/> <output name="output" message="response"/> </wsdl:operation> ... <binding ... <wsdl:operation name="myMethod"> <input> <mime:multipartRelated> <mime:part> <mime:content part="param1" type="image/jpeg"/> </mime:part> </mime:multipartRelated> </input> ... </wsdl:operation> Java: void myMethod(java.awt.Image param1) ...
Tabelle 4. Zuordnung von MIME-Typ und Java-Typ. Beschreibt die Zuordnung von MIME-Typen und Java-Typen. MIME-Typ Java-Typ image/gif java.awt.Image image/jpeg java.awt.Image text/plain java.lang.String multipart/* javax.mail.internet.MimeMultipart text/xml javax.xml.transform.Source application/xml javax.xml.transform.Source
- MIME-Anhänge:
- Zuordnung von wsdl:service
Das Element wsdl:service wird einer generierten Serviceschnittstelle zugeordnet. Die generierte Serviceschnittstelle enthält Methoden, mit denen man auf jeden Port im Element wsdl:service zugreifen kann. Die generierte Serviceschnittstelle wird in den Abschnitten 4.3.9, 4.3.10 und 4.3.11 der JAX-RPC-Spezifikation erläutert.
Außerdem wird der wsdl:service der implementierungsspezifischen Klasse ServiceLocator zugeordnet, die eine Implementierung der generierten Serviceschnittstelle darstellt.
- Zuordnung einfacher XML-Typen laut JAX-RPC:
Weitere Informationen zu diesem Tool finden Sie in der Beschreibung des Befehlszeilentools WSDL2Java für JAX-RPC-Anwendungen (Java API for XML-based Remote Procedure Call).
Zuordnungen zwischen WSDL- und SOAP-Nachrichten
Die WSDL-Datei definiert das Format der SOAP-Nachricht, die über Netzverbindungen übertragen wird. Der Befehl WSDL2Java und die Laufzeitkomponente von WebSphere Application Server verwenden die Informationen in der WSDL-Datei, um sicherzustellen, dass die SOAP-Nachricht ordnungsgemäß serialisiert und entserialisiert wird.
Wenn ein Element wsdl:binding angibt, dass eine Nachricht in einem RPC-Format gesendet wird, enthält die SOAP-Nachricht ein Element, das die Operation definiert. Gibt ein Element wsdl:binding an, dass eine Nachricht im Format "document" gesendet wird, enthält die SOAP-Nachricht kein Element, das die Operation definiert.
Wenn das Element wsdl:part mit dem Attribut type definiert wird, werden der Name und der Typ der Komponente (part) in der Nachricht verwendet. Wenn das Element wsdl:part mit dem Attribut element definiert wird, werden der Name und der Typ des Elements in der Nachricht verwendet. Das Attribut element wird von der JAX-RPC-Spezifikation bei Verwendung von use="encoded" nicht unterstützt.
DOCUMENT/LITERAL
WSDL:
<xsd:element name="c" type="xsd:int"/>
<xsd:element name="method">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="a" type="xsd:string"/>
<xsd:element ref="ns:c"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
...
<wsdl:message name="request">
<part name="parameters" element="ns:method"/>
</wsdl:message>
...
<wsdl:operation name="method">
<input message="request"/>
...
Message:
<soap:body>
<ns:method>
<a>ABC</a>
<c>123</a>
<ns:method>
</soap:body>
RPC/ENCODED
WSDL:
<xsd:element name="c" type="xsd:int"/>
...
<wsdl:message name="request">
<part name="a" type="xsd:string"/>
<part name="b" element="ns:c"/>
</wsdl:message>
...
<wsdl:operation name="method">
<input message="request"/>
...
Message:
<soap:body>
<ns:method>
<a xsi:type="xsd:string">ABC</a>
<element attribute is not permitted in rpc/encoded mode>
</ns:method>
</soap:body>
DOCUMENT/LITERAL not wrapped
WSDL:
<xsd:element name="c" type="xsd:int"/>
...
<wsdl:message name="request">
<part name="a" type="xsd:string"/>
<part name="b" element="ns:c"/>
</wsdl:message>
...
<wsdl:operation name="method">
<input message="request"/>
...
Message:
<soap:body>
<a>ABC</a>
<c>123</a>
</soap:body>