Я работаю над веб-службой, используя нисходящий подход, создавая типы служб и интерфейсы из WSDL, используя wsimport JAX-WS. Это обеспечивает следующий интерфейс типа порта, который я реализую.
/**
* 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 в качестве сервлета и добавить WSServletContextListener в качестве слушателя. Очень грубо кажется, что при инициализации контекста слушатель создает ServletAdapters, которые обертывают bean-компонент реализации и добавляют их в WSServletDelegate, который вызывается тонким WSServlet. Запросы к вашей реализации затем обрабатываются WSServlet и передаются вашему bean-компоненту делегатом на основе любых настроенных вами шаблонов URL.
Есть ли способ сделать вышеописанное программно? Мне нужен метод, который принимает экземпляр вышеуказанного интерфейса и возвращает мне экземпляр сервлета, который, если он зарегистрирован в ServletContext, будет направлять соответствующие запросы в обернутую реализацию. Что-то типа:
Servlet exampleServlet = new ServletAdapter().wrap(new ExamplePortTypeImpl());
Одним из требований является то, что я не могу полагаться на статические файлы конфигурации (такие как web.xml или sun-jaxws.xml). Предоставляет ли JAX-WS или родственная библиотека (например, Axis2 и т. д.) такую функциональность?
Извиняюсь, если что-то не понятно; я здесь впервые :). Любые указатели приветствуются.
В настоящее время используется JAX-WS 2.1, Tomcat 7, Servlet 3.0.