我们正在开发一个项目,我们正在使用CXF框架提供的JaxWSProxyFactoryBean来调用webservices。 我使用SPRING配置来创建客户端,而不是直接在代码中使用API。 我还设置了maintain_session属性以确保会话由WS客户端维护。
< jaxws:client id =“userAuthenticationServiceClient1”address =“$ {application.deployment.url} / UserAuthentication” serviceClass =“com.authentication.webservice.IUserAuthenticationService”abstract =“true”> < jaxws:properties> < entry key =“javax.xml.ws.session.maintain”> < value type =“java.lang.Boolean”> true< / value> < /条目> < / JAXWS:性状> < / JAXWS:客户机GT;
但我发现不在各种webservices实例中维护会话。 为了更清楚 如果有代理客户端,如wc1,wc2,wc3。在wc1上调用的所有操作都将具有其会话,而wc2将创建新会话。 有人可以让我知道我需要做什么设置,以便所有ws客户端共享会话吗?
答案 0 :(得分:2)
真的没有一种“自动”的方式来做到这一点。每个服务代理都旨在与其他服务代理完全分离。但是,您可以通过以下方式“手动”将会话cookie从一个代理复制到另一个代理:
HTTPConduit conduit1 = (HTTPConduit)ClientProxy.getClient(p1).getConduit();
HTTPConduit conduit2 = (HTTPConduit)ClientProxy.getClient(p2).getConduit();
conduit2.getCookies().putAll(conduit1.getCookies());
这应该将所有cookie从一个复制到另一个。