JAX-RPCマッピング・ファイルは、WSDLおよびJavaサービス・エンドポイント・インタフェース間のバインディングを説明する標準のXMLファイルです。JAX-RPCマッピング・ファイルは、多数のWebServicesAssemblerコマンドにより出力の一部として作成されます。ファイルの内容を編集して、生成されるWSDLまたはサービス・エンドポイント・インタフェースのコンテンツをカスタマイズできます。
JAX-RPCマッピング・ファイル・スキーマは次のWebサイトを参照してください。
http://java.sun.com/xml/ns/j2ee/j2ee_jaxrpc_mapping_1_1.xsd
この付録の内容は、次のとおりです。
JAX-RPCマッピング・ファイルは、WebServicesAssemblerコマンドにより出力の一部として生成されます。これらのコマンドの多くは、Webサービスをボトムアップ方式でアセンブルする際に使用されることに注意してください。
aqAssemble
assemble
corbaAssemble
dbJavaAssemble
ejbAssemble
jmsAssemble
plsqlAssemble
sqlAssemble
genInterface
genValueTypes
(部分的なJAX-RPCマッピング・ファイルを生成)
genWsdl
関連資料: これらのコマンドの詳細は、『Oracle Application Server Web Services開発者ガイド』の「WebServicesAssemblerコマンド」を参照してください。 |
生成されたJAX-RPCマッピング・ファイルには、次のネーミング・パターンがあります。接頭辞serviceNameは、サービスのqname
のローカル部分です。
<serviceName>java-wsdl-mapping.xml
通常、JAX-RPCマッピング・ファイルは、webservices.xml
ファイルと同じディレクトリに保存されます。
JAX-RPCマッピング・ファイルを編集すると、生成されたWSDL(ボトムアップ方式でのWebサービス開発の場合)のコンテンツ、または生成されたサービス・エンドポイント・インタフェース(トップダウン方式でのWebサービス開発の場合)のコンテンツをカスタマイズできるようになります。「JAX-RPCマッピング・ファイル編集のシナリオ」には、WSDLまたはサービス・エンドポイント・インタフェースのカスタマイズが必要になる一般的な状況が説明されています。
編集するマッピング・ファイルを作成するために、WebServicesAssemblerにはgenInterface
およびgenWsdl
の2つのコマンドが用意されています。
一般的なトップダウン方式でのWebサービス開発の場合、genInterface
コマンドによりWSDLが入力として使用され、サービス・エンドポイント・インタフェースおよびJAX-RPCマッピング・ファイルが出力として生成されます。
一般的なボトムアップ方式でのWebサービス開発の場合、genWsdl
コマンドによりサービス・エンドポイント・インタフェースが入力として使用され、WSDLおよびJAX-RPCマッピング・ファイルが出力として生成されます。
マッピング・ファイルを変更すると、Webサービスをトップダウン方式またはボトムアップ方式で開発する任意のWebServicesAssemblerコマンドの入力として使用できるようになります。結果のサービス・エンドポイント・インタフェースまたはWSDLには、マッピング・ファイルで指定した変更内容が反映されています。
次に示す手順でこの内容をまとめます。
マッピング・ファイルを生成します。
これを実行するには、トップダウン方式のWebサービス開発の場合にはgenInterface
コマンドを使用し、ボトムアップ方式のWebサービス開発の場合にはgenWsdl
コマンドを使用します。
マッピング・ファイルを編集します。
「JAX-RPCマッピング・ファイル編集のシナリオ」の項では、JAX-RPCマッピング・ファイルを編集する一般的な方法が説明されています。
変更済のJAX-RPCマッピング・ファイルを適切なWebServicesAssemblerコマンドの入力として使用し、Webサービスを開発します。
次の項では、カスタムのWSDLまたはサービス・エンドポイント・インタフェースを生成するために、JAX-RPCマッピング・ファイルを編集する必要がある状況を説明します。
マッピング・ファイルでは、<package-mapping>
要素は名前空間とJavaパッケージ間のマッピングを示します。<namespaceURI>
サブ要素は名前空間を示し、<package-type>
サブ要素はJavaパッケージを示します。例F-1に、サンプルの<package-mapping>
要素が表示されています。
例F-1 JAX-RPCマッピング・ファイルのパッケージから名前空間へのマッピング要素
<java-wsdl-mapping version="1.0"> <package-mapping> <package-type>com.foo.mypackage</package-type> <namespaceURI>http://www.foo.com</namespaceURI> </package-mapping> </java-wsdl-mapping>
<package-mapping>
要素内のいずれかの値を変更することで、名前空間およびJavaパッケージ間のマッピングを変更できます。生成されたWSDLまたはサービス・エンドポイント・インタフェースにより、新しい名前空間またはJavaパッケージの値が使用されます。
マッピング・ファイルでは、JavaまたはWSDLアーティファクトの名前を変更できます。たとえば、トップダウン方式でのWebサービス開発で、指定したWSDLのwsdl-say-hello
操作のマッピングを変更するとします。WSDLをgenInterface
への入力として使用し、デフォルトからwsdl-say-hello
WSDL操作を指定するjavaSayHello
メソッドにマッピングするよう、結果のJAX-RPCマッピング・ファイルを編集できます。同様に、ボトムアップ方式のWebサービス開発の場合にも、MyServiceEndpoint
など、指定したサービス・エンドポイント・インタフェースをgenWsdl
への入力として使用できます。結果のJAX-RPCマッピング・ファイルを編集して、サービス・エンドポイント・インタフェースをmy-service-port-type
などのWSDLのport-typeにマッピングできます。
JavaおよびWSDLアーティファクトの名前を変更できる場所の詳細は、JAX-RPCマッピング・ファイル・スキーマを参照してください。
Enterprise Web Services 1.1仕様には、JavaクラスとXML型との間のデフォルト・マッピングが定義されています。ただし、使用するアプリケーションでデフォルト・マッピングを変更する状況が考えられます。<java-xml-type-mapping>
要素のJAX-RPCマッピング・ファイルのコンテンツを編集して、マッピングを変更できます。
たとえば、genProxy
WebServicesAssemblerコマンドを使用して、クライアント・プロキシをアセンブルするとします。ただし、XML型xsd:dateTime
をjava.util.Calendar
オブジェクト(デフォルト・マッピング)にマッピングするのではなく、java.util.Date
オブジェクトにマッピングします。JAX-RPCマッピング・ファイルを編集して、デフォルト・マッピングを変更してください。
例F-2に、<java-xml-type-mapping>
要素のサンプルを示します。<java-type>
サブ要素に、XML型に関連付ける新しいJavaオブジェクトをリストします。<root-type-qname>
サブ要素は、XML型を識別します。
複数の名前空間のあるWSDLを使用している場合、生成されたすべてのコードは、WebServicesAssemblerによりWSDLおよびスキーマ値タイプの名前空間に対応するパッケージに配置されます。WSDLに複数の名前空間が含まれる場合は、各名前空間に対して1つのパッケージが作成されます。複数のパッケージをインポートすると、実装クラスを記述する際に不便が生じる可能性があります。
WebServicesAssemblerには、すべてのコードを同じパッケージに生成できる引数はありません。たとえば、packageName
引数は、サービス・エンドポイント・インタフェースおよびWSDLと同じターゲットの名前空間を持つスキーマ型に対するパッケージ名にのみ影響します。スキーマ値タイプが異なる名前空間にある場合は、スキーマ値タイプは、WebServicesAssemblerによりデフォルトで別のパッケージに生成されます。
JAX-RPCマッピング・ファイルを編集することで、単一のパッケージを生成するようWebServicesAssemblerを変更できます。各名前空間に対し、ファイルには<package-type>
および<namespaceURI>
要素のある<package-mapping>
句が含まれます。これらの要素は、名前空間とJavaパッケージ間のマッピングを示します。<package-type>
要素の各インスタンスを編集して、生成されたコードを配置する単一のパッケージの名前を入力します。
例F-3に、異なる3つの名前空間から生成されたコードをパッケージMyPackage
に配置するために編集された、JAX-RPCマッピング・ファイルの内容を示します。<package-type>
および<namespaceURI>
要素は太字で強調してあります。
例F-3 複数の名前空間に単一のパッケージを指定するマッピング・ファイル
<java-wsdl-mapping version="1.1"> <package-mapping> <package-type>MyPackage</package-type> <namespaceURI>namespace1 in the WSDL</namespaceURI> </package-mapping> <package-mapping> <package-type>MyPackage</package-type> <namespaceURI>namespace2 in the WSDL</namespaceURI> </package-mapping> ... <package-mapping> <package-type>MyPackage</package-type> <namespaceURI>namespaceN in the WSDL</namespaceURI> </package-mapping> </java-wsdl-mapping>
複数の名前空間のあるWSDLを使用して単一のパッケージにコードを生成する方法
次の手順に、WSDLに複数の名前空間が含まれる場合に、単一のパッケージにコードを生成するようWebservicesAssemblerを変更する方法をまとめます。
WebサービスのJAX-RPCマッピング・ファイルを生成します。
Webサービスをトップダウン方式でアセンブルする場合はgenInterface
コマンドを、ボトムアップ方式でアセンブルする場合はgenWsdl
コマンドを使用します。また、独自のJAX-RPCマッピング・ファイルを手動で作成することも可能です。
JAX-RPCマッピング・ファイルを編集して、<package-mapping>
句の<package-type>
要素の各インスタンスに、生成されたコードを配置する単一のパッケージの名前を含めます。
適切な*Assemble
コマンドを使用してWebサービスをアセンブルします。
mappingFileName
引数を使用して、編集済のJAX-RPCマッピング・ファイルを指定します。生成されたすべてのコードが同じパッケージに配置されます。
関連資料: WebServicesAssemblerにより、パッケージ名からどのようにしてデフォルト・タイプの名前空間が構成されるかの詳細は、『Oracle Application Server Web Services開発者ガイド』の「ターゲットWSDL名前空間とパッケージ名のマッピングのデフォルト・アルゴリズム」を参照してください。 |
<service-endpoint-method-mapping>
要素により、JavaメソッドからWSDL操作へのマッピングが定義されます。この要素の下に<wrapped-element/>
が指定されていて、document-literalのWSDL操作を使用している場合、SOAPヘッダーにマッピングされていない各Javaメソッド・パラメータはcomplexType
のサブ要素にマッピングされます。このcomplexType
は、ラッパー要素タイプとして使用されます。SOAPヘッダーにマッピングされていないJavaメソッド・パラメータは、complexType
のサブ要素にマッピング(ラップ)する必要があります。
<wsdl-message-mapping>
要素により、特定のJavaメソッド・パラメータから特定のメッセージおよび部分への一意のマッピングが定義されます。メッセージ・コンテキスト内の部分は、名前で一意に識別されます。
<wsdl-message-mapping>
要素の下に<soap-header/>
が指定されている場合には、次のようになります。
このJavaメソッド・パラメータは、ボトムアップ方式による開発のSOAPヘッダーとして公開されます。
対応するSOAPヘッダーは、トップダウン方式による開発のJavaメソッド・パラメータにマッピングされます。