我非常坚持使用 Axis2 框架从服务器 WSDL 生成客户端存根的基于 SOAP 的集成。场景如下:
- 首先总是有一个登录 API 调用,它在 SOAP 正文中给出成功响应,在 HTTP 标头中给出临时重定向。还提供了一个 URL,其中包含 HTTP 标头的 Location 字段中的会话 ID。
- 需要在此重定向位置进行下一次 API 调用。在相同的 TCP 连接中,以获得正确的响应。
- 现在,问题是,作为使用 Axis2 生成的存根的 Web 服务实现的一部分,我需要重新加载此重定向 URL 并将其重新实例化为 --- "stub=new Stub(newurl)"
- 一旦完成,它就会创建一个新的 TCP 连接,因此,下一个请求会给出“会话 ID 无效”的响应,因为它与登录 API 不同步。
我已经尝试了该论坛中提到的所有解决方案,但没有任何效果。例如——
MultiThreadedHttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager();
HttpClient httpClient = new HttpClient(httpConnectionManager);
ServiceClient serviceClient = stub._getServiceClient();
Options opts = stub._getServiceClient().getOptions();
opts.setTo(new EndpointReference(prop.getProperty("target_end_point_url")));
opts.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, Constants.VALUE_TRUE);
opts.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, httpClient);
serviceClient.setOptions(opts);
stub._setServiceClient(serviceClient);
同样,我也尝试了许多其他选择。但这根本没有帮助。