WebSphere Application Server, Version 6.0.x   
             オペレーティング・システム: AIX , HP-UX, Linux, Solaris, Windows

             目次と検索結果のパーソナライズ化

Web サービス・コマンド行ツールのトラブルシューティングのヒント

このトピックでは、Web サービス開発の際に使用される WSDL2Java および Java2WSDL コマンド行ツールのトラブルシューティングについて論じます。

このトピックの各セクションでは、WSDL2Java または Java2WSDL ツールの使用中に経験する可能性のある問題を取り上げます。 また、それらの問題のトラブルシューティングに役立つ解決策が 提示されています。

.Net クライアントで、Vector タイプのパラメーターを指定した Web サービス・メソッドが反映されない

Web サービスで .NET クライアントを実行すると、次のような例外が表示されます。
System.InvalidOperationException: Method AnnuityInteropService.wsListAnnuityByHolder can not be reflected.
System.InvalidOperationException: There was an error reflecting wsListAnnuityByHolderResult.
System.InvalidOperationException: The Form property might not be unqualified when an explicit namespace property is available.   

この問題が発生するのは、サーバー・サイド・メソッドが Vector を戻し、 Web サービス記述言語 (WSDL) ファイルのスタイルが document/literal で、かつフォームが非修飾である場合です。 document/literal スタイルでは、必ず非修飾のフォームが 生成されます。これは、デフォルトで elementFormDefault="unqualified" になっているためです。

.NET フレームワークには、Web サービス・メソッドのパラメーターに 特定の配列が含まれていると、無効な Web サービス・プロキシー・クラスが生成される場合があるという問題が存在します。 このフレームワークはパラメーターに XmlArrayAttribute 属性を 追加し、属性コンストラクターには "Form=Unqualified" およびネーム・スペース定義が含まれています。 属性が有効であっても、その属性の これら 2 つの要素の組み合わせは無効であり、System.InvalidOperationException 例外が発生します。

この問題を回避するため、WebSphere Application Server にデプロイされる Web サービス・メソッドでは、 Vector パラメーターを使用しないでください。 Web サービス・メソッドの Vector パラメーターは、 .Net クライアントや Java コレクション・タイプでは機能しません。

ハイパー・スレッディング対応マシンで Endpoint Enabler ツールを使用したときのエラー

ハイパー・スレッディング対応マシンで Endpoint Enabler ツールを実行すると、 「タスク」ビューに、エンタープライズ・アプリケーション・プロジェクトに対するエラーが報告されます。 エンタープライズ・アプリケーション・プロジェクトは、ワークベンチを再始動するまで削除できません。

この問題は、自動ビルドと Enterprise JavaBeans (EJB) プロジェクト・バリデーターの間に 競合状態が存在する場合に発生することがあります。

この問題を解決するには、ワークベンチの自動ビルドをオフにしてから Endpoint Enabler ツールを 実行し、その後、自動ビルドをオンに戻します。

JSR109 バージョン 1.0 および 1.1 でのマルチプロトコル・ポート・コンポーネントの制約事項

Java2WSDL コマンド行ツールによって生成された httpjms、および ejb バインディングを持つ WSDL ファイルを含んだ エンタープライズ・アーカイブ (EAR) ファイルをデプロイする際に、Java Specification Requests (JSR) 109 仕様の 検証エラーが発生します。

JSR 109 仕様では、 webservices.xml デプロイメント記述子ファイルで定義された各ポート・コンポーネントは、 JavaBeans インプリメンテーションの場合、web.xml ファイルにある固有の <servlet-class> エレメントを参照し、 EJB インプリメンテーションの場合、ejb-jar.xml ファイルにある固有の <session> エレメントを 参照する必要があります。 サーブレットおよびセッション EJB は、 <servlet-link> または <ejb-link> エレメントによって表される webservices.xml ファイルにあります。

WSDL2Java コマンド行ツールは、 WSDL ファイルで検出されたポートを、生成された webservices.xml ファイル内の ポート・コンポーネントにマップします。 単一の Web サービスに、これらの各バインディングの ポートのほかに複数のバインディングが存在する場合、webservices.xml ファイルには、 複数のポート・コンポーネントが含まれ、これらのポート・コンポーネントはすべて、同じ EJB モジュール (<session>) または JavaBeans (<servlet-class>) 実装を指す必要があります。 JSR 109 の制約事項のため、webservices.xml ファイルは無効であり、 デプロイメント・プロセス時にエラーが発生することがあります。

次のようなエラーが表示されます。
Error in <module> : CHKW6030E: Implementation class <class> referred to by port 
components<port1> and <port2>. (JSR109 1.0: 7.1.2).																												
以下は、サンプル・データを含んだエラーです。
Error in WebSvcsInSession20EJB.jar : CHKW6030E: Implementation class WSMultiProtocol 
referred to by port components WSMultiProtocolJMS and WSMultiProtocolEJB.(JSR109 1.0: 7.1.2).																												

ejb-jar.xml ファイル内に、同じインプリメンテーション・クラス、 ホーム・インターフェース、およびリモート・インターフェースをすべてポイント する複数の <session> EJB 定義を作成することによって、この制約事項を 回避することができます。 これらのクラスは今後も使用することができますが、 クラスおよびインターフェースを参照する ejb-jar.xml ファイルの <session> 定義を複製する必要があります。

以下は、webservices.xml ファイルの例です。 クラスおよびインターフェースを確認してください。
<webservices>
  <webservice-description>
    <webservice-description-name>WSMultiProtocolService</webservice-description-name>
    <wsdl-file>META-INF/wsdl/WSMultiProtocol.wsdl</wsdl-file>
    <jaxrpc-mapping file>META-INF/WSMultiProtocol_mapping.xml</jaxrpc-mapping file>
    <port-component>
      <port-component-name>WSMultiProtocolEjb</port-component-name>
      <wsdl-port>
        <namespaceURI>http://ejb.pli.tc.wssvt.ibm.com</namespaceURI>
        <localpart>WSMultiProtocolEjb</localpart>
      </wsdl-port>
      <service-endpoint-interface>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocol
			</service-endpoint-interface>
      <service-impl-bean>
        <ejb-link>WSMultiProtocol</ejb-link>
      </service-impl-bean>
    </port-component>
    <port-component>
		<port-component-name>WSMultiProtocolJMS</port-component-name>
      <wsdl-port>
        <namespaceURI>http://ejb.pli.tc.wssvt.ibm.com</namespaceURI>
        <localpart>WSMultiProtocolJMS</localpart>
      </wsdlport>
      <service-endpoint-interface>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocol
			</service-endpoint-interface>
      <service-impl-bean>
        <ejb-link>WSMultiProtocol_2</ejb-link>
      </service-impl_bean>
		</port-component>
        <port-component>
       		<port-component-name>WSMultiProtocolJMS</port-component-name>
      <wsdl-port>
        <namespaceURI>http://ejb.pli.tc.wssvt.ibm.com</namespaceURI>
        <localpart>WSMultiProtocolJMS</localpart>
      </wsdlport>
      <service-endpoint-interface>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocol
			</service-endpoint-interface>
      <service-impl-bean>
        <ejb-link>WSMultiProtocol_3</ejb-link>
      </service-impl_bean>
		</port-component>
	</webservice-description>
</webservices>

以下は、ejb-jar.xml ファイルの例です。 クラスおよびインターフェースと探して、 それらがどのように複製されているかを確認してください。
<ejb-jar-id="ejb-jar_ID">
	<display-name>WebSvcsInsSession20EJB</display-name>
	<enterprise-beans>
		<session-id="WSMultiProtocol">
			<ejb-name>WSMultiProtocol</ejb-name>
			<home>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocolHome</home>
			<remote>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocol</remote>
			<ejb-class>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocolWebSvcsBean</ejb-class>
			<session-type>Stateless</session-type>
			<transaction-type>Container</transaction-type>
			<ejb-ref-id="EjbRef_1082407586720">
				<description></description>
				<ejb-ref-name>ejb/BeneficiarySession</ejb-ref-name>
	<ejb-ref-type>Session</ejb-ref-type>
				<home>com.ibm.wssvt.tc.pli.ejb.BeneficiarySessionHome</home>
				<remote>com.ibm.wssvt.tc.pli.ejb.BeneficiarySession</remote>
				<ejb-link>PolicySession20EJB.jar#BeneficiarySession</ejb-link>
			</ejb-ref>
			<ejb-ref-id="EjbRef_1082407586790">
				<description></description>
				<ejb-ref-name>ejb/PolicySession</ejb-ref-name>
	<ejb-ref-type>Session</ejb-ref-type>
				<home>com.ibm.wssvt.tc.pli.ejb.PolicySessionHome</home>
				<remote>com.ibm.wssvt.tc.pli.ejb.PolicySession</remote>
				<ejb-link>PolicySession20EJB.jar#PolicySession</ejb-link>
			</ejb-ref>
		
		
		<session-id="WSMultiProtocol_2">
			<ejb-name>WSMultiProtocol_2</ejb-name>
			<home>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocolHome</home>
			<remote>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocol</remote>
			<ejb-class>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocolWebSvcsBean</ejb-class>
			<session-type>Stateless</session-type>
			<transaction-type>Container</transaction-type>
			<ejb-ref-id="EjbRef_1082407586720_2">
				<description></description>
				<ejb-ref-name>ejb/BeneficiarySession</ejb-ref-name>
	<ejb-ref-type>Session</ejb-ref-type>
				<home>com.ibm.wssvt.tc.pli.ejb.BeneficiarySessionHome</home>
				<remote>com.ibm.wssvt.tc.pli.ejb.BeneficiarySession</remote>
				<ejb-link>PolicySession20EJB.jar#BeneficiarySession</ejb-link>
			</ejb-ref>
			<ejb-ref-id="EjbRef_1082407586790_2">
				<description></description>
				<ejb-ref-name>ejb/PolicySession</ejb-ref-name>
	<ejb-ref-type>Session</ejb-ref-type>
				<home>com.ibm.wssvt.tc.pli.ejb.PolicySessionHome</home>
				<remote>com.ibm.wssvt.tc.pli.ejb.PolicySession</remote>
				<ejb-link>PolicySession20EJB.jar#PolicySession</ejb-link>
			</ejb-ref>
		
		
		<session-id="WSMultiProtocol_3">
			<ejb-name>WSMultiProtocol_3</ejb-name>
			<home>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocolHome</home>
			<remote>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocol</remote>
			<ejb-class>com.ibm.wssvt.tc.pli.ejb.WSMultiProtocolWebSvcsBean</ejb-class>
			<session-type>Stateless</session-type>
			<transaction-type>Container</transaction-type>
			<ejb-ref-id="EjbRef_1082407586790_3">
				<description></description>
				<ejb-ref-name>ejb/BeneficiarySession</ejb-ref-name>
	<ejb-ref-type>Session</ejb-ref-type>
				<home>com.ibm.wssvt.tc.pli.ejb.BeneficiarySessionHome</home>
				<remote>com.ibm.wssvt.tc.pli.ejb.BeneficiarySession</remote>
				<ejb-link>PolicySession20EJB.jar#BeneficiarySession</ejb-link>
			</ejb-ref>
			<ejb-ref-id="EjbRef_1082407586790_3">
				<description></description>
				<ejb-ref-name>ejb/PolicySession</ejb-ref-name>
	<ejb-ref-type>Session</ejb-ref-type>
				<home>com.ibm.wssvt.tc.pli.ejb.PolicySessionHome</home>
				<remote>com.ibm.wssvt.tc.pli.ejb.PolicySession</remote>
				<ejb-link>PolicySession20EJB.jar#PolicySession</ejb-link>
			</ejb-ref>
		</session>
				
	

暫定修正、修正パッケージ、 またはリフレッシュ・パックのアンインストール後のアプリケーション・エラーの回避

あるアプリケーションが特定の修正が提供する機能を使用している場合にその修正を除去すると、 そのアプリケーションからエラー・メッセージが表示されます。 修正を除去する場合は、アプリケーションの再テストを行って、 エラーの有無を確認してください。 修正を除去したためにエラー・メッセージを表示するアプリケーションがあれば、 すべて再デプロイします。

例えば、WebSphere Application Server に 修正パッケージをインストールし、株価情報の Web サービス StockQuote を作成するとします。 WSDL2Java コマンド行ツールをデプロイヤー役割で使用して、 AgnosticService クラスを拡張する ServiceLocator クラスを生成します。

ここで修正パッケージをアンインストールすると、アプリケーションは、 WebSphere Application Server のそのバージョンではサポートされていない新しい Web サービス・クラス (AgnosticService) を使用することになります。 そこでアプリケーションは、次のようなエラーをスローします。
java.lang.NoClassDefFoundError:
	Error while defining class:
	com.ibm.ws.wsfvt.test.stockquote.StockQuoteServiceLocator
	This error indicates that the class:
	com.ibm.webservices.multiprotocol.AgnosticService
	could not be located  while defining the class:
	com.ibm.ws.wsfvt.test.stockquote.StockQuoteServiceLocator 																														
使用する Web サービス・クラスでサポートされていない バージョンの WebSphere Application Server を使用しないコードを出力するには、 WebSphere Application Server 上でアプリケーションを再デプロイする必要があります。

プロキシー・サーバーを使用して、 WSDL2Java コマンドの実行中にインターネットにアクセスすると、接続がタイムアウトになる

プロキシー・サーバーが必要な環境で WSDL2Java コマンドの実行中にインターネットにアクセスすると、 WSDL2Java コマンドがインターネット情報を見つけられないことがあります。これは、 プロキシー・サーバーがタイムアウトになる可能性があるためです。 例えば、入力 WSDL ファイルがローカル・ドライブではなくインターネット上にあり、 そのファイルをインターネットから取得する必要がある場合、 プロキシー・サーバーがタイムアウトになるために、WSDL2Java コマンドはファイルの検出に失敗します。

この問題を回避するには、 Windows オペレーティング・システムでは WSDL2Java.bat ファイルを、 Linux または UNIX オペレーティング・システムでは WSDL2Java.sh ファイルを編集します。 これらのファイルは、<install_root>/WebSphere/AppServer/bin ディレクトリーにあります。

[Windows] Windows オペレーティング・システムを使用する場合は、次のように、 WSDL2Java.bat ファイルでプロキシー・ホストとプロキシー・ポートの値を設定します。
PROXY_INFO="-Dproxy.httpHost=yourPproxyHost -Dproxy.httpPort=yourProxyPort
[Linux] [AIX HP-UX Solaris] Linux または UNIX オペレーティング・システムを使用する場合は、次のように、 WSDL2Java.sh ファイルでプロキシー・ホストとプロキシー・ポートの値を設定します。
PROXY_INFO="-Dproxy.httpHost=yourProxyHost -Dproxy.httpPort=yourProxyPort

JMS スタイル・エンドポイント URL を含む WSDL 文書で WSDL2Java コマンドを実行する場合、エミッター障害が発生します

JMS スタイルのエンドポイント Web アドレスを含む WSDL 文書で WSDL2Java コマンド行ツールを実行する場合 (例えば jms:/...)、 JMS プロトコルに対するカスタム・プロトコル・ハンドラーを含む urlprotocols.jar ファイルが CLASSPATH 変数ステートメント内にある必要があります。urlprotocols.jar ファイルを確実に CLASSPATH 変数ステートメント内に置くことにより、 エラー「WSWS3099E: エラー: エミッター障害。ポート <x>、サービス <y> に無効なエンドポイント・アドレスがあります: <jms-url-string>」は回避されます。

urlprotocols.jar ファイルを CLASSPATH 変数ステートメントに追加するには、 以下のようにします。

[Windows] Windows プラットフォームでは、 install_root¥bin¥setupCmdLine.bat ファイルを編集して、 WAS_CLASSPATH 環境変数を設定している行を見つけます。WAS_CLASSPATH 環境変数を設定している行の末尾に、 %install_root%¥lib¥urlprotocols.jar を追加します。

Linux および AIX オペレーティング・システムでは、install_root/bin/setupCmdLine.sh ファイルを編集して、 WAS_CLASSPATH 環境変数を設定している行の末尾に $install_root/lib/urlprotocols.jar を追加します。

プラットフォームに応じた適切な区切り文字を使用するようにしてください。 例えば、Windows プラットフォームではセミコロン (;) を使用し、 Linux および UNIX プラットフォームではコロン (:) を使用します。




関連タスク
Web サービスのトラブルシューティング
関連情報
Web サービス: 学習用リソース
JAX-RPC アプリケーション用の WSDL2Java コマンド
参照トピック    

ご利用条件 | フィードバック

最終更新: Jan 22, 2008 12:07:38 AM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/rwbs_trbcommand.html