0

Windows Werver 2012 で実行されている Glassfish で Java クライアントと Java Web サービスを使用して Web サービスを構築しています。

これは私の @WebService クラスです:

import java.util.ArrayList;
import java.util.List;

import javax.jws.WebService;

@WebService
public class ProductCatalog {

    public List<String> getProductCategories(){
     List<String> categories = new ArrayList<>();
     categories.add("Books");
     categories.add("Music");
     categories.add("Movies");

     return categories;
   }
}

クライアント側でスタブ メソッドを作成するために、Java の wsimport 変換を使用し、WS によって発行された WSDL xml から必要な Java ソース ファイルを生成します。

私が気づいたのは、リストに cetgory を追加すると、次のようになることです。

     //...code
     categories.add("Books");
 categories.add("Music");
 categories.add("Movies");
 categories.add("Pens");
     //...code

クライアント側から更新された配列リストを取得します: Book,Music,Movie + "Pens"

  • しかし、クラスに新しいメソッドを追加すると、そのメソッドがクライアント側から見えなくなります。どうしてですか?
  • WSDL ファイルに対して WSIMPORT を再度実行し、クライアント側を再コンパイルする必要があるためですか?
  • 上記が当てはまる場合、サーバー側/Web サービス コードに変更があるたびに WSIMPORT クラス/ソース ファイルの生成を回避する方法はありますか?

ありがとうルター

4

2 に答える 2

1

Web サービスは通常、プロセス間通信に使用されるため、サービスを運用するには強力な契約が必要です。WSDL は、このような契約の手段を提供します。したがって、コントラクトが変更されるたびに WSDL を更新する必要があります。

ただし、サービスの呼び出しに WSDL を必要としないオプションがまだあります。動的呼び出し ( https://access.redhat.com/site/documentation/en-US/JBoss_Enterprise_Application_Platform/6/html/Development_Guide/Develop_a_JAX-WS_Client_Application.html )を使用して実現できます。長所と短所があります。ユースケースによっては、これが解決策になる場合があります。

于 2013-07-18T10:13:19.700 に答える
0

これを実現する 1 つの方法は、ビジネス ロジックを別のクラスに記述し、サービス クラスでそのメソッドを呼び出すことです。その getProductCategories() メソッドを他のクラスに取り出し、そのクラスのインスタンスを作成してメソッドを呼び出します。ビジネスクラスのメソッド、wsdlなどを変更する必要はありません。ただし、メソッドのシグネチャとパラメーターは変更しないでください。

于 2013-10-31T09:59:25.080 に答える