我有一个JAX-RPC网络服务,我正在尝试使用Spring来消费它。这是我第一次使用Spring来消费Web服务,所以现在我只是试图将其作为测试与JAX-RPC Web服务集成。
Web服务中有几十个操作,但现在我只关心其中一个。以下是我在Spring /客户端端创建的接口:
使用
其次,我对应该使用哪些属性进行设置
我不确定这是否有任何意义,但实质上我不确定的是:
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
的这种配置,调用服务会返回以下异常:
我从来没有完全理解RPC和文档式Web服务之间的区别;但是,我相信这个Web服务正在使用RPC风格——所以这个异常让我感到困惑。org.springframework.remoting.RemoteProxyFailureException: 无效的JAX-RPC调用配置;嵌套异常为操作风格:“rpc”不被支持
其次,我对应该使用哪些属性进行设置
JaxRpcPortProxyFactoryBean
感到困惑:
- 如果我设置了
wsdlDocumentUrl
属性,则会得到HTTP 401错误,因为此Web服务位于HTTP基本身份验证后面,而Spring在获取WSDL时似乎不使用用户名/密码属性。 - 如果我指定一个
PortInterface
属性(值为CompanyWebServiceInterfacePort
),那么我会得到一个不同的异常,其中包含以下内容:初始化JAX-RPC端口[{http://www.company.com/wdsl}CompanyWebServiceInterfacePort]的服务失败;嵌套异常为WSDL数据丢失,此操作不可用
我不确定这是否有任何意义,但实质上我不确定的是:
- 对于JAX-RPC服务,我需要设置PortInterface属性吗?这是我应该走的路吗?
- 同样,Spring是否需要我设置
wsdlDocumentUrl
属性?如果是这样,是否有任何方法可以告诉Spring哪个WSDL并解决身份验证问题?