JAX-RPC, веб-службы Spring и UnsupportedOperationCallException - PullRequest
2 голосов
/ 14 ноября 2008

У меня есть веб-сервис 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:

  1. Если я установлю свойство wsdlDocumentUrl, я получу ошибку HTTP 401, поскольку этот веб-сервис работает за базовой аутентификацией HTTP, и кажется, что Spring не использует свойства имени пользователя / пароля при получении WSDL.
  2. Если я укажу свойство PortInterface (со значением CompanyWebServiceInterfacePort), тогда я получу другое исключение:

    Не удалось инициализировать службу для порта JAX-RPC [{http://www.company.com/wdsl}CompanyWebServiceInterfacePort]; вложенное исключение: отсутствуют данные WSDL, эта операция недоступна

Другими словами, это говорит мне о том, что WSDL отсутствует - что я не могу установить, поскольку Spring не будет использовать имя пользователя / пароль для получения его с сервера!

Я не уверен, имеет ли что-либо из этого смысл, но в сущности я не уверен:

  1. Для службы JAX-RPC мне нужно установить свойство PortInterface? Это тот путь, по которому я должен идти?
  2. Аналогично, нужно ли Spring для установки свойства wsdlDocumentUrl? Если да, то могу ли я сказать Spring, какой WSDL и обойти проблему аутентификации?

1 Ответ

0 голосов
/ 15 ноября 2008

Я в конечном итоге решил эту проблему, сохранив копию файла WSDL локально, и, поскольку JaxRpcPortProxyFactoryBean ожидает java.net.URL для свойства wsdlDocumentUrl, пришлось задать для него путь, например file:///c:/.../blah.wsdl.

Это не так уж и желательно, я бы не хотел помещать file:/// URI в контекстный файл Spring, который может быть развернут на сервере, особенно на другой платформе - кажется странным, что этот класс ведет себя так способ.

Я предполагаю, что большинство людей не используют Spring, так или иначе, не используют JAX-RPC.

...