2015-07-01 5 views
2

Я хочу поддерживать две версии веб-службы в WebSphere 7. Хотя оба веб-службы работают отлично по отдельности, только один слушает, когда они присутствуют.Как развернуть несколько версий одной и той же веб-службы на веб-странице

Я упаковываю следующие два класса и web.xml в один и тот же файл войны (внутри ушного файла).

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> 

Веб-службы разработаны сверху вниз: начиная с WSDL. Я думаю, что это связано с именем веб-службы, но я не могу понять, что изменить, поэтому обе службы прослушивают при развертывании без изменения имени веб-службы в wsdl.

Я также попытался указать endpointInterface в аннотации WebService, но это тоже не помогло.

Что мне не хватает?

+0

Вам необходимо указать другое имя службы. Попытайтесь изменить свою вторую аннотацию службы на: 'serviceName =" MyWebServiceV2 "'. Удалите записи 'servlet' и' servlet-mapping' из 'web.xml'. Получите доступ к своей службе через URL: 'http: // hostname/appName/serviceName' – Gas

+0

Спасибо за ваш ответ! Изменение 'serviceName' не работает, потому что реализация больше не соответствует исходному wsdl, и мне не разрешено изменять wsdl. – Sparwer

+0

Для разных видов сопоставлений сервлетов для работы сервисы должны, по крайней мере, различаться в имени порта, проверьте, есть ли у вас в файле portName = MyWebServicePort2 во второй реализации. Другое решение состоит в том, чтобы создать 2 войны в одном EAR. – Gas

ответ

1

Необходимо указать различные serviceName. Попробуйте изменить вторую аннотацию обслуживания на: serviceName = "MyWebServiceV2". Удалите эти записи сервлетов и сервлетов с web.xml. Получите доступ к своей службе через URL-адреса: http://hostname/appName/serviceName.

Для ваших различных сервисов сервлетов для работы должны, по крайней мере, отличаться в portName, проверьте, есть ли у вас в portName = "MyWebServicePort2" во второй реализации.

Другое решение - это просто создать 2 войны в одном EAR.