2009-11-16 107 views
1

我們正在研究一個項目,我們正在使用CXF框架提供的JaxWSProxyFactoryBean來調用webservices。 我正在使用SPRING配置來創建客戶端,而不是直接在代碼中使用API​​。 我也在設置maintain_session屬性來確保會話由WS客戶端維護。JaxWSProxyFactoryBean共享HTTP會話

< JAXWS:客戶端ID = 「userAuthenticationServiceClient1」 地址= 「$ {} application.deployment.url/UserAuthentication」 服務類= 「com.authentication.webservice.IUserAuthenticationService」 抽象= 「真」 > < JAXWS:性能> <輸入鍵= 「javax.xml.ws.session.maintain」 > <值類型= 「java.lang.Boolean的」 >真< /值> < /條目> </JAXWS:屬性> </jaxws:客戶端>

但我發現會話不是跨各種web服務實例維護的。 爲了更清楚 如果有像wc1,wc2,wc3這樣的代理客戶端。在wc1上調用的所有操作都將有其會話,而wc2將創建新會話。 有人可以讓我知道我需要做什麼設置,以便所有的ws客戶端將共享會話嗎?

回答

2

真的沒有一種「自動」的方式來做到這一點。每個服務代理被設計爲與其他服務代理完全分開。但是,你可以在「手動」從一個代理通過複製會話cookie其他:

HTTPConduit conduit1 = (HTTPConduit)ClientProxy.getClient(p1).getConduit(); HTTPConduit conduit2 = (HTTPConduit)ClientProxy.getClient(p2).getConduit(); conduit2.getCookies().putAll(conduit1.getCookies());

這應該所有的cookies,從一個到另一個複製。

+0

嘿丹尼爾,謝謝你回覆我的帖子。但它不可能使用上面的API,因爲我已經提到我正在使用SPRING託管的bean。由於由jaxws:client創建的實例被注入,我創建的任何類都不知道它們是否調用任何Web服務。我想有一個通用的方式來做到這一點,而不需要讓我的課程知道他們住在哪裏:) – CuriousMind 2009-11-17 03:14:32

+0

啊。在這種情況下,我唯一能想到的是編寫一對攔截器來做到這一點。一個「In」攔截器,用於記錄所有會話cookie和一個「Out」以添加/更新會話cookie。配置所有的東西。 – 2009-11-17 19:05:10