Если вы хотите поэкспериментировать с веб-сервисами, предоставив несколько альтернативных реализаций одного и того же веб-сервиса (представленных элементом <wsdl: service>), каждый из которых имеет свой собственный URL, и вы используете Websphere 7 и JAX-WS, то:
- Для каждой альтернативной реализации добавьте <wsdl: port> с уникальным именем в элементе <wsdl: service> в файле WSDL. Осторожно: это важно, чтобы включить несколько реализаций.
- Для каждой альтернативной реализации определите отображение сервлета и сервлета в 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>
- Создайте реализации — вероятно, как POJO, обозначенные аннотацией @WebService — и установите соответствующее имя порта для каждой из них ( @WebService ( portName = ”<уникальное имя порта>»,… ) )
- Развертывание и использование
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, если вам не нужна особая конфигурация (как мы делаем здесь)