如何在websphere上部署同一Web服务的多个版本

时间:2015-07-01 08:27:31

标签: java web-services websphere jax-ws websphere-7

我想在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,但这也没有帮助。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

您需要提供不同的serviceName。尝试将您的第二个服务注释更改为:serviceName = "MyWebServiceV2"。从web.xml中删除这些servlet和servlet映射条目。通过以下网址访问您的服务:http://hostname/appName/serviceName

对于工作服务的不同servlet映射,portName必须至少有所不同,请检查第二个实现中的portName = "MyWebServicePort2"是否可以。

另一个解决方案是在一个EAR中创建2个战争。