2

我有一个试图使用 Spring 使用的 JAX-RPC Web 服务。这是我第一次使用 Spring 来使用 Web 服务,所以现在我只是想让它与 JAX-RPC Web 服务集成作为测试。

Web 服务中有几十个操作,但现在我只关心一个。以下是我在 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);
}

这是我的 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 并解决身份验证问题?
4

1 回答 1

0

我最终通过在本地保存 WSDL 文件的副本来解决这个问题,并且由于 JaxRpcPortProxyFactoryBean 需要java.net.URL属性wsdlDocumentUrl,因此必须使用类似file:///c:/.../blah.wsdl.

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

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

于 2008-11-14T21:09:17.530 回答