プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebLogic Server JAX-WS Webサービスの開発
12c (12.2.1.2.0)
E82857-02
目次へ移動
目次

前
次

29 XMLカタログの使用

この章では、Java API for XML Web Services (JAX-WS)を使用したWebLogic WebサービスでXMLカタログを使用する方法について説明します。

この章の内容は次のとおりです。

XMLカタログの概要

アプリケーションでXMLカタログを使用すると、WSDLやXSDなどのインポート済XMLリソースを、Webサービスの記述の一部ではないソースから参照できます。この方法によるXMLリソースのリダイレクトは、パフォーマンスを向上させるため、またはローカル環境においてアプリケーションを常に正しく実行できるようにするために必要になる場合があります。

たとえば、クライアントの生成時にはWSDLにアクセスできても、クライアントの実行時にはWSDLにアクセスできなくなることがあります。ネットワーク経由で参照できるリソースではなく、ローカルのリソースやアプリケーションにバンドルされているリソースを参照する必要が生じることもあります。XMLカタログ・ファイルを使用すると、Webサービスが実行時に使用するWSDLの場所を指定できます。

次の表に、WebLogic Server AntタスクでXMLカタログがどのようにサポートされるかをまとめます。

表29-1 WebLogic Server AntタスクでのXMLカタログのサポート

Antタスク 説明
clientgen

XMLカタログは、以下のいずれかの方法で定義および参照できます。

  • catalog属性を使用して、外部XMLカタログ・ファイルの名前を指定します。詳細については、「外部XMLカタログの定義」を参照してください。

  • <xmlcatalog>子要素を使用して埋め込んだXMLカタログ・ファイルを参照します。詳細については、「XMLカタログを埋め込み」を参照してください。

クライアントをビルドするためにclientgen Antタスク(clientgenタスクが埋み込まれている場合はjwsc Antタスク)を実行すると、jax-ws-catalog.xmlファイルが生成されてクライアントの実行時環境にコピーされます。jax-ws-catalog.xmlファイルには、外部XMLカタログ・ファイルに定義されているXMLカタログや、build.xmlファイルに埋み込まれているXMLカタログが格納されています。このファイルは、参照されるXMLターゲットとともに、エンタープライズ・アプリケーションのMETA-INFフォルダ、またはWebアプリケーションのWEB-INFフォルダにコピーされます。

注意: XMLリソースの内容は、このプロセスの間は影響を受けません。

jax-ws-catalog.xmlファイルが、クライアントの実行時環境にコピーされないようにすることもできます。詳細については、「クライアント・ランタイムでのXMLカタログの無効化」を参照してください。

wsdlc

XMLカタログは、以下のいずれかの方法で定義および参照できます。

  • catalog属性を使用して、外部XMLカタログ・ファイルの名前を指定します。詳細については、「外部XMLカタログの定義」を参照してください。

  • <xmlcatalog>子要素を使用して埋め込んだXMLカタログ・ファイルを参照します。詳細については、「XMLカタログを埋め込み」を参照してください。

wsdlc Antタスクを実行すると、コンパイル済みのWSDL JARファイルまたは展開されたディレクトリにXMLリソースがコピーされます。

wsdlget

XMLカタログは、以下のいずれかの方法で定義および参照できます。

  • catalog属性を使用して、外部XMLカタログ・ファイルの名前を指定します。詳細については、「外部XMLカタログの定義」を参照してください。

  • <xmlcatalog>子要素を使用して埋め込んだXMLカタログ・ファイルを参照します。詳細については、「XMLカタログを埋め込み」を参照してください。

wsdlget Antタスクを実行すると、WSDLとインポートされたリソースが指定のディレクトリにダウンロードされます。

注意: XMLリソースの内容は、XMLカタログに定義されているリソースの参照のため更新されます。

以降の節では、以下の内容について説明します。

XMLカタログの詳細は、(http://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html)のOasis XMLカタログ仕様を参照してください。

XMLカタログの定義と参照

XMLカタログは、以下のいずれかの方法で作成し、build.xmlファイル内のclientgenまたはwsdlc Antタスクから参照できます。

  • 外部XMLカタログの定義 - 外部XMLカタログ・ファイルを定義し、そのファイルをbuild.xmlファイル内のclientgenまたはwsdlc Antタスクからcatalogs属性を使用して参照します。詳細については、「外部XMLカタログの定義」を参照してください。

    注意:

    カタログ・オプションを使用する場合は、「../」で始まる相対パスを使用してカタログ・ファイルのカタログ要素を定義できません。使用した場合、要素ファイルをクライアント・クラス・ディレクトリにコピーできず、クライアントの実行時に予期しない例外が発生することがあります。

  • XMLカタログの埋め込み - <xmlcatalog>要素を使用してXMLカタログを直接build.xmlファイルに埋め込み、<xmlcatalog>子要素を使用してbuild.xmlファイル内のclientgenまたはwsdlc Antタスクから参照します。詳細については、「XMLカタログを埋め込み」を参照してください。

競合が発生した場合は、外部XMLカタログに定義されているエントリよりも、埋め込みXMLカタログに定義されているエントリが優先されます。

注意:

wsdlget Antタスクを使用すると、XMLリソースのローカル・コピーを取得できます。詳細については、「クライアント・ランタイムでのXMLカタログの無効化」を参照してください。

外部XMLカタログの定義

外部XMLカタログを定義するには:

  1. リダイレクトしたいXMLリソースを定義した外部XMLカタログを作成します。「外部XMLカタログ・ファイルの作成」を参照してください。
  2. 作成したXMLカタログ・ファイルを、catalogs属性を使用してbuild.xmlファイル内のclientgenまたはwsdlc Antタスクから参照します。「外部XMLカタログ・ファイルの参照」を参照してください。

以降の節では、これらの各手順について詳しく説明します。

外部XMLカタログ・ファイルの作成

<catalog>要素はXMLカタログのルート要素で、XMLカタログ・エントリのコンテナとして機能します。XMLカタログ・エンティティを指定するには、たとえばsystem要素やpublic要素を使用します。

次に、XMLカタログ・ファイルのサンプルを示します。

<catalog xmln="urn:oasis:names:tc:entity:xmlns:xml:catalog"   
    prefer="system">
    <system systemId="http://foo.org/hello?wsdl" 
            uri="HelloService.wsdl" />
    <public publicId="ISO 8879:1986//ENTITIES Added Latin 1//EN" 
            uri="wsdl/myApp/myApp.wsdl"/>
</catalog>

このサンプルで注目すべき点は以下のとおりです。

  • <catalog>ルート要素によってXMLカタログのネームスペースが定義され、システムの一致が優先されることを指定するためprefer属性がsystemに設定されています。

  • <system>要素により、URI参照がシステムIDに関連付けられています。

  • <public>要素により、URI参照がパブリックIDに関連付けられています。

XMLカタログ・ファイル構文の詳細は、(http://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html)のOasis XMLカタログ仕様を参照してください。

外部XMLカタログ・ファイルの参照

作成したXMLカタログ・ファイルをbuild.xmlファイル内のclientgenまたはwsdlc Antタスクから参照するには、catalogs属性を使用します。

次のサンプルでは、clientgenを使用してXMLカタログを参照する方法を示します。関連するコード行は太字で示しています。

<target name="clientgen">
<clientgen 
     type="JAXWS"
     wsdl="${wsdl}"
     destDir="${clientclasses.dir}"
     packageName="xmlcatalog.jaxws.clientgen.client"
     catalog="wsdlcatalog.xml"/> 
</clientgen>
</target>

XMLカタログを埋め込み

XMLカタログを埋め込むには:

  1. build.xmlファイル内に埋め込みXMLカタログを作成します。「埋め込みXMLカタログの作成」を参照してください。
  2. 作成した埋め込みXMLカタログを、xmlcatalog子要素を使用してclientgenまたはwsdlc Antタスクから参照します。「埋め込みXMLカタログの参照」を参照してください。

以降の節では、これらの各手順について詳しく説明します。

注意:

競合が発生した場合は、外部XMLカタログに定義されているエントリよりも、埋め込みXMLカタログに定義されているエントリが優先されます。

埋め込みXMLカタログの作成

<xmlcatalog>要素を使用すると、XMLカタログを直接build.xmlファイルに埋め込むことができます。次のサンプルに、build.xmlファイルに埋め込まれたXMLカタログを示します。

<xmlcatalog id="wsimportcatalog">
     <entity publicid="http://helloservice.org/types/HelloTypes.xsd"
             location="${basedir}/HelloTypes.xsd"/>
</xmlcatalog>

XMLカタログ・ファイル構文の詳細は、(http://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html)のOasis XMLカタログ仕様を参照してください。

埋め込みXMLカタログの参照

clientgenまたはwsdlc Antタスクの<xmlcatalog>子要素を使用すると、埋め込みXMLカタログを参照できます。<xmlcatalog>要素を指定するには、次の構文を使用します:

<xmlcatalog refid="id"/>

<Xmlcatalog>子要素によって参照されるidは、埋め込みXMLカタログのIDと一致している必要があります。

次のサンプルでは、clientgenを使用して埋め込みXMLカタログを参照する方法を示します。関連するコード行は太字で示しています。

<target name="clientgen">
<clientgen 
     type="JAXWS"
     wsdl="${wsdl}"
     destDir="${clientclasses.dir}"
     packageName="xmlcatalog.jaxws.clientgen.client"
     catalog="wsdlcatalog.xml"/>
     <xmlcatalog refid="wsimportcatalog"/>
</clientgen>
</target>
<xmlcatalog id="wsimportcatalog">
     <entity publicid="http://helloservice.org/types/HelloTypes.xsd"
             location="${basedir}/HelloTypes.xsd"/>
</xmlcatalog>

クライアント・ランタイムでのXMLカタログの無効化

「XMLカタログの定義と参照」に従ってbuild.xmlファイル内でXMLカタログを定義して参照する場合、clientgen Antタスクを実行してクライアントをビルドすると、デフォルトではjax-ws-catalog.xmlファイルが生成されてクライアント実行時環境にコピーされます。jax-ws-catalog.xmlファイルには、外部XMLカタログ・ファイルに定義されているXMLカタログや、build.xmlファイルに埋み込まれているXMLカタログが格納されています。このファイルは、参照されるXMLターゲットとともに、エンタープライズ・アプリケーションのMETA-INFフォルダ、またはWebアプリケーションのWEB-INFフォルダにコピーされます。

クライアント実行時環境でのXMLカタログ・アーティファクトの生成は、clientgengenRuntimeCatalog属性をfalseに設定することで無効にできます。例:

<clientgen 
     type="JAXWS"
     wsdl="${wsdl}"
     destDir="${clientclasses.dir}"
     packageName="xmlcatalog.jaxws.clientgen.client"
     catalog="wsdlcatalog.xml"
     genRuntimeCatalog="false"/>

この場合、jax-ws-catalog.xmlファイルは実行時環境にはコピーされません。

genRuntimeCatalog属性をfalseに設定した状態でクライアントを生成した場合、後からクライアント・ランタイムでXMLカタログを有効にするには、jax-ws-catalog.xmlファイルを手動で作成し、エンタープライズ・アプリケーションのMETA-INFフォルダまたはWebアプリケーションのWEB-INFフォルダにコピーする必要があります。jax-ws-catalog.xmlファイルには、外部XMLカタログ・ファイルに定義されているすべてのエントリ、またはbuild.xmlファイルに埋め込まれているすべてのエントリが含まれていることを確認します。

XMLリソースのローカル・コピーの取得

wsdlget Antタスクを使用すると、WSDLやXSDファイルなどのXMLリソースのローカル・コピーを取得できます。その後は、「XMLカタログの定義と参照」で説明したとおり、XMLカタログを使用してXMLリソースのローカル・コピーを参照できます。

次に示すAnt build.xmlファイルの抜粋に、wsdlget Antタスクを使用してWSDLとそのXMLリソースをダウンロードする方法を示します。XMLリソースは、Antタスクの実行ディレクトリ内のwsdlフォルダに保存されます。

<target name="wsdlget"
     <wsdlget 
          wsdl="http://host/service?wsdl"
          destDir="./wsdl/"
     />
</target>