jax wsを使って春のWebサービスを用意しました。それは正常に動作し、他の多くのプロジェクトからこのサービスを呼び出すことができます。
別のプロジェクトで興味深いことが起こりました。このクライアントを再度使用しようとしました(ソースとして追加することと、jarを使用してクラスだけを追加することの両方を試してみました)。サービスで get end point port メソッドを呼び出すと (Web サービスで実際のメソッドを呼び出す前に)、サイレントに失敗し、要求がサービスに対して行われたという兆候はなく、例外もキャッチされません。コントローラーに finally 句があるのは私だけです。それはいくつかの計算を行い、終了します (そしてログを出力します)。
この失敗で一般的な例外が生成されないのはなぜですか? 他の方法でエラーを追跡するにはどうすればよいですか? または一般的に、私は何を間違っていますか?
利用方法:
logger.debug("web service: " + transferService.toString());
logger.debug("web service qname: " + transferService.getServiceName());
logger.debug("web service url: " + transferService.getWSDLDocumentLocation());
//logger.debug("web service endpoint: " + transferService.getTransferEndPointPort().toString());
QueryCardNumberWithIdWSResponse response =
transferService.getTransferEndPointPort().queryId(request);
getTransferEndPointPort を呼び出すまで、transferService オブジェクトは正常に機能します。その後、クラッシュします。
getTransferEndPoint の実装:
@WebEndpoint(name = "TransferEndPointPort")
public TransferEndPoint getTransferEndPointPort() {
loggerApache.debug("getting transfer end point ");
loggerApache.debug("service name: " + super.getServiceName() );
return super.getPort(new QName("http://www.blabla.com", "TransferEndPointPort"), TransferEndPoint.class);
}
ログを出力しますが、super.getPort の後は何も起こらず、コントローラーの finally ブロックだけが機能します。
編集: しばらくしてから、catch 句で Throwable を使用することを思い出しました。そのため、最終的にサービスからスロー可能なものをキャッチしました。
そうだった :
java error java.lang.NoSuchMethodError: javax.xml.ws.WebFault.messageName()Ljava/lang/String;
Web を検索した結果、Java エディションのため、Web サービスで WebFault を使用すべきではないという結論に達しました。Web メソッドから throws 例外を削除しました (おそらく、以前の段階で削除するのを忘れていました)。