問題の概要:JAXR クライアントプログラムが JDK 1.6 環境で実行されている場合、または Service Registry が JDK 1.6 を実行しているシステムに配備されている場合は、プログラムがクエリーを実行したり操作を発行したりするとランタイムエラーが発生します。根本の問題は、Application Server が SOAP with Attachments API for Java (SAAJ) の Version 1.2 を使用しているにもかかわらず、JDK 1.6 が Version 1.3 を使用していることにあります。
対処方法:必要な回避方法には、クライアントシステムに対するものと、サーバーに対するものの 2 種類があります。
クライアントが JDK 1.6 を実行しており、サーバーが JDK 1.5 を実行している場合は、「クライアントシステムの回避方法を実行するには」の手順に従ってください。
クライアントが JDK 1.5 を実行しており、サーバーが JDK 1.6 を実行している場合は、「サーバーシステムの回避方法を実行するには」の手順に従ってください。
クライアントとサーバーの両方が JDK 1.6 を実行している場合は、両方の回避方法の手順に従ってください。
クライアントシステムの回避方法は、クライアントシステムが JDK 1.6 を実行している場合に必要です。この回避方法には、次の作業が含まれます。
SAAJ 1.3 JAR ファイルがまだ存在しない場合は、それらのファイルのクラスパスへの追加
クライアントプログラムの Ant ビルドファイルでの 4 つのシステムプロパティーの設定
クラスパスに次の JAR ファイルが含まれていることを確認します。
Solaris OS の場合:
/usr/share/lib/saaj-api.jar /usr/share/lib/saaj-impl.jar
Linux および HP-UX システムの場合:
/opt/sun/share/lib/saaj-api.jar /opt/sun/share/lib/saaj-impl.jar
たとえば、Linux システムの Ant ターゲットに次のような設定が含まれていれば、クラスパスは正常です。
<path id="classpath"> <fileset dir="/opt/sun/share/lib"> <include name="*.jar"/> </fileset> ... </path>
build.xml ファイル内の <java> ターゲットに次の <sysproperty> タグを追加します。
<sysproperty key="javax.xml.soap.MessageFactory" value="com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl"/> <sysproperty key="javax.xml.soap.MetaFactory" value="com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl"/> <sysproperty key="javax.xml.soap.SOAPConnectionFactory" value="com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnectionFactory"/> <sysproperty key="javax.xml.soap.SOAPFactory" value="com.sun.xml.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl"/>
サーバーシステムの回避方法には、次の作業が含まれます。
Application Server の lib ディレクトリへの SAAJ 1.3 JAR ファイルの配置
システムプロパティーを設定するための 2 つの JVM オプションの追加
Application Server の停止と再起動
Application Server の lib ディレクトリに移動します。
Solaris OS の場合: cd /opt/SUNWappserver/appserver/lib
Linux および HP-UX システムの場合: cd /opt/sun/appserver/lib
Application Server の lib ディレクトリ内の 2 つの SAAJ JAR ファイルのバックアップコピーを作成します。次に例を示します。
cp saaj-api.jar saaj-api.jar.v1.2 cp saaj-impl.jar saaj-impl.jar.v1.2 |
Application Server の lib ディレクトリに SAAJ 1.3 JAR ファイルをコピーします。
Solaris OS の場合:
cp /usr/share/lib/saaj-api.jar . cp /usr/share/lib/saaj-impl.jar . |
Linux および HP-UX システムの場合:
cp /opt/sun/share/lib/saaj-api.jar . cp /opt/sun/share/lib/saaj-impl.jar . |
『Service Registry 3.1 管理ガイド』の「Application Server 管理コンソールを使用する」の説明に従って、Application Server の管理コンソールにログインします。
「設定」ノードを開きます。
サーバーノード server-config (Admin Config) を開きます。
「JVM 設定」をクリックします。
「JVM オプション」タブをクリックします。
「JVM オプションを追加」をクリックします。
テキストフィールドに、次の行を入力します。
-Djavax.xml.soap.MessageFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl |
「JVM オプションを追加」をもう一度クリックします。
テキストフィールドに、次の行を入力します。
-Djavax.xml.soap.MetaFactory=com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl |
「保存 (Save)」をクリックします。
『Service Registry 3.1 管理ガイド』の「レジストリ用 Application Server ドメインを停止および再起動する」にある説明に従います。