ヘッダーをスキップ
Oracle Application Server Web Servicesアドバンスト開発者ガイド
10g(10.1.3.1.0)
B31869-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

F JAX-RPCマッピング・ファイル記述子

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マッピング・ファイルの作成方法

JAX-RPCマッピング・ファイルは、WebServicesAssemblerコマンドにより出力の一部として生成されます。これらのコマンドの多くは、Webサービスをボトムアップ方式でアセンブルする際に使用されることに注意してください。


関連資料:

これらのコマンドの詳細は、『Oracle Application Server Web Services開発者ガイド』の「WebServicesAssemblerコマンド」を参照してください。


JAX-RPCマッピング・ファイルのネーミング規則の概要

生成されたJAX-RPCマッピング・ファイルには、次のネーミング・パターンがあります。接頭辞serviceNameは、サービスのqnameのローカル部分です。

<serviceName>java-wsdl-mapping.xml

通常、JAX-RPCマッピング・ファイルは、webservices.xmlファイルと同じディレクトリに保存されます。

WSDLまたはサービス・エンドポイント・インタフェースのコンテンツのカスタマイズ方法

JAX-RPCマッピング・ファイルを編集すると、生成されたWSDL(ボトムアップ方式でのWebサービス開発の場合)のコンテンツ、または生成されたサービス・エンドポイント・インタフェース(トップダウン方式でのWebサービス開発の場合)のコンテンツをカスタマイズできるようになります。「JAX-RPCマッピング・ファイル編集のシナリオ」には、WSDLまたはサービス・エンドポイント・インタフェースのカスタマイズが必要になる一般的な状況が説明されています。

編集するマッピング・ファイルを作成するために、WebServicesAssemblerにはgenInterfaceおよびgenWsdlの2つのコマンドが用意されています。

マッピング・ファイルを変更すると、Webサービスをトップダウン方式またはボトムアップ方式で開発する任意のWebServicesAssemblerコマンドの入力として使用できるようになります。結果のサービス・エンドポイント・インタフェースまたはWSDLには、マッピング・ファイルで指定した変更内容が反映されています。

次に示す手順でこの内容をまとめます。

  1. マッピング・ファイルを生成します。

    これを実行するには、トップダウン方式のWebサービス開発の場合にはgenInterfaceコマンドを使用し、ボトムアップ方式のWebサービス開発の場合にはgenWsdlコマンドを使用します。

  2. マッピング・ファイルを編集します。

    「JAX-RPCマッピング・ファイル編集のシナリオ」の項では、JAX-RPCマッピング・ファイルを編集する一般的な方法が説明されています。

  3. 変更済のJAX-RPCマッピング・ファイルを適切なWebServicesAssemblerコマンドの入力として使用し、Webサービスを開発します。

JAX-RPCマッピング・ファイル編集のシナリオ

次の項では、カスタムのWSDLまたはサービス・エンドポイント・インタフェースを生成するために、JAX-RPCマッピング・ファイルを編集する必要がある状況を説明します。

名前空間からJavaへのマッピングの変更方法

マッピング・ファイルでは、<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パッケージの値が使用されます。

<package-mapping>要素は、マッピング・ファイル内で複数回使用できます。

JavaまたはWSDLアーティファクトの名前の変更方法

マッピング・ファイルでは、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マッピング・ファイル・スキーマを参照してください。

http://java.sun.com/xml/ns/j2ee/j2ee_jaxrpc_mapping_1_1.xsd

XML型に関連付けられるJavaクラスの変更方法

Enterprise Web Services 1.1仕様には、JavaクラスとXML型との間のデフォルト・マッピングが定義されています。ただし、使用するアプリケーションでデフォルト・マッピングを変更する状況が考えられます。<java-xml-type-mapping>要素のJAX-RPCマッピング・ファイルのコンテンツを編集して、マッピングを変更できます。

たとえば、genProxyWebServicesAssemblerコマンドを使用して、クライアント・プロキシをアセンブルするとします。ただし、XML型xsd:dateTimejava.util.Calendarオブジェクト(デフォルト・マッピング)にマッピングするのではなく、java.util.Dateオブジェクトにマッピングします。JAX-RPCマッピング・ファイルを編集して、デフォルト・マッピングを変更してください。

例F-2に、<java-xml-type-mapping>要素のサンプルを示します。<java-type>サブ要素に、XML型に関連付ける新しいJavaオブジェクトをリストします。<root-type-qname>サブ要素は、XML型を識別します。

例F-2 JavaオブジェクトへのXML型のマッピングの変更

<java-wsdl-mapping>
...
  <java-xml-type-mapping>
    <java-type>java.util.Date</java-type>
    <root-type-qname xmlns:qn="http://www.w3c.org/2001/XMLSchema">qn:dateTime</root-type-qname>
  </java-xml-type-mapping>
...
<java-wsdl-mapping>

複数の名前空間のあるWSDLを使用して単一のパッケージにコードを生成する方法

複数の名前空間のある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を変更する方法をまとめます。

  1. WebサービスのJAX-RPCマッピング・ファイルを生成します。

    Webサービスをトップダウン方式でアセンブルする場合はgenInterfaceコマンドを、ボトムアップ方式でアセンブルする場合はgenWsdlコマンドを使用します。また、独自のJAX-RPCマッピング・ファイルを手動で作成することも可能です。

  2. JAX-RPCマッピング・ファイルを編集して、<package-mapping>句の<package-type>要素の各インスタンスに、生成されたコードを配置する単一のパッケージの名前を含めます。

  3. 適切な*Assembleコマンドを使用してWebサービスをアセンブルします。

    mappingFileName引数を使用して、編集済のJAX-RPCマッピング・ファイルを指定します。生成されたすべてのコードが同じパッケージに配置されます。


関連資料:

WebServicesAssemblerにより、パッケージ名からどのようにしてデフォルト・タイプの名前空間が構成されるかの詳細は、『Oracle Application Server Web Services開発者ガイド』の「ターゲットWSDL名前空間とパッケージ名のマッピングのデフォルト・アルゴリズム」を参照してください。


document-literal操作のマッピングのラップまたはアンラップ方法

<service-endpoint-method-mapping>要素により、JavaメソッドからWSDL操作へのマッピングが定義されます。この要素の下に<wrapped-element/>が指定されていて、document-literalのWSDL操作を使用している場合、SOAPヘッダーにマッピングされていない各Javaメソッド・パラメータはcomplexTypeのサブ要素にマッピングされます。このcomplexTypeは、ラッパー要素タイプとして使用されます。SOAPヘッダーにマッピングされていないJavaメソッド・パラメータは、complexTypeのサブ要素にマッピング(ラップ)する必要があります。

SOAPヘッダーおよびJavaメソッド・パラメータ間のマッピング方法

<wsdl-message-mapping>要素により、特定のJavaメソッド・パラメータから特定のメッセージおよび部分への一意のマッピングが定義されます。メッセージ・コンテキスト内の部分は、名前で一意に識別されます。

<wsdl-message-mapping>要素の下に<soap-header/>が指定されている場合には、次のようになります。

  • このJavaメソッド・パラメータは、ボトムアップ方式による開発のSOAPヘッダーとして公開されます。

  • 対応するSOAPヘッダーは、トップダウン方式による開発のJavaメソッド・パラメータにマッピングされます。