Apache Axis ConfigurationException
質問
Apache Axis を使用して Java アプリを Web サーバーに接続しています。wsdl2java を使用してスタブを作成しましたが、スタブを使用しようとすると、次の例外が発生します。
org.apache.axis.ConfigurationException:サービス名がありません
<web service name>
利用可能です
何か案が?
解決
単なる推測ですが、そのエラー メッセージはサービス名を空白のままにしたことを報告しているようです。このエラー メッセージを生成するコードは次のようになると思います。
throw new ConfigurationException("No service named" + serviceName + " is available");
他のヒント
による ドキュメンテーション @arnonym によってリンクされていますが、この例外はやや誤解を招きます。サービスを見つけようとする最初の試行では、ConfigurationException がスローされ、キャッチされます。これは、ConfigurationException クラスによって DEBUG レベルでログに記録されます。次に、別の方法を使用して、成功する可能性のあるサービスを見つける別の試行が行われます。この問題を回避するには、log4j.properties で ConfigurationException クラスのログ レベルを INFO に変更するだけです。
log4j.logger.org.apache.axis.ConfigurationException = INFO
これは、Axis の制御フローで使用される例外です。
http://wiki.apache.org/ws/FrontPage/Axis/DealingWithCommonExceptions--> org.apache.axis.ConfigurationException:XXX という名前のサービスは利用できません
私のコードは次のようになります。うまくいくようです。サービス ロケーターを使用していますか? それとも単にサービスを作成しているだけですか?
SomeServiceLocator locator = new SomeServiceLocator();
SomeService service = null;
try
{
service = locator.getSomeServiceImplPort();
}
catch (ServiceException e)
{
e.printStackTrace();
}
使用している Axis のバージョンはわかりませんが、サーバーとクライアントの両方に Axis2 を使用しており、Java2WSDL はローカルホスト上にサービスのデフォルトのエンドポイントを作成します。WSDL2Java を使用してクライアント スタブを作成すると、スタブのデフォルトのコンストラクターは localhost を指すようになります。サービスが他のエンドポイントにある場合は、エンドポイントをパラメータとしてコンストラクターを使用する必要があります...たぶん問題はまったくそうではありませんが、他の回答で述べたように、WSDL2Java入力として使用しているWSDLがなければ、それを言うのは困難です。