0

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 例外を削除しました (おそらく、以前の段階で削除するのを忘れていました)。

4

0 に答える 0