使用Axis2 Web服务生成的存根,形成重定向URL的新连接..需要相同的TCP连接



我在使用Axis2框架从服务器WSDL生成客户端存根的基于SOAP的集成方面遇到了困难。场景如下:

  1. 总是首先有一个登录API调用,它在SOAP主体中给出成功响应,在HTTP头中给出临时重定向。还提供了一个URL,该URL在HTTP标头的"位置"字段中包含会话ID
  2. 需要在此重定向位置进行下一个API调用。在相同的TCP连接中,以获得正确的响应。
    1. 现在,问题是,作为使用Axis2生成的存根实现Web服务的一部分,我需要重新加载这个重定向URL,并将其重新实例化为---"stub=new stub(newurl)">
    2. 一旦完成,它就会创建一个新的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);

同样,我也尝试了许多其他选项。但这一点帮助都没有。

面临完全相同的问题。以下步骤解决了问题。1.使用HttpClient进行登录。不要使用存根对象来执行登录。2.使用Location Header URL创建新的存根对象,即stub=new stub(locationURL)。(应保留现有的选项设置。)3.有一个默认超时,通过该超时服务器断开TCP连接。在我的情况下是50秒。因此,当我在步骤1中执行登录时,我每40秒执行一次计时器,使用相同HttpClient对象的HeadMethod向新的Location URL发送一个空请求。

最新更新