2012-04-25 5 views
5

次のように私は、JavaのWebサービス・クラスでのオーバーロードメソッドを実装したいと思います:Webサービスクラスでメソッドオーバーロードを実装できますか?

public String myMethod(User user) 
{ 
    // My code 
} 

public String myMethod(User[] user) 
{ 
    for(int i=0; i<user.length; i++) 
    { 
     myMethod(user[i]); 
    } 
} 

私はmyMethod()に単一Userのオブジェクトを転送する場合は、それが第一の方法をトリガしなければならないと私はUserの配列を送信する場合2番目のメソッドをトリガする必要があります。

WSDLファイルには、1つのメソッドしか表示されません。しかし、両方の呼び出しで@WebMethod(operationName="")を呼び出そうとすると、WSDLファイルを生成できません。

+0

ウェブサービスが過負荷になる可能性はないと思いますが、たとえそうであっても、それは確かに良い練習ではありません。 – ControlAltDel

答えて

14

操作のオーバーロードは、ではなく、のWebサービスです。
WS-BPWSDL 1.2では明示的に禁止されています。
これをサポートしているスタックが見つかったとしても、ではなく、をこの方法に従うことをお勧めします。
オーバーロードはOOのコンセプトです。 Service Orientedパラダイムに適用しようとしないでください

+0

オーバーロードはオブジェクト指向の概念ではなく、OOとの関係はありません言語は手続き型/構造化言語であり、関数のオーバーロードを提供します。 –

3

Webサービスメソッドをオーバーロードすることは難しくありません。 Axis 1.4では、少なくともかなり簡単です。以下のようなサービスに2つのオーバーロードされたメソッドがある場合:

public String myMethod(String firstName, String lastName) throws RemoteException 
public String myMethod(String name) throws RemoteException 

は次に、このような要求:

http://localhost:8080/services/testService?method=myMethod&name=<name> 

は、第二の方法を呼び出します。

そして、このような要求:

http://localhost:8080//services/testService?method=myMethod&firstName=<first_name>&lastName=<last_name> 

は、最初のメソッドを呼び出します。

解像度はAxisによって行われます。

+1

+1、良い情報私はAxisと一緒に仕事をしていましたが、Axisがそれを行うことはできませんでした。私はそれが "コーシャー"なWebサービス設計ではないので、このようなことは決してしません。しかし、私がそのようなことを実装しなければならないコーナーケースに遭遇したかどうかを知ることは良いことです。 –

関連する問題