Java アプリケーションを Web サーバーに接続するために Apache Axis を使用しています。wsdl2java を使用してスタブを作成しましたが、スタブを使用しようとすると、次の例外が発生します。
org.apache.axis.ConfigurationException: 指定されたサービス
<web service name>
は利用できません
何か案が?
@arnonym によってリンクされたドキュメントによると、この例外は誤解を招く可能性があります。サービスを見つけようとする最初の試みで、ConfigurationException がスローされ、キャッチされます。これは、ConfigurationException クラスによって DEBUG レベルでログに記録されます。次に、別の方法を使用して別の試行を行い、成功する可能性のあるサービスを見つけます。これを回避するには、log4j.properties で ConfigurationException クラスのログ レベルを INFO に変更します。
log4j.logger.org.apache.axis.ConfigurationException = INFO
推測ですが、そのエラー メッセージは、サービス名を空白のままにしたことを報告しているようです。そのエラー メッセージを生成するコードは次のようになると思います。
throw new ConfigurationException("No service named" + serviceName + " is available");
これは、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 がないと、言うのは難しいです。