Я хочу поддерживать две версии веб-службы в 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, но это тоже не помогло.
Что мне не хватает?
Вам необходимо указать другое имя службы. Попытайтесь изменить свою вторую аннотацию службы на: 'serviceName =" MyWebServiceV2 "'. Удалите записи 'servlet' и' servlet-mapping' из 'web.xml'. Получите доступ к своей службе через URL: 'http: // hostname/appName/serviceName' – Gas
Спасибо за ваш ответ! Изменение 'serviceName' не работает, потому что реализация больше не соответствует исходному wsdl, и мне не разрешено изменять wsdl. – Sparwer
Для разных видов сопоставлений сервлетов для работы сервисы должны, по крайней мере, различаться в имени порта, проверьте, есть ли у вас в файле portName = MyWebServicePort2 во второй реализации. Другое решение состоит в том, чтобы создать 2 войны в одном EAR. – Gas