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

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

我想在 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/

相关文章:

java - Spring MVC Ajax : Passing Empty Array to Ajax Controller

grails - javax.servlet.ServletException : Filter [sitemesh]: could not be initialized when deploying grails 2. 11 应用程序到 WebSphere 8.5 自由配置文件?

java - JAX-WS 端点仅部分转义 XML 字符串

websphere - 使用 wsadmin Jython 修改 namespace 绑定(bind)

java - Struts 没有使用我的 getter 方法

java - Java中如何根据特定条件进行分割?

java - 将android应用程序与sql数据库连接?

java - 收集器将流分成给定大小的 block

asp.net - Web 方法的最大数量?

web-services - GoToWebinar 组织者 key