Уровень сообщений службы Jax-WS - PullRequest
1 голос
/ 03 марта 2011

Я пытаюсь создать заглушку WebService. Мне нравится реагировать на все запросы в одном месте. У меня есть образец генератора значений, который обрабатывает тип запроса и создает пример ответа, поэтому мне не нужны вещи для генерации кода с большим количеством классов. Только очень простой.

Я нашел http://jax -ws.java.net / nonav / 2.2.1 / docs / provider.html WebServiceProvider, предназначенный именно для получения необработанных сообщений SOAP и создания ответа в одном место.

Основная проблема в том, что я новичок в этом волшебном мире EE :) и я просто не могу запустить образец WebServiceProvider.

У меня есть Spring, SpringSource ToolSuit, Axis установлен / настроен, все остальное работает.

Спасибо всем за помощь и, пожалуйста, извините, если вопрос слишком прост для вас. Может быть, я просто не нашел / прочитал что-то. M.

Ответы [ 2 ]

2 голосов
/ 11 марта 2011

Наконец-то я нашел решение (спасибо за помощь от моих коллег). Если вы используете JAX-WS, есть простое решение.

Вам необходим файл sun-jaxws.xml в папке WEB-INF, содержащей следующее:

<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
  <endpoint
     name="RawWS"
     implementation="com.stg.pack.MyServiceProvider"

     url-pattern="/HotelServices200631"/>
</endpoints>  

И вам нужен класс com.stg.pack.MyServiceProvider, который выглядит следующим образом:

package com.stg.pack;

@ServiceMode(value = Service.Mode.MESSAGE)
@WebServiceProvider(portName = "ThePortNameOfWebService", 
        serviceName = "TheNameOfWebService", 
        targetNamespace = "http://www.example.com/target/namespace/uri")
public class MyServiceProvider implements Provider<SOAPMessage> {

    @Override
    public SOAPMessage invoke(SOAPMessage request) {
        SOAPMessage result = null;
        // create response SOAPMessage
        return result;
    }
}

И прежде чем я забуду, вам нужно определить некоторые вещи в web.xml:

   <listener>
     <listener-class>
        com.sun.xml.ws.transport.http.servlet.WSServletContextListener
     </listener-class>
   </listener>
   <servlet>
      <servlet-name>RawWS</servlet-name>
      <servlet-class>
        com.sun.xml.ws.transport.http.servlet.WSServlet
      </servlet-class>

   </servlet>
   <servlet-mapping>
     <servlet-name>RawWS</servlet-name>
     <url-pattern>/TheNameOfWebService</url-pattern>
   </servlet-mapping>

Если вы используете его таким образом, все запросы обрабатываются методом invoke.

0 голосов
/ 10 марта 2011

Вы должны развернуть своего провайдера в каком-либо контейнере. разработка в J / EE в основном требует, чтобы вы скомпилировали какой-то EAR или WAR или JAR и сказали серверу приложений развернуть его (будь то сервер приложений JBOSS, glassfish, Weblogic, Websphere, Tomcat и т. д.).

Вы пытались это сделать?

также возможно протестировать вашего провайдера, используя класс javax.xml.ws.Endpoint, хотя я должен признать, что никогда не выбирал для этого в пользу развертывания на сервере приложений.

...