English 中文(简体)
JAX-RPC,Spring Web服务,和UnsupportedOperationCallException。
原标题:
  • 时间:2008-11-14 16:07:47
  •  标签:

我有一个JAX-RPC Web服务,我正在尝试使用Spring进行调用。这是我第一次使用Spring调用Web服务,所以现在我只是试图将其作为测试与JAX-RPC 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. If I set the wsdlDocumentUrl property, I end up getting a HTTP 401 error as this web service sits behind HTTP Basic Authentication, and it seems Spring does not use the username/password properties when fetching the WSDL.
  2. If I specify a PortInterface property (with a value of CompanyWebServiceInterfacePort), then I get a different Exception stating:

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

换句话说,它告诉我WSDL丢失了 - 由于Spring不会使用用户名/密码从服务器获取它,我无法设置它!

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

  1. For a JAX-RPC service, do I need to set the PortInterface property? Is this the path I should be going down?
  2. Similiarly, does Spring need me to set the wsdlDocumentUrl property? If so, is there any way I can tell Spring which WSDL and get around the authentication problem?
最佳回答

我最终通过将WSDL文件保存在本地来解决这个问题。由于JaxRpcPortProxyFactoryBean需要为wsdlDocumentUrl属性提供一个java.net.URL,所以必须使用类似于file:///c:/.../blah.wsdl的路径来设置它。

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

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

问题回答

暂无回答




相关问题
热门标签