Oracle® Fusion Middleware Oracle WebLogic Server JAX-WS Webサービスの開発 12c (12.2.1.2.0) E82857-02 |
|
前 |
次 |
この章の内容は次のとおりです。
アプリケーションでXMLカタログを使用すると、WSDLやXSDなどのインポート済XMLリソースを、Webサービスの記述の一部ではないソースから参照できます。この方法によるXMLリソースのリダイレクトは、パフォーマンスを向上させるため、またはローカル環境においてアプリケーションを常に正しく実行できるようにするために必要になる場合があります。
たとえば、クライアントの生成時にはWSDLにアクセスできても、クライアントの実行時にはWSDLにアクセスできなくなることがあります。ネットワーク経由で参照できるリソースではなく、ローカルのリソースやアプリケーションにバンドルされているリソースを参照する必要が生じることもあります。XMLカタログ・ファイルを使用すると、Webサービスが実行時に使用するWSDLの場所を指定できます。
次の表に、WebLogic Server AntタスクでXMLカタログがどのようにサポートされるかをまとめます。
表29-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カタログに定義されているエントリが優先されます。
注意:
wsdlget
Antタスクを使用すると、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カタログの作成」を参照してください。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>