各種 Web サービス・ツールを使用して、以下の設定ができます。
現在の問題は、 「ハンドラー構成」ウィザードでハンドラーを追加した後で、ハンドラー Java ファイルがまったく同一のロケーションに既に存在していて、 かつ「ロード可能な Java クラスを上書きしない」を選択しなかった場合を除いて、 ウィザードが新しいスケルトン・ハンドラー Java ファイルをプロジェクトのプライマリー・ソース・フォルダーに生成することです。 このウィザードは EAR のどこか他の場所に同じ完全修飾名をもつハンドラーが存在するかどうかの検査は行いません。 その結果、プロジェクトの異なるソース・フォルダーや EAR の異なるモジュールの中など、 EAR のどこか他の場所に既に存在しているハンドラーをウィザードで追加すると、 このウィザードは新しいスケルトン・ハンドラーを書き込むことになり、元のハンドラー・クラスを隠してしまいます。 そのような場合には、ウィザードによって生成されたスケルトン・ハンドラーを削除してください。
IBM SOAP ランタイム環境を使用するとき、 「エレメントを使用したマッピングを可能にする」を選択すると、 Web サービス・ウィザードが通常の型を使用したマッピングの他に、 エレメントを使用したマッピングの生成を完全に行えるようになりました。
この設定をデフォルトの「使用可能」にしていないと、 他のベンダーの Web サービス・ランタイム環境が「xsi:type」プロパティーのないメッセージを送信する場合に、 Apache/IBM SOAP ランタイム環境はその環境と相互運用を行いません。 他のベンダーの Web サービス・ランタイム環境は、 xsi:type プロパティーの組み込みについてそれぞれ異なるポリシーを使用します。 このプロパティーを必ず組み込む場合もあり、あるものはそれらを組み込まない場合もあります。 ある場合は構成選択項目を提供します。 配列などの特定の型については、xsi:types を省略する場合もあります。
次のエラーは、IBM/Apache SOAP ランタイム環境でよく発生するエラーです。
targetException=java.lang.IllegalArgumentException: エンコード・スタイルの 'http://schemas.xmlsoap.org/soap/encoding/' を使用して、 「:MyElement」をデシリアライズするデシリアライザーを検出できませんでした。 この設定を使用可能にすると、エレメントを使用したマッピングは次のものに生成されます。エレメント・ベースのマッピング書式は、以下のとおりです。
<isd:map encodingStyle="encoding style" xmlns:x="some-namespace" qname="x:some-local-name" xml2JavaClassName="some-deserializer-class-name"/>エレメント・ベースのマッピングの生成は以下のものに対して行われます。
WSAD Web サービス・ウィザードは SOAP および XSD 仕様に従って、 エレメント・ベースのマッピング内のエレメント名が修飾される (つまり、名前空間を持つ) べきかどうかを決定します。
WSAD Web サービス・ウィザードはこれらの規則に従って修飾されるエレメント名か、 修飾されないエレメント名かを決めます。
一部のランタイム環境では、 XSD スキーマの「elementFormDefault」属性を介して修飾エレメントの使用を指定するスキーマがある場合でも、 SOAP メッセージ内で非修飾エレメントが生成されることが分かっています。 この場合は、サービスの WSDL または XSD を手動で編集して、elementFormDefault を「unqualified」に変更する必要があります。
非名前空間修飾のエレメント使用マッピングの例を示します。
<isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="" qname="x:name" xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>
名前空間修飾のエレメント使用マッピングの例を示します。
<isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="http://www.ibm.com/" qname="x:name" xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>
エレメントを使用したマッピングは、1 つのエレメント名に対して 1 つだけしか生成されないことに注意してください。 つまり、スキーマが同じエレメント名を異なる型に複数回使用すると、 エレメント使用のマッピングは 1 つだけという基本により、エレメントは効果的に無作為で 1 つだけ選択されます。 名前が同じで型が異なる他のエレメントは、デシリアライズできません。 スキーマがエレメントおよび WSDL パーツに同じ名前を使用した場合も同様です。
<isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="" qname="x:some-name" xml2JavaClassName="some-serializer"/>
XML エディターは、次のエラーにフラグを立てることができます。
属性 "xmlns:x" の値が無効です。 接頭部付きの名前空間バインディングが空でない可能性があります。
WebSphere Application Server V4 の場合、これは問題ではありません。 ただし、Xerces 2.x (XML4J 4.x) 以降 (WebSphere Application Server V5 サーバーなど) を使用する他のサーバーにこの dds.xml をデプロイしないでください。 そうでないと、サーバーが dds.xml ファイルをロードするときに同様の Xerces 構文解析エラーが発生します。 Web サーバーのシナリオに従って正しいサーバー・タイプを選択して、dds.xml を再生成してください。 これにより、そのサーバー・タイプに対して正しい dds.xml が生成されます。
また、ISD ファイルから Web サービスをデプロイしようとすると、同様の Xerces 構文解析エラーが発生します。 予備手段として、ファイルを手動で以下のフォーマットに編集します。
<isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" qname="some-name" xml2JavaClassName="some-serializer"/>