JAX-RPC、Spring Web Services和UnsupportedOperationCallException (注:本文为提问标题,不需要回答)

3
我有一个JAX-RPC网络服务,我正在尝试使用Spring来消费它。这是我第一次使用Spring来消费Web服务,所以现在我只是试图将其作为测试与JAX-RPC Web服务集成。
Web服务中有几十个操作,但现在我只关心其中一个。以下是我在Spring /客户端端创建的接口:
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);
}

这是我的applicationContext.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和文档式Web服务之间的区别;但是,我相信这个Web服务正在使用RPC风格——所以这个异常让我感到困惑。
其次,我对应该使用哪些属性进行设置JaxRpcPortProxyFactoryBean感到困惑:
  1. 如果我设置了wsdlDocumentUrl属性,则会得到HTTP 401错误,因为此Web服务位于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

我最终通过将WSDL文件保存到本地来解决了这个问题。由于JaxRpcPortProxyFactoryBean期望wsdlDocumentUrl属性的值是一个java.net.URL,所以必须使用类似于file:///c:/.../blah.wsdl的路径进行设置。

这并不是非常理想的解决方案,我不想在可能部署在服务器上的Spring上下文文件中放置file:/// URI,尤其是在不同平台上 - 这个类的行为方式似乎很奇怪。

我猜大多数人在使用Spring时都没有使用JAX-RPC。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接