Несколько конечных точек JAX-WS в sun-jaxws.xml - PullRequest
4 голосов
/ 30 мая 2011

Только начал использовать JAX-WS. Я создал 2 тестовых веб-сервиса в одном файле WAR следующим образом ....

package com.djs;

import javax.jws.WebService;

@WebService()
public class AddTwoInts {

    public int performAdd(int firstNum, int secondNum) {
        return firstNum + secondNum;
    }
}

И .....

package com.djs;

import javax.jws.WebService;

@WebService()
public class SayHello {

    public String sayHello(String inwards) {
        return "Hello " + inwards;
    }
}

Это мой web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
                             http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

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

    <servlet>
        <servlet-name>jaxws</servlet-name>
        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>jaxws</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

Это sun-jaxws.xml

<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>  
    <endpoint name='performAdd' implementation='com.djs.AddTwoInts' url-pattern='/AddTwoInts' />
    <endpoint name='sayHello' implementation='com.djs.SayHello' url-pattern='/SayHello' />
</endpoints> 


Я развертываю в Tomcat 7 и использую http://localhost:8080/MyApp/AddTwoInts?wsdl, чтобы получить WSDL для AddTwoInts OK .... Но когда я выполняю http://localhost:8080/MyApp/SayHello?wsdl, я получаю ошибку 404 страница не найдена ....

Любой совет приветствуется.

Ответы [ 2 ]

13 голосов
/ 02 июня 2011

Дейв,

Я полагаю, вам не хватает сервлет-сопоставления для двух ваших конечных точек.

Добавьте следующее в ваш web.xml и попробуйте еще раз.Дайте мне знать, если это решит проблему.

<servlet>
    <servlet-name>AddTwoInts</servlet-name>
    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>AddTwoInts</servlet-name>
    <url-pattern>/AddTwoInts</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>SayHello</servlet-name>
    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>SayHello</servlet-name>
    <url-pattern>/SayHello</url-pattern>
</servlet-mapping>
2 голосов
/ 25 мая 2013

Вы хотите, чтобы web.xml ссылался только на один сервлет, по адресу urlMapping /:

  <servlet>
    <servlet-name>services</servlet-name>
    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet
      </servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>services</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

Затем включите несколько конечных точек на полном желаемом пути в sun-jaxws.xml:

<endpoint name='performAdd' implementation='com.djs.AddTwoInts' url-pattern='/AddTwoInts' />
<endpoint name='sayHello' implementation='com.djs.SayHello' url-pattern='/couldhavemore/SayHello' />

Обратите внимание на то, что там «мог бы быть больше» ... вы можете добавить его к соответствующему пути в файле sun-jaxws.xml, чтобы получить полный желаемый путь.Я получил один сервис для работы с записью web.xml, отличной от /, но тогда вам понадобится запись web.xml для каждой службы.Кажется, чтобы заставить работать несколько, вам нужно использовать /, а затем поместить полный путь в sun-jaxws.xml.

...