| 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>