У меня есть веб-сервис JAX-RPC, который я пытаюсь использовать с помощью Spring. Я впервые использую Spring для использования веб-службы, поэтому сейчас я просто пытаюсь заставить его интегрироваться с веб-службой JAX-RPC в качестве теста.
В веб-сервисе есть несколько десятков операций, но сейчас я забочусь только об одной. Вот интерфейсы, которые я создал на стороне Spring / client:
public interface WSClient {
public boolean userExists(int userid);
}
public interface WSService {
//this method matches the method signature of the Web Service
public com.company.data.User getUser(int userid);
}
А вот мое приложениеContext.xml:
<bean id="WSClient" class="com.company.ws.test.WSClientImpl">
<property name="service" ref="myWebService"></property>
</bean>
<bean id="myWebService" class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean">
<property name="serviceInterface" value="com.company.ws.test.WSService"/>
<property name="endpointAddress" value="http://1.2.3.4/web-service/data"/>
<property name="namespaceUri" value="http://www.company.com/wdsl"/>
<property name="serviceName" value="CompanyWebService"/>
<property name="username" value="username"/>
<property name="password" value="password"/>
<property name="maintainSession" value="true"/>
</bean>
При использовании этой конфигурации JaxRpcPortProxyFactoryBean
, вызов Сервиса возвращает следующее исключение:
org.springframework.remoting.RemoteProxyFailureException: неверная конфигурация вызова JAX-RPC; Вложенное исключение - это стиль работы: «rpc» не поддерживается
Я никогда полностью не понимал разницу между RPC и веб-сервисами в стиле документов; тем не менее, я считаю, что этот веб-сервис использует RPC-стиль, поэтому это исключение смущает меня.
Во-вторых, я запутался в том, какие свойства мне следует установить с помощью JaxRpcPortProxyFactoryBean
:
- Если я установлю свойство
wsdlDocumentUrl
, я получу ошибку HTTP 401, поскольку этот веб-сервис работает за базовой аутентификацией HTTP, и кажется, что Spring не использует свойства имени пользователя / пароля при получении WSDL.
- Если я укажу свойство
PortInterface
(со значением CompanyWebServiceInterfacePort
), тогда я получу другое исключение:
Не удалось инициализировать службу для порта JAX-RPC [{http://www.company.com/wdsl}CompanyWebServiceInterfacePort]; вложенное исключение: отсутствуют данные WSDL, эта операция недоступна
Другими словами, это говорит мне о том, что WSDL отсутствует - что я не могу установить, поскольку Spring не будет использовать имя пользователя / пароль для получения его с сервера!
Я не уверен, имеет ли что-либо из этого смысл, но в сущности я не уверен:
- Для службы JAX-RPC мне нужно установить свойство PortInterface? Это тот путь, по которому я должен идти?
- Аналогично, нужно ли Spring для установки свойства
wsdlDocumentUrl
? Если да, то могу ли я сказать Spring, какой WSDL и обойти проблему аутентификации?