繁体   English   中英

JAX-RPC,Spring Web服务和UnsupportedOperationCallException

[英]JAX-RPC, Spring web services, and UnsupportedOperationCallException

我有一个使用Spring尝试使用的JAX-RPC Web服务。 这是我第一次使用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属性,由于该Web服务位于HTTP基本身份验证后面,我最终会收到HTTP 401错误,并且在获取WSDL时Spring似乎没有使用username / password属性。
  2. 如果我指定一个PortInterface属性(值为CompanyWebServiceInterfacePort ),那么我将得到另一个异常说明:

    无法初始化JAX-RPC端口[{ http://www.company.com/wdsl } CompanyWebServiceInterfacePort]的服务; 嵌套异常是缺少WSDL数据,此操作不可用

换句话说,这是在告诉我缺少WSDL-我无法设置WSDL,因为Spring不会使用用户名/密码从服务器中获取用户名/密码!

我不确定这是否有意义,但是本质上我不确定的是:

  1. 对于JAX-RPC服务,是否需要设置PortInterface属性? 这是我应该走的路吗?
  2. 类似地,Spring是否需要我设置wsdlDocumentUrl属性? 如果是这样,我有什么办法可以告诉Spring哪个WSDL并解决身份验证问题?

我最终通过在本地保存WSDL文件的副本解决了此问题,并且由于JaxRpcPortProxyFactoryBean希望wsdlDocumentUrl属性具有java.net.URL ,因此必须使用file:///c:/.../blah.wsdl这样的路径进行设置。 file:///c:/.../blah.wsdl

这并不是真正想要的,我讨厌必须将file:/// URI放入可能部署在服务器上的Spring上下文文件中,尤其是在不同的平台上-此类的行为方式似乎很奇怪。

我猜想大多数人不使用Spring也不使用JAX-RPC。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM