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.

Das folgende Beispiel zeigt das XML-Schema für die Datei CustomBindingProvider.xml. Der übergeordnete Typ ist der providerType, der eine Liste von Zuordnungselementen enthält. Jedes Zuordnungselement definiert den zugehörigen angepassten Datenbinder und Eigenschaften, wozu auch xmlQName, javaName und qnameScope gehören. Weitere Informationen zu diesen Eigenschaften finden Sie in der Dokumentation zur Schnittstelle "CustomBinder" für JAX-RPC-Anwendungen. Der providerType verfügt auch über ein Attribut mit dem Namen "scope", das den Wert server, application oder module annehmen kann. Das Attribut "scope" wird von der Serverimplementierung verwendet, um den Konflikt aufzulösen und eine angepasste Bindungshierarchie zu realisieren.
<?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>
Das Folgende ist ein Beispiel der Datei CustomBindingProvider.xml für das SDO-DataGraph-Schema, das im Artikel Schnittstelle 'CustomBinder' eingeführt wurde. Das Beispiel zeigt die Zuordnung zwischen einem Schematyp, DataGraphType, und einem Java-Typ, commonj.sdo.DataGraph. Der Binder, der diese Zuordnung darstellt, hat den Namen test.sdo.SDODataGraphBinder.
<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.

Das folgende Beispiel ist eine WSDL-Datei, die das im Artikel "Schnittstelle 'CustomBinder'" eingeführte SDO-DataGraph-Schema referenziert.
<?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.

Symbol, das den Typ des Artikels anzeigt. Konzeptartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwbs_custombinderprovider
Dateiname:cwbs_custombinderprovider.html