我想在 WebSphere 7 上支持两个版本的 Web 服务。虽然这两个 Web 服务单独工作都很好,但是当两者都存在时只有一个在监听。
我将以下两个类和 web.xml 打包在同一个 war 文件中(在 ear 文件中)。
MyWebServiceV1Impl.java
package mywebservice._2015._01;
@WebService(name = "MyWebService", targetNamespace = "http://mywebservice.com/2015/01", portName = "MyWebServicePort", serviceName = "MyWebService")
public class MyWebServiceV1Impl implements MyWebService {
// implementation of webmethods
}
MyWebServiceV2Impl.java
package mywebservice._2015._02;
@WebService(name = "MyWebService", targetNamespace = "http://mywebservice.com/2015/02", portName = "MyWebServicePort", serviceName = "MyWebService")
public class MyWebServiceV2Impl implements MyWebService {
// implementation of webmethods
}
网络.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/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<servlet>
<display-name>WebService1</display-name>
<servlet-name>WebService1</servlet-name>
<servlet-class>mywebservice._2015._01.MyWebServiceV1Impl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WebService1</servlet-name>
<url-pattern>v1</url-pattern>
</servlet-mapping>
<servlet>
<display-name>WebService2</display-name>
<servlet-name>WebService2</servlet-name>
<servlet-class>mywebservice._2015._02.MyWebServiceV2Impl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WebService2</servlet-name>
<url-pattern>v2</url-pattern>
</servlet-mapping>
</web-app>
Web 服务是自上而下设计的:从 wsdl 开始。我认为它与 Web 服务的名称有关,但我无法弄清楚要更改什么,因此这两个服务在部署时都在监听,而无需更改 wsdl 中的 Web 服务名称。
我也曾尝试在 WebService 注释中指定端点接口(interface),但这也没有帮助。
我错过了什么?
最佳答案
您需要提供不同的serviceName
。尝试将您的第二个服务注释更改为:serviceName = "MyWebServiceV2"
。从 web.xml
中删除这些 servlet 和 servlet 映射条目。通过 URL 访问您的服务:http://hostname/appName/serviceName
。
为了使您的不同 servlet 映射工作,服务必须至少在 portName
中有所不同,检查您是否可以在 portName = "MyWebServicePort2"
中有第二个实现。
另一个解决方案是在一个 EAR 中创建 2 场 war 。
关于java - 如何在 websphere 上部署同一个 web 服务的多个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31156225/