我正在使用自頂向下的方法處理Web服務,使用JAX-WS'wsimport從WSDL生成服務類型和接口。這提供了一個端口類型的接口,如下所示,我執行。以編程方式獲取JAX-WS WebService實現的Servlet實例?
/**
* This class was generated by the JAX-WS RI.
* JAX-WS RI 2.2.4-b01
* Generated source version: 2.2
*/
@WebService(name = "ExamplePortType", targetNamespace = "http://example.com")
public interface ExamplePortType {
/**
* @param example
* @return java.lang.String
* @throws ExampleException
*/
@WebMethod
@WebResult(name = "exampleResponse", targetNamespace = "http://example.com")
@RequestWrapper(localName = "sendExample", targetNamespace = "http://example.com", className = "com.example.SendExample")
@ResponseWrapper(localName = "sendExampleResponse", targetNamespace = "http://example.com", className = "com.example.SendExampleResponse")
public String sendExample(
@WebParam(name = "example", targetNamespace = "http://example.com")
ExampleRequest example)
throws ExampleException
;
}
好像這個服務添加到您的應用程序服務器的正常方式(在我的情況下,Tomcat),是實現類添加到web.xml的servlet和添加WSServletContextListener作爲一個傾聽者。非常粗略的看起來,在初始化上下文時,監聽器會構造包裝實現bean的ServletAdapter,並將它們添加到由WSServlet調用的WSServletDelegate。然後由WSServlet處理對您的實現的請求,並由代理根據您設置的任何URL模式傳遞給您的bean。
有沒有辦法做到以上編程?我想要一個接受上述接口的實例並返回給我一個Servlet的實例的方法,如果在ServletContext中註冊的話,會將相應的請求路由到包裝的實現。喜歡的東西:
Servlet exampleServlet = new ServletAdapter().wrap(new ExamplePortTypeImpl());
的一個要求是,我不能依靠靜態配置文件(如web.xml中或陽光jaxws.xml)。 JAX-WS或相關庫(即:Axis2等)是否提供這種功能?
道歉,如果有什麼不明確;這是我第一次來:)。任何指針讚賞。
當前使用JAX-WS 2.1,Tomcat 7,Servlet 3.0。