Статьи

Подсказка: несколько классов реализации веб-сервисов, доступных одновременно в WAS7

Если вы хотите поэкспериментировать с веб-сервисами, предоставив несколько альтернативных реализаций одного и того же веб-сервиса (представленных элементом <wsdl: service>), каждый из которых имеет свой собственный URL, и вы используете Websphere 7 и JAX-WS, то:

  1. Для каждой альтернативной реализации добавьте <wsdl: port> с уникальным именем в элементе <wsdl: service> в файле WSDL. Осторожно: это важно, чтобы включить несколько реализаций.
  2. Для каждой альтернативной реализации определите отображение сервлета и сервлета в web.xml следующим образом:
<servlet id="$IMPLEMENTATION_CLASS_NAME$">
<servlet-name>$IMPLEMENTATION_CLASS_NAME$</servlet-name>
<servlet-class>$IMPLEMENTATION_CLASS_NAME$</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>$IMPLEMENTATION_CLASS_NAME$</servlet-name>
<url-pattern>/$DESIRED_UNIQUE_URL$</url-pattern>
</servlet-mapping>
  1. Создайте реализации — вероятно, как POJO, обозначенные аннотацией @WebService — и установите соответствующее имя порта для каждой из них ( @WebService ( portName = ”<уникальное имя порта>»,… ) )
  2. Развертывание и использование

1. Определите уникальный порт wsdl: для каждой реализации

Как уже упоминалось, необходимо определить уникальный wsdl: порт для каждой реализации.

Мы определяем два порта, LearningActivityPort1 и LearningActivityPort2 , используя один и тот же тип порта (т.е. один и тот же транспортный протокол и т. Д.).

LearningActivity.wsdl :

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions ...>
<wsdl:types>...</wsdl:types>
<wsdl:message ...>...</wsdl:message>
<wsdl:portType name="DefaultPortType">...</wsdl:portType>
<wsdl:binding name="LearningActivityHttpBinding" type=...>...</wsdl:binding>
<wsdl:service name="LearningActivityHttpService">
<wsdl:port binding="tns:LearningActivityHttpBinding" name="LearningActivityPort1">
<soap:address location="http://example.com/myApp/LearningActivityHttpService" />
</wsdl:port>
<wsdl:port binding="tns:LearningActivityHttpBinding" name="LearningActivityPort2">
<soap:address location="http://example.com/myApp/LearningActivityRawXmlService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

2. Определите сервлет и отображение сервлета для каждой реализации

Затем нам нужно объявить каждый из классов реализации веб-сервиса как сервлет и определить отображение сервлета для назначения уникального URL-адреса этой реализации, как описано в справке WAS :
web.xml :

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee" 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">
<display-name>pokusWeb4was7</display-name>

<servlet id="LearningActivityHttpBindingImpl">
<servlet-name>LearningActivityHttpBindingImpl</servlet-name>
<servlet-class>example.LearningActivityHttpBindingImpl</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>LearningActivityHttpBindingImpl</servlet-name>
<url-pattern>/LearningActivityJaxbService</url-pattern>
</servlet-mapping>

<servlet id="LearningActivityRawXmlServiceImpl">
<servlet-name>LearningActivityRawXmlServiceImpl</servlet-name>
<servlet-class>example.LearningActivityRawXmlServiceImpl</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>LearningActivityRawXmlServiceImpl</servlet-name>
<url-pattern>/LearningActivityRawXmlService</url-pattern>
</servlet-mapping>

<welcome-file-list>...</welcome-file-list>
</web-app>

При развертывании две реализации будут доступны по адресу http: // localhost: 9080 / pokusWeb4was7 / LearningActivityHttpService и http: // localhost: 9080 / pokusWeb4was7 / LearningActivityRawXmlService.

3. Создайте каждую реализацию, связав ее с именем порта

Наконец, мы пишем две реализации, каждая из которых присваивается отдельное имя порта:
example.LearningActivityHttpBindingImpl :

@javax.jws.WebService (serviceName="LearningActivityHttpService", portName="LearningActivityPort1")
public class LearningActivityHttpBindingImpl{

public TransactionResponseMessage updateLearningActivity(LearningActivityMessage learningActivityMsg) {
//...
return response;
}
}

example.LearningActivityRawXmlServiceImpl :

@javax.jws.WebService (serviceName="LearningActivityHttpService", portName="LearningActivityPort2")
public class LearningActivityRawXmlServiceImpl{

public TransactionResponseMessage updateLearningActivity(LearningActivityMessage learningActivityMsg) {
//...
return response;
}
}

Закрытие заметки

Обратите внимание, что с JAX-WS

  • Вам не нужен webservice.xml — вся необходимая информация предоставляется (может быть) посредством аннотаций
  • Вам не нужно объявлять веб-сервисы в web.xml, если вам не нужна особая конфигурация (как мы делаем здесь)

 

От http://theholyjava.wordpress.com/2010/12/29/tip-multiple-webservice-implementation-classes-available-at-the-same-time-under-was7/