IBM SOAP ランタイム環境を使用した Web サービスの作成

このランタイム環境は WebSphere® Studio の前のリリース (バージョン 5.0 以前) でサポートされていた唯一の Web サービス・ランタイム環境でした。 このランタイム環境は Apache SOAP 2.3 をサポートします。 この環境は、後方互換性の確保以外の理由では使用しないようにしてください。

制限事項

以下のリストは Web サービスで IBM® SOAP ランタイム環境を使用する場合の制限です。 制限の詳しいリストについては、『制限』を参照してください。

  • IBM SOAP ランタイム環境とのインターオペラビリティー
    • 「エレメント・ベース・マッピングを可能にする」設定をデフォルトの使用可能にしていない場合 (この設定は「ウィンドウ」 > 「設定」 > 「Web サービス」 > 「コード生成」で見つかります)、Apache/IBM SOAP ランタイムは、そのエレメントに「xsi:type」プロパティーのないメッセージを送信する、他のベンダーの Web サービス・ランタイム環境との相互動作ができないことがあります。 詳しくは、『Web サービスの設定』を参照してください。
    • マップの配列または Hashtable の配列を返すサービス Bean を使用して開始するとき、 「エレメント・ベースのマッピング」オプションが使用可能になっていると、 生成される SOAP プロキシーは戻りの型を誤って java.lang.String[] にマップします。 ランタイム中に ClassCastException が発生します。 この問題を回避するには、Web サービス・クライアント・ウィザードを新規に作成した WSDL で実行して、 SOAP プロキシーをクライアント・プロジェクトに再生成します。
  • ボトムアップ Web サービスの開発
    • Java™ から IBM SOAP 2.2 Web サービス・ボトムアップを作成するための Web サービス・ウィザードの使用後に、 メッセージ 「「定義」エレメントの識別制約のために複写キー値 [...] が宣言されました。」が出されることがあります。 これは IBM SOAP 2.2 用のツールが同じ targetNamespace を持つ 2 つの WSDL ファイル (一方がもう一方をインポートする) を生成するときに発生します。
    • IBM SOAP ランタイム環境を使用して Web サービスとして正しく機能するために、 Java Bean プロパティーには、Getter と Setter の両方が必要です。 Getter および Setter が完全でない場合、ランタイム・シリアライゼーションおよびクライアント生成の結果として生じるスキーマ内に、プロパティーが生成されません。 すべてのプロパティーに Getter と Setter が含まれていることを確認してください。
    • char または java.lang.Character から WSDL XSD へのデフォルトのマッピングが存在しないため、 char および java.lang.Character に対しては、 カスタム・マッピングを入力する必要があります。
    • サービス Bean のすべての入力パラメーターにおいて、プリミティブ・ラッパー型 (java.lang.Booleanjava.lang.Bytejava.lang.Shortjava.lang.Integerjava.lang.Longjava.lang.Float、 および java.lang.Double) は、それらに対応する個々のプリミティブ型 ( booleanbyteshortintlongfloat および double) と共存できません。 例えば、java.lang.Integerint の両方を入力パラメーターの型としていずれかの場所に持つサービス Bean を、 完全な Web サービスに変えることはできません。 Web サービス・ウィザードを使用して この型のサービス Bean から Web サービスを作成しようとすると、 プリミティブ型またはラッパー型を含むメソッドがウィザードの Web サービス Java Bean メソッド・ページで選択されていない場合を除いて警告メッセージが出されます。 ただし、最初に「Web サービス Java Bean メソッド」ページが表示された時点では、 これらのメソッドが選択されていないようにする必要があります。 警告が表示された後で、このページに戻って問題のメソッドを消去しても、Web サービスが不完全になることがあります。 この場合、ウィザードを再始動して、最初に「Web サービス Java Bean メソッド」ページが表示されたときに、 適切なメソッドを選択するようにする必要があります。
    • 多次元配列はサポートされていません。 Java での代わりの方法は、Java Bean をディメンションの間に挿入することです。 例えば、MyType[][] の代わりに、パターン MyArray[] (MyArray は MyType[] 型のプロパティーを持つ) を使用することで機能します。
    • DOM エレメントと単純な Bean 型の混在した入力引数リストを持つメソッドに対しては、 1 つまたは複数のカスタム・マッピングのエントリーが必要です。 Web Services Definition Language (WSDL) バージョン 1.1 仕様は、 すべての入力部分 (パラメーター) に対して 1 つのエンコード・スタイルをサポートしています。 Simple Object Access Protocol (SOAP) バージョン 2.2 のランタイム環境は、 プリミティブ型について SOAP エンコード方式を使用する DOM エレメント、 および Literal XML エンコード方式を使用する Bean に対して、 デフォルトのマッピング・サポートを持っていません。
    • カスタム・マッピングの構成時に、 SOAP ランタイム環境 (つまり、パッケージ org.apache.soap.encoding.soapenc から使用するクラス) からシリアライザー・クラスまたは デシリアライザー・クラスを使用する際に、 「選択されたシリアライザー/デシリアライザー・クラスはこのプロジェクトからロードできません」というエラーを受け取った場合は、 おそらく soap.jar が Web プロジェクトのビルド・パスにないと考えられます。 この問題を修正するには、ウィザードを取り消し、Web プロジェクト・プロパティー・ダイアログを使って WS_installdir¥wstools¥eclipse¥plugins¥com.ibm.etools.webservice¥run-time environment¥soap.jar を Web プロジェクトのビルド・パスに追加してから、Web サービス・ウィザードを再試行してください。
    • カスタム・マッピングはネストされた複合型ではサポートされません。 ウィザードのマッピング・ページにはネストされた型が表示されますが、この型のカスタム・マッピングは無視されます。
    • インターフェースに抽象 Java の型を含む Java クラスから Web サービスを作成するとき、Web サービス Java から XML へのマッピング・ページは抽象型のデシリアライザー・フィールドを org.apache.soap.encoding.soapenc.BeanSerializer に間違って設定する場合があります。 これは、BeanSerializer クラスのデシリアライザー・コードが、抽象型のインスタンスを構成できないために、 ランタイム環境で失敗します。 これを回避するには、必要に応じて、この型にカスタム・マッピング・オプションを選択して、 デシリアライザー・フィールドで、抽象型をデシリアライズするために作成されたクラス名に変えてください。
    • Web サービス・ツールでは、 ネストされたインナー・クラス (トップレベル・クラスに定義されたインナー・クラス) が含まれている Java Bean を使用する Web サービスの作成について、現在はサポートしていません。 この問題の回避策として、 インナー・クラスを別の Java ファイルのトップレベル・クラスに移動してください。
    • Vector、Hashtable、または Map のプロパティーで他の Java Bean を使用する Java Bean から Web サービスを作成する場合、XSD は、「Vector」および「Map」型を含む complexTypes を使用してネームスペース「http://xml.apache.org/xml-soap」から生成されます。 このネームスペースには現在スキーマが存在しないため、XSD バリデーターは次のようなエラーと警告を生成します。
      • Error src-resolve: Cannot resolve the name 'xsd2:Vector' to a(n) type definition component.
      • Warning src-import.0: Failed to read imported schema document 'null'.
      これらのエラーおよび警告は、Web サービス・ウィザードによる WSDL および XSD の現行の処理に影響を与えません。 「Map」および「Vector」型は、 それぞれの Java 対応先に正しくマップされます。 http://xml.apache.org/xml-soap が WSDL 1.1 または SOAP 1.1 仕様で認識されるネームスペースではないため、他のベンダーは、これらの型を含む WSDL または XSD の処理が難しいことに注意してください。 インターオペラビリティーを改善するには、 Java コレクション・クラスを配列と Bean に適応させ、次に、アダプターから Web サービスをビルドすることを考慮してください。
  • トップダウン Web サービスの開発
    • 入力エレメントまたは 出力エレメントにつき 1 つの パーツのサポートに制限されています。 入力メッセージまたは出力メッセージでは、複数の論理パーツはサポートされません。 そのような最初のパーツは処理され、残りは無視されます。
    • Web サービス・スケルトンまたはプロキシーを xsd (http://www.w3.org/2001/XMLSchema) ネームスペースの base64Binary 型を使う WSDL から生成するとき、 Web サービス・ランタイム環境は実際には soapenc (http://schemas.xmlsoap.org/soap/encoding/) ネームスペースの xsi:type base64 を使用します。 通常、2 つの型は自由に交換可能です。 ただし、メッセージの型とスキーマの型の違いにより、 いくつかの SOAP プロトコル・ランタイム環境がメッセージをリジェクトする可能性があります。 この場合、シリアライザーを Apache SOAP の Base64Serializer のように手加工できますが、 soapenc:base64 の代わりに xsd:base64binary が書き込まれます。
    • Java Bean スケルトンは、 有効な Java ID でない操作名やパーツ名を含む WSDL 文書から作成されている場合、コンパイルしません。 Java Bean スケルトンが正常に作成されるためには、 WSDL 操作名とパーツ名は有効な Java ID でなければなりません。
    • Web サービス・ウィザードは、 WSDL を生成するときにデフォルトでは「HTTP」の URI を使用しますが、 他のツールの WSDL 文書では、Web サービス、SOAP アクション、またはターゲット・ネームスペースの URI により、 「HTTP」以外の「urn」などの方式を使用する場合があります。 HTTP 以外の URI を含む WSDL からプロキシーまたはスケルトンを生成するとき、 Web サービス・ウィザードは URI をより意味のあるパッケージよりも Java パッケージ「com.example」にマップする可能性があります。 場合によっては、Web サービス・ウィザードがそのような URI を完全に処理できず、 「IWAB0234E 内部エラーが発生しました」というエラーになることがあります。
    • WSDL を使用して Java プロキシーおよび Java スケルトンを生成する場合は、 XSD 組み込みの型である boolean、byte、short、int、long、float、および double を Java プリミティブ型 (例えば、int) ではなく、「java.lang」ラッパー型 (例えば、java.lang.Integer) にマップするオプションが利用できるようになりました。 デフォルトでは、Web サービス・ウィザードは Java プリミティブにマップします。 ウィザードで「java.lang」ラッパー・クラスにマップするには、 「ウィンドウ」 > 「設定」 > 「Web サービス」 > 「コード生成」をオープンして、 「簡単な XML データ型を java.lang ラッパー型にマップする」をチェックします。
    • Java Bean または EJB から Web サービスを作成するときにカスタム・マッピングを Java の型から XSD 型に指定する場合は、Bean クラス・フィールドが自動的に Java の型のフルネームに設定され、編集はできません。 Java 配列をカスタム・マッピングする場合は、Bean クラス名が配列形式 (例えば、java.lang.String[]) になり、 その形式で「.isd」および「dds.xml」デプロイメント記述子ファイルに出力されます。 このクラス名のフォームは SOAP ランタイム環境によって正しく処理されず、 次のようなエラーが発生します。

      SOAP サービス http://tempuri.org/webservice.AddressBook でのデプロイメント・エラー: クラス名 java.lang.String[] を解決できませんでした

      その結果、サービス・サイドの Java 配列に対してシリアライザーをカスタム・マップすることができません。 部分的な回避策は、「シリアライザー・クラス」フィールドをカスタム・マッピング用に空にしておくことです。 これによって、デプロイメント記述子への配列クラス名の生成が抑制され、サービスが稼働します。 デシリアライザー・クラス、およびデシリアライザーをカスタム・マッピングする機能は、 この問題および回避策による影響を受けないことに注目してください。

  • ランタイムについての考慮事項
    • Web サービス・コード生成設定「エレメントを使用したマッピングを使用可能にする」を選択して、 WebSphere Application Server V4 へのデプロイを選択すると、ISD ファイルと dds.xml に以下のエントリーが作成されます。

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

    • Java Bean または EJB で作成された Web サービスを呼び出すときに、 次のような targetException による SOAPException を受け取る場合があります。 「java.lang.IllegalArgumentException: インスタンスを生成することができません ...」 この問題は、Web サービスとして公開されたメソッドに、パラメーターまたは戻りの型 (あるいはその両方) としてのパブリック・デフォルト・コンストラクターのない Java Bean が含まれていることが考えられます。 デシリアライゼーション・プロセスの一部として SOAP ランタイム環境が オブジェクトを構成するためには、 パブリック・デフォルト・コンストラクターが必要です。
    • Web プロジェクトに現在デプロイされているセキュリティー・ファイルの cl-ver-config.xml および sv-ver-config.xml は、 WebSphere バージョン 4.0 のファイルであり、DTD に正確に一致するとは限りません。 しかし、このファイルは、「xmlns:ds」または「xmlns:SOAP-SEC」が宣言されるべきであるとの検証エラーがあっても WebSphere バージョン 4.0 と WebSphere バージョン 5.0 の両方で有効です。
    • 同じパッケージからの 2 つの異なる複合型を使用する Bean を作成し、 この Bean から SOAP ベースの Web サービスを作成する場合には、それぞれの複合型に XSD ファイルが作成され、 同じネームスペースを割り当てられます。 この結果、タスク・リストと Web サービス・エクスプローラーの両方で検証エラーが起こります。
  • ISD Web サービス
    • Java または EJB Web サービスを作成するときにカスタム・マッピングを入力した後、 XSD ロケーション URL 以外のカスタム・マッピング情報は ISD ファイルに保管されます。 Web サービスを作成するときに、その ISD ファイルから情報を検索します。 したがって、ISD ファイルから Web サービスを作成するときに、 ウィザードの「Web サービスの Java から XML へのマッピング」ページに XSD ロケーション URL を手作業で入力する必要があります。
ご利用条件 | フィードバック
(C) Copyright IBM Corporation 1999, 2005. All Rights Reserved.