簡體   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