2009-11-16 80 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