2013-03-27 37 views
17

Từ phía máy khách, nếu tôi muốn truy cập dịch vụ web, tôi chỉ cần tạo một proxy cho nó bằng cách sử dụng wsimport. Đó là tài liệu tham khảo dịch vụ web của tôi.Khi nào tôi cần sử dụng @WebServiceRef?

Chú thích @WebServiceRef sẽ xuất hiện ở đâu? Nó có nghĩa là để được sử dụng ở phía máy chủ duy nhất, để có được tài liệu tham khảo tiêm vào các dịch vụ web được lưu trữ trong cùng một môi trường?

+0

Trong máy khách java SE, không cần thiết như: // // @ WebServiceRef (wsdlLocation = "http: // localhost: 8080/JaxWsExample/NewWebServiceService? Wsdl") \t dịch vụ NewWebServiceService tĩnh mới = newWebServiceService(); 'và nó hoạt động – ACV

+0

Tuy nhiên trong các máy khách dựa trên servlet, nó là mandaory (và không cần phải khởi tạo dịch vụ) – ACV

Trả lời

18

Không nhất thiết, nhưng nó thực sự là cái gì đó phụ thuộc vào việc triển khai máy chủ. ví dụ. Để truy cập vào một dịch vụ từ xa, nó đòi hỏi phải có quyền truy cập cho khách hàng tạo và tùy chọn các tài liệu WSDL và các tập tin chương trình (theo quy ước phải ở trong WEB-INF/wsdl), do đó

public class HelloServlet extends HttpServlet { 

    @WebServiceRef(HelloMessengerService.class) // class with @WebServiceClient 
    private HelloMessenger port; // the SEI 

    ... 
} 

Lớp HelloMessengerService là còn sơ khai và có chú thích @WebServiceClient có thuộc tính wsdlLocation (trỏ tới tài liệu WSDL cục bộ từ xa).

Nhưng bạn có thể có một cái gì đó như thế

@WebServiceRef(wsdlLocation = "META-INF/wsdl/AnyService/Any.wsdl") 
private HelloMessengerService service; 

hoặc

@WebServiceRef 
public HelloMessengerService service; 

Nếu bạn sử dụng một chuỗi xử lý để làm thay đổi đến và đi các thông điệp SOAP:

@WebServiceRef(HelloMessengerService.class) 
@HandlerChain(file="handler-chain.xml") 
private HelloMessenger port; 

Việc sử dụng chú thích @WebServiceRef phải được áp dụng cho các ứng dụng khách được JAX-WS quản lý, như Servlet, EJB, o r một dịch vụ Web khác.

+1

Sự khác biệt giữa các thành phần Java EE và các lớp Java" chuẩn "là Các thành phần Java EE được lắp ráp vào một ứng dụng Java EE, chúng được xác minh để được tạo đúng và tuân theo đặc tả Java EE và chúng được triển khai để sản xuất, nơi chúng được chạy và được quản lý bởi máy chủ Java EE_. [thêm ...] (http://docs.oracle.com/javaee/6/tutorial/doc/bnaay.html#bnabb) –

5

Chỉ cần thêm vào câu trả lời của Paul Vargas, chú thích @WebServiceRef là công cụ để hoàn thành sự phát triển của nền tảng Java EE thành một môi trường được quản lý hoàn toàn. Hãy suy nghĩ về nó theo cách này:

Hầu như mọi thành phần trong ngăn xếp Java EE đều có thể tiêm được bằng một số phương tiện, EJB, hạt JSF được quản lý, đậu CDI, @Resources v.v. Tại sao không thể tiêm tham chiếu webservice? Với khả năng tiêm một tham chiếu webservice sử dụng chú thích này, sau đây là sẵn sàng mục tiêu tiêm:

  • EJB
  • Servlets (dưới Servlet 3.0)
  • JSF Managed Beans
  • CDI Đậu
  • MDB
Các vấn đề liên quan