4

サーバー上に Web サービス エンドポイントを作成するために使用されるモデルがあります。クライアントにも同じモデルが使用されます。ただし、新しい操作がサーバーに追加されたが、クライアントがまだ古いモデルを使用している場合、サービスの作成は次のような例外で失敗します (わかりやすくするために改行が追加されています)。

Exception in thread "main" javax.xml.ws.WebServiceException:
  Method someNewMethod is exposed as WebMethod, but there is no
  corresponding wsdl operation with name someNewMethod in the
  wsdl:portType{http://example.com}MyService

問題は理解できましたが、これを無視することはできますか? Web サービスを利用する際に後方互換性を維持したいと考えています。メソッドが単に追加されている限り、これはほとんどの場合問題なく動作するはずです。

問題は次のgetPortメソッドで発生します。

Service s = Service.create(
    new URL("http://example.com/foo?wsdl"),
    new QName("http://example.com", "MyService"));
MyService m = s.getPort(MyService.class);
4

4 に答える 4

0

Web サービス参照を削除し、インターフェイスを使用して再度作成しました。

于 2015-02-04T18:35:10.833 に答える
0

Service クラスには、ローカル wsdl ファイル変数を持つ静的コンストラクターが含まれています。ローカル wsdl ファイルに someNewMethodがあるかどうかを確認します。元の URL から wsdl ファイルをダウンロードしない場合は、ローカルに保存します。wsdl の末尾にある SOAP アドレスの場所の値も重要です。https が http に変わることもあります。

于 2018-01-31T09:06:49.043 に答える
0

ローカル WSDL ファイルを使用する:
クライアント アプリには、サービスのローカル WSDL ファイル (jar ファイルなど) があります。

あなたがそれを得る

URL wsdlURL = this.getClass().getClassLoader()
                .getResource("MyWebService.wsdl");

それは私が書いたアプリでうまくいきました。サーバーは後で追加の WSDL 属性を拡張しましたが、クライアントはまだローカルのものを使用しています。

于 2012-11-29T18:16:45.777 に答える