未找到 JAX-WS 多个端点:无效请求

JAX-WS multiple endpoints Not Found: Invalid Request

我正在尝试为两个端点实施 Web 服务并收到此错误 在部署到 apache toncat 8 后尝试访问服务时出现“404 未找到:无效请求”。

下面是我的 Web 服务实现 类、sun-jaxws.xml 和 web.xml

WebImplementation1.java

package com.ws.soap.services;
import javax.jws.WebService;

@WebService(endpointInterface = "com.ws.soap.services.WebServiceImpl1")
public class WebServiceImpl1  {

    public String printMessage() {
        return "Hello from WebServiceImpl1 ";
    }
}

WebServiceImplementation2.java

package com.ws.soap.services;

import javax.jws.WebService;

@WebService(endpointInterface = "com.ws.soap.services.WebServiceImpl2")
public class WebServiceImpl2 {

    public String displayMessage() {
        return "Hello from WebServiceImpl2 ";
    }
}

太阳-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="WebServiceImpl1" implementation="com.ws.soap.services.WebServiceImpl1"
        url-pattern="/impl1" />
    <endpoint name="WebServiceImpl2" implementation="com.ws.soap.services.WebServiceImpl2"
        url-pattern="/impl2" />
</endpoints>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <display-name>JAX-WS-Tomcat</display-name>
    <listener>
        <listener-class>
            com.sun.xml.ws.transport.http.servlet.WSServletContextListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>sayhello</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>sayhello</servlet-name>
        <url-pattern>/impl1</url-pattern>
        <url-pattern>/impl2</url-pattern>
    </servlet-mapping>

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
</web-app>

使用提供的确切代码(加上从 https://jax-ws.java.net/ 下载的 JAX-WS RI jar),我能够创建一个 webapp 并成功访问服务端点 /impl1/impl2.请注意,<url-pattern><endpoint ... url-pattern="/impl1"> 指令在封闭的 Web 应用程序 的上下文路径中声明了 JAX-WS 端点的资源路径

因此,如果 webapp 的名称是 MyWebServicesMyWebServices.war 除了 post 中描述的以外没有其他 files/code,部署到 Tomcat 8) 并且您在 web.xml 中有 <url-pattern>/impl1</url-pattern>,并且默认 Tomcat 实例侦听端口 8080,您的 Web 服务端点将是 http://localhost:800/MyWebServices/impl1 with the WSDL available via http://localhost:800/MyWebServices/impl1?wsdl

如果您想自定义您的网络应用程序的上下文路径(例如,您不想 /MyWebServices/... 您可以使用 .

中描述的技术

比如我本地的Tomcat8端口是运行8081: