使用Axis2 Webservice生成的存根形成重定向URL的新连接...需要相同的TCP连接......!

时间:2012-10-01 18:05:32

标签: web-services soap axis2

我很难使用Axis2框架进行基于SOAP的集成,以便从Server WSDL生成客户端存根。方案如下:

  1. 首先始终存在登录API调用,它在SOAP正文中提供成功响应,在HTTP标头中提供临时重定向。还提供了一个URL,其中包含HTTP标头的位置字段中的会话ID。
  2. 需要在此重定向位置进行下一次API调用。在相同的TCP连接中,获得适当的响应。
    1. 现在,问题是,作为使用Axis2生成的存根的Webservice实现的一部分,我需要重新加载此重定向URL并将其重新实例化为---“stub = new Stub(newurl)”
    2. 一旦完成,它就会创建一个新的TCP连接,因此,下一个请求会将响应称为“会话ID无效”,因为它与登录API不同步。
  3. 我已经尝试了在本论坛中提到的所有内容,但没有任何问题。 例如 -


    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 个答案:

答案 0 :(得分:0)

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