未找到 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 的名称是 MyWebServices
(MyWebServices.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:
我正在尝试为两个端点实施 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 的名称是 MyWebServices
(MyWebServices.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: