2012-04-25 38 views
5

Tôi muốn thực hiện phương pháp quá tải trong các lớp dịch vụ web Java như sau:Chúng ta có thể thực hiện quá tải phương thức trong lớp dịch vụ web không?

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

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

Nếu tôi chuyển một đối tượng duy nhất User để myMethod(), cần kích hoạt các phương pháp đầu tiên và nếu tôi gửi một loạt các User s , nó sẽ kích hoạt phương thức thứ hai.

Trong tệp WSDL, nó chỉ hiển thị một phương thức duy nhất. Tuy nhiên, nếu tôi cố gắng gọi @WebMethod(operationName="") cho cả hai cuộc gọi, tôi không thể tạo tệp WSDL.

+0

Tôi không nghĩ rằng có thể quá tải một dịch vụ web, và ngay cả khi nó là, nó chắc chắn không thực hành tốt – ControlAltDel

Trả lời

14

Quá tải hoạt động là không được phép đối với dịch vụ web.
Nó bị cấm rõ ràng trong WS-BPWSDL 1.2 cũng không cho phép.
Ngay cả khi bạn tìm thấy một ngăn xếp có một số hỗ trợ cho điều này tôi sẽ khuyên bạn nên không để làm theo cách tiếp cận này.
Quá tải là một khái niệm OO. Đừng cố áp dụng chúng vào Service Oriented mô hình

+0

Quá tải không phải là một khái niệm OO và nó không có bất kỳ mối quan hệ với OO, ví dụ, C ngôn ngữ là một ngôn ngữ thủ tục/cấu trúc và nó cung cấp chức năng quá tải. –

3

Việc tải quá nhiều phương thức dịch vụ web không khó. Với Axis 1.4 ít nhất nó khá đơn giản. Nếu có hai phương pháp quá tải trong các dịch vụ như dưới đây:

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

Sau đó, một yêu cầu như thế này:

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

sẽ gọi phương pháp thứ hai.

Và một yêu cầu như thế này:

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

sẽ gọi phương pháp đầu tiên.

Độ phân giải được thực hiện bởi Axis.

+1

+1, thông tin tốt. Mặc dù tôi đã làm việc với Axis trong một thời gian dài, tôi không biết Axis có thể làm điều đó. Tôi sẽ không bao giờ đi về nó theo cách này vì nó không phải là "kosher" thiết kế dịch vụ web, nhưng nó là tốt để biết nếu tôi đã bao giờ chạy vào một trường hợp góc, nơi tôi phải thực hiện một điều như vậy. –

Các vấn đề liên quan