Oracle® Fusion Middleware Oracle WebLogic Server JAX-WS を使用した Web サービスの高度な機能のプログラミング 11g リリース 1 (10.3.1) B55543-01 |
|
戻る |
次へ |
以下の節では、XML カタログの使用方法について説明します。
アプリケーションで XML カタログを使用すると、WSDL や XSD などのインポート済み XML リソースを、Web サービスの記述の一部ではないソースから参照できます。この方法による XML リソースのリダイレクトは、パフォーマンスを向上させるため、またはローカル環境においてアプリケーションを常に正しく実行できるようにするために必要になる場合があります。
たとえば、クライアントの生成時には WSDL にアクセスできるかもしれませんが、クライアントの実行時には WSDL にアクセスできなくなっているかもしれません。ネットワーク経由で参照できるリソースではなく、ローカルのリソースやアプリケーションにバンドルされているリソースを参照する必要があるかもしれません。XML カタログ ファイルを使用すると、Web サービスが実行時に使用する WSDL の場所を指定できます。
次の表に、WebLogic Server Ant タスクで XML カタログがどのようにサポートされるかをまとめます。
表 7-1 WebLogic Server Ant タスクでの XML カタログのサポート
Ant タスク | 説明 |
---|---|
clientgen |
XML カタログは、以下のいずれかの方法で定義および参照できます。
クライアントをビルドするために 注意 : XML リソースの内容は、このプロセスの間は影響を受けません。
|
wsdlc |
XML カタログは、以下のいずれかの方法で定義および参照できます。
|
wsdlget |
XML カタログは、以下のいずれかの方法で定義および参照できます。
注意 : XML リソースの内容は、XML カタログに定義されているリソースの参照のため更新されます。 |
以降の節では、以下の内容について説明します。
リダイレクトしたい XML リソースを指定するため、XML カタログを定義して参照する方法。「XML カタログの定義と参照」を参照してください。
クライアント ランタイムで XML カタログを無効化する方法。「クライアント ランタイムでの XML カタログの無効化」を参照してください。
wsdlget
を使用して、WSDL とそのインポート済み XML リソースのローカル コピーを取得する方法。これらのファイルは、アプリケーションにパッケージ化し、XML カタログ内から参照できます。「XML リソースのローカル コピーの取得」を参照してください。
XML カタログの詳細については、(http://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html
) の Oasis 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 カタログに定義されているエントリが優先されます。
外部 XML カタログを定義するには、次の手順に従います。
リダイレクトしたい XML リソースを定義した外部 XML カタログを作成します。「外部 XML カタログ ファイルの作成」を参照してください。
作成した XML カタログ ファイルを、catalogs
属性を使用して build.xml
ファイル内の clientgen
または wsdlc
Ant タスクから参照します。「外部 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 カタログ ファイルを 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 カタログを埋め込むには、次の手順に従います。
build.xml
ファイル内に埋め込み XML カタログを作成します。「埋め込み XML カタログの作成」を参照してください。
作成した埋め込み XML カタログを、xmlcatalog
子要素を使用して clientgen
または wsdlc
Ant タスクから参照します。「埋め込み 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 カタログ仕様を参照してください。
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 カタログの定義と参照」に従って 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 カタログ アーティファクトの生成は、clientgen
の genRuntimeCatalog
属性を 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
ファイルに埋め込まれているすべてのエントリが含まれていることを確認します。
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>