JAX-RPC アプリケーションのカスタム・バインディング・プロバイダー
カスタム・バインディング・プロバイダー は、宣言メタデータ・ファイルを持つカスタム・データ・バインダー・クラスのパッケージです。 カスタム・バインディング・プロバイダーの主な目的は、関連するカスタム・データ・バインダーを統合して、特定のユーザー・シナリオをサポートすることです。カスタム・バインディング・プロバイダーは、カスタム・データ・バインダーをエミッター・ツールや ランタイム・システムに接続するために使用します。そうすることで、エミッター・ツールは適切な成果物を生成することができ、 ランタイム・システムは既存タイプのマッピング・システムを拡大し、適用されたカスタム・データ・バインダーを反映して 呼び出すことができます。
カスタム・バインディング・プロバイダーが特定の XML スキーマ・タイプを処理するのに対して、 アプリケーションにはいくつかの関連する XML スキーマ・タイプが含まれます。 完全なバインディング・ソリューションを提供するには、さまざまなカスタム・データ・バインダーをまとめ、 宣言するメカニズムが必要です。 カスタム・バインディング・プロバイダーの概念は、カスタム・データ・バインダーのセットを エミッター・ツールまたはランタイム・システムに接続するために使用できる宣言モデルを定義します。
カスタム・データ・バインダー、および WebSphere® Application Server に含まれている、カスタム・データ・バインダーを定義するための CustomBinder API について詳しくは、カスタム・データ・バインダー情報、および CustomBinder インターフェースに関する情報を参照してください。カスタム・データ・バインダーの定義を完了すると、カスタム・データ・バインダー・パッケージをデプロイする準備が整います。 このパッケージのデプロイ方法については、『JAX-RPC アプリケーション用のカスタム・データ・バインダーをデプロイするための使用パターン』の情報を参照してください。
宣言メタデータ・ファイル CustomBindingProvider.xml は、 単一の Java™ アーカイブ (JAR) ファイルのカスタム・プロバイダー・クラスを使用してパッケージ化された XML ファイルであり、/META-INF/services/directory にあります。プロバイダーの JAR ファイルがパッケージ化されると、JAR ファイル内にあるバイナリー情報とメタデータ・ファイルを WSDL2Java コマンド行ツールおよびランタイム・システムが使用できるようになります。
<?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>
開発のために、カスタム・データ・バインダーを WSDL2Java コマンド行ツールにインポートする必要があります。カスタム・データ・バインダーは、Service Endpoint Interface および JSR 109 マッピング・データを含む開発の成果物が Web サービス記述言語 (WSDL) ファイルから生成される方法に影響を与えます。 WSDL2Java コマンド行ツールは WebSphere Application Server に同梱されており、カスタム・バインダー Java アーカイブ・ファイルまたはカスタム・バインダー・パッケージを使用してこれらの開発の成果物を生成します。
<?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>
カスタム・データ・バインディング・パッケージを使用せずに WSDL2Java コマンドを実行すると、
JAX-RPC 仕様で指示されているパラメーター・タイプを持つ、次のサービス・エンドポイント・インターフェースが生成されます。
public interface EchoService extends java.rmi.Remote {
public javax.xml.soap.SOAPElement
echo(javax.xml.soap.SOAPElement parameter)
throws java.rmi.RemoteException;
}
カスタム・データ・バインディング・パッケージを使用して WSDL2Java コマンドを実行すると、パラメーター・タイプを生成するのにカスタム・データ・バインダーが使用されます。
カスタム・データ・バインダーを適用するには、WSDL2Java ツールで -classpath オプションを使用します。このツールはクラスパスを検索して、/META-INF/services/CustomBindingProvider.xml と同じファイル・パスを持つすべてのファイルを特定します。
以下は、パラメーター・タイプ commonj.sdo.Datagraph を持つサービス・エンドポイント・インターフェースを生成するためのコマンドの使用法の例です。
WSDL2Java -role develop-server -container web classpath sdobinder.jar echo.wsdl
生成されるサービス・エンドポイント・インターフェースは、次のようになります。
public interface EchoService extends java.rmi.Remote {
public commonj.sdo.DataGraph
echo(commonj.sdo.DataGraph parameter)
throws java.rmi.RemoteException;
}
カスタム・バインダーによりパッケージ化された JAR ファイルは、実行時に使用可能にして、Web サービス・クライアントが、スタブ・ベースのクライアントまたは動的起動インターフェース (DII) クライアントのいずれであるかにかかわらず、呼び出されることを確認する必要があります。これは、サービスについても該当します。