Provider für angepasste Bindungen für JAX-RPC-Anwendungen
Als Provider für angepasste Bindungen wird das Packen von angepassten Datenbinderklassen mit einer deklarativen Metadatendatei bezeichnet. Hauptaufgabe des Providers für angepasste Bindungen ist es, zugehörige angepasste Datenbinder zusammenzufassen, um bestimmte Benutzerszenarien zu unterstützen. Der Provider für angepasste Bindungen wird dazu verwendet, die angepassten Datenbinder in die Emitter-Tools und das Laufzeitsystem zu integrieren, so dass die Emitter-Tools die geeigneten Artefakte generieren können und das Laufzeitsystem sein vorhandenes Typenzuordnungssystem erhöhen kann, um die angewendeten angepassten Datenbinder wiederzugeben und aufzurufen.
Ein Provider für angepasste Bindungen arbeitet mit einem bestimmten XML-Schematyp, wohingegen Anwendungen einige zusammengehörige XML-Schematypen verwenden. Sie benötigen folglich ein Verfahren, um verschiedene angepasste Datenbinder zusammenzufassen und zu deklarieren, um eine vollständige Bindungslösung bereitzustellen. Das Konzept des Providers für angepasste Bindungen definiert ein deklaratives Modell, das dazu verwendet werden kann, eine Reihe von angepassten Datenbinder in die Emitter-Tools oder in das Laufzeitsystem zu integrieren.
In der Dokumentation zu den angepassten Datenbindern und zur Schnittstelle "CustomBinder" finden Sie weitere Informationen zur Definition angepasster Datenbinder und zur Verwendung der API "CustomBinder" in WebSphere Application Server. Nach der Definition der angepassten Datenbinder können Sie das angepasste Binderpaket implementieren. Wie Sie dieses Paket implementieren, können Sie in den Informationen zu den Verwendungsmustern für die Implementierung angepasster Datenbinder für JAX-RPC-Anwendungen nachlesen.
Die deklarative Metadatendatei CustomBindingProvider.xml ist eine XML-Datei, die mit den angepassten Provider-Klassen in einer einzigen JAR-Datei (Java™ Archive) gepackt und im Verzeichnis /META-INF/services/directory enthalten ist. Nachdem eine Provider-JAR-Datei gepackt wurde, können die binären Informationen und die Metadatendatei in der JAR-Datei vom Befehlszeilentool WSDL2Java und von dem Laufzeitsystem verwendet werden.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
targetNamespace=
"http://www.ibm.com/webservices/customdatabinding/2004/06"
xmlns:customdatabinding=
"http://www.ibm.com/webservices/customdatabinding/2004/06"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="qualified">
<xsd:element name="provider" type="customdatabinding:providerType"/>
<xsd:complexType name="providerType">
<xsd:sequence>
<xsd:element name="description" type="xsd:string" minOccurs="0"/>
<xsd:element name="mapping" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="description" type="xsd:string" minOccurs="0"/>
<xsd:element name="xmlQName" type="xsd:QName"/>
<xsd:element name="javaName" type="xsd:string"/>
<xsd:element name="qnameScope"
type="customdatabinding:qnameScopeType"/>
<xsd:element name="binder" type="xsd:string"/>
</xsd:sequence>
/xsd:complexType>
</xsd:element>
<xsd:attribute name="scope"
type="customdatabinding:ProviderScopeType" default="module"/>
</xsd:sequence>
</xsd:complexType
<xsd:simpleType name="qnameScopeType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="simpleType"/>
<xsd:enumeration value="complexType"/>
<xsd:enumeration value="element"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ProviderScopeType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="server"/>
<xsd:enumeration value="application"/>
<xsd:enumeration value="module"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
<cdb:provider
xmlns:cdb="http://www.ibm.com/webservices/customdatabinding/2004/06"
xmlns:sdo="commonj.sdo">
<cdb:mapping>
<cdb:xmlQName>sdo:DataGraphType</cdb:xmlQName>
<cdb:javaName>commonj.sdo.DataGraph</cdb:javaName>
<cdb:qnameScope>complexType</cdb:qnameScope>
<cdb:binder>test.sdo.SDODataGraphBinder</cdb:binder>
</cdb:mapping>
</cdb:provider>
Sie müssen angepasste Datenbinder zu Entwicklungszwecken in das Befehlszeilentool WSDL2Java importieren. Die angepassten Datenbinder beeinflussen die Art und Weise, wie die Entwicklungsartefakte, einschließlich der Serviceendpunktschnittstelle und der JSR-109-Zuordnungsdaten, von der WSDL-Datei (Web Services Description Language) generiert werden. Das Befehlszeilentool WSDL2Java ist im Lieferumfang von WebSphere Application Server enthalten. Es verwendet die JAR-Datei mit dem angepassten Binder oder ein Paket mit dem angepassten Binder, um diese Entwicklungsartefakte zu generieren.
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://sdo.test"
xmlns:impl="http://sdo.test"
xmlns:intf="http://sdo.test"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sdo="commonj.sdo">
<wsdl:types>
<schema elementFormDefault="qualified" targetNamespace="http://sdo.test"
xmlns="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo">
<import namespace="commonj.sdo" schemaLocation="sdo.xsd"/>
</schema>
</wsdl:types>
<wsdl:message name="echoResponse">
<wsdl:part element="sdo:datagraph" name="return"/>
</wsdl:message>
<wsdl:message name="echoRequest">
<wsdl:part element="sdo:datagraph" name="parameter"/>
</wsdl:message>
<wsdl:portType name="EchoService">
<wsdl:operation name="echo">
<wsdl:input message="impl:echoRequest" name="echoRequest"/>
<wsdl:output message="impl:echoResponse" name="echoResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="EchoServiceSoapBinding" type="impl:EchoService">
<wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="echo">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="echoRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="echoResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="EchoServiceService">
<wsdl:port binding="impl:EchoServiceSoapBinding" name="EchoService">
<wsdlsoap:address location="http://<uri>"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Wenn Sie den Befehl
WSDL2Java ohne das Paket mit der angepassten Datenbindung ausführen,
wird gemäß der JAX-RPC-Spezifikation die
folgende Serviceendpunktschnittstelle mit einem Parametertyp generiert:
public interface EchoService extends java.rmi.Remote {
public javax.xml.soap.SOAPElement
echo(javax.xml.soap.SOAPElement parameter)
throws java.rmi.RemoteException;
}
Wenn Sie den Befehl WSDL2Java mit dem Paket mit der angepassten Datenbindung
ausführen, werden die angepassten Datenbinder verwendet, um die Parametertypen zu generieren.
Um die angepassten Datenbinder anzuwenden, verwenden Sie die Option
-classpath im Tool WSDL2Java.
Das Tool durchsucht seinen Klassenpfad, um alle Dateien mit dem Dateipfad
/META-INF/services/CustomBindingProvider.xml zu lokalisieren.
Im folgenden Beispiel wird gezeigt, wie der Befehl verwendet wird, um eine Serviceendpunktschnittstelle
mit dem Parametertyp commonj.sdo.Datagraph zu generieren:
WSDL2Java -role develop-server -container web classpath sdobinder.jar echo.wsdl
Die generierte Serviceendpunktschnittstelle sieht wie folgt aus: public interface EchoService extends java.rmi.Remote {
public commonj.sdo.DataGraph
echo(commonj.sdo.DataGraph parameter)
throws java.rmi.RemoteException;
}
Die gepackte JAR-Datei mit dem angepassten Binder
muss zur Laufzeit verfügbar sein, damit der Web-Service-Client aufgerufen wird,
unabhängig davon, ob es sich um einen Stub-basierten Client oder einen DII-Client
(Dynamic Invocation Interface) handelt. Dasselbe gilt für den Service.