我想在WebSphere 7上支持两个版本的Web服务。虽然两个Web服务都可以单独运行,但只有一个在两个版本都存在时才会监听。
我将以下两个类和web.xml打包在同一个war文件中(在ear-file中)。
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
}
的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/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-annotation中指定endpointInterface,但这也没有帮助。
我错过了什么?
答案 0 :(得分:1)
您需要提供不同的serviceName
。尝试将您的第二个服务注释更改为:serviceName = "MyWebServiceV2"
。从web.xml
中删除这些servlet和servlet映射条目。通过以下网址访问您的服务:http://hostname/appName/serviceName
。
对于工作服务的不同servlet映射,portName
必须至少有所不同,请检查第二个实现中的portName = "MyWebServicePort2"
是否可以。
另一个解决方案是在一个EAR中创建2个战争。