[ 
https://issues.apache.org/jira/browse/AXIS2-5052?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andreas Veithen updated AXIS2-5052:
-----------------------------------

    Priority: Major  (was: Critical)

> Unable to send compressed message!!
> -----------------------------------
>
>                 Key: AXIS2-5052
>                 URL: https://issues.apache.org/jira/browse/AXIS2-5052
>             Project: Axis2
>          Issue Type: Bug
>          Components: client-api
>    Affects Versions: 1.5.4
>         Environment: Windows xp, 
>            Reporter: anil bondalapati
>              Labels: gzip
>
> Hi, 
> I have two webservices deployed on two different servers. (service1 and 
> service2) 
> From my client program I have enabled the GZIP format on the request for the 
> serviceClient. 
> When I make a call to the service1, the message is compressed and sent to the 
> server and everything looks good. 
> After some time I made a call to the service2 and the request xml is sent in 
> compressed format and looks fine. 
> But Now if I sent the message to the service1, it is in clear text and not 
> using the compressed format. 
> Am I missing any options on the ServiceClient. Please let me know if you have 
> faced this problem. 
> Here is the code I am using: 
>       &a! mp;n! bsp;            HttpMethodRetryHandler retry_handler = new 
> DefaultHttpMethodRetryHandler(0, false); 
>                     HttpClientParams params = new HttpClientParams(); 
>                     params.setParameter(HttpMethodParams.RETRY_HANDLER, 
> retry_handler); 
>                     options.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, new 
> org.apache.commons.httpclient.HttpClient(params, manager)); 
>                 options.setProperty(HTTPConstants.MC_GZIP_REQUEST, true); 
>                 options.setProperty(HTTPConstants.MC_ACCEPT_GZIP, true); 
>                 options.setProperty(HTTPConstants.MC_GZIP_RESPONSE, true); 
>             &! nbsp;!     
> options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, true); 
>               
>                 options.setTimeOutInMilliSeconds(wsTimeOutInMilliSeconds); 
>                 options.setProperty(HTTPConstants.CONNECTION_TIMEOUT, 
> wsTimeOutInMilliSeconds); 
>                 options.setCallTransportCleanup(true); 
> Any help is greatly appreciated.
> Thanks
> Anil.
> After debugging the source code I Have found that in AxisRequestEntity.java 
> at line # 80,  the condition is also looking for CHUNKED flag. Is this a must 
> if you want to enable gzip on request?
>  if (gzip != null && JavaUtils.isTrueExplicitly(gzip) && chunked) {
>             outStream = new GZIPOutputStream(outStream);
>         }
> I have another question:
> THis is the code where I create an instance of the sub.
> ************************   SERVICE 1 *************************
>     /**
>      * Returns (new or existing) reference to Web Service TransactionManager.
>      * @return TransactionManager
>      */
>     public TransactionManagerStub 
> getTransactionManagerStub(TransactionManagerStub stub, boolean retry, boolean 
> compressMessage) throws Exception
>     {
>         if (stub == null)
>         {
>             try
>             {
>                 String url      = Gateway.getProperty("application", 
> "TransactionWSUrl", "");
>                 String user     = Gateway.getProperty("application", 
> "WebserviceUser", "");
>                 String password = Gateway.getProperty("application", 
> "WebservicePasswd", "");
>                 int wsTimeOutInMilliSeconds = 
> Integer.parseInt(Gateway.getProperty("application", 
> "wsTimeOutInMilliSeconds", ""));
>                 if (logger.isDebugEnabled())
>                     logger.debug(url);
>                 stub = new TransactionManagerStub(url);
>                 ServiceClient sc = stub._getServiceClient();
>                 sc.cleanup();
>                 // Set security options
>                 org.apache.axis2.client.Options options = sc.getOptions();
>                 options.setProperty(RampartMessageData.KEY_RAMPART_POLICY, 
> loadPolicy(AXIS2_RAMPART_POLICY));
>                 MultiThreadedHttpConnectionManager manager = new 
> MultiThreadedHttpConnectionManager();
>                 if(!retry)
>                 {
>                   //This logic will turn off retry attempts. By default Axis2 
> will retry for 3 attempts which
>                   // results in sending the same message for three times and 
> the application will throw duplicate key exceptions.
>                     HttpMethodRetryHandler retry_handler = new 
> DefaultHttpMethodRetryHandler(0, false);
>                     HttpClientParams params = new HttpClientParams();
>                     params.setParameter(HttpMethodParams.RETRY_HANDLER, 
> retry_handler);
>                     options.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, new 
> org.apache.commons.httpclient.HttpClient(params, manager));
>                 } 
>                 else
>                 {
>                     options.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, new 
> org.apache.commons.httpclient.HttpClient(manager));
>                 }
>                 if(compressMessage)
>                 {
>                       options.setProperty(HTTPConstants.MC_GZIP_REQUEST, 
> true);
>                       options.setProperty(HTTPConstants.CHUNKED, true);
>                 }
>                 options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, true);
>                 options.setTimeOutInMilliSeconds(wsTimeOutInMilliSeconds);
>                 options.setProperty(HTTPConstants.CONNECTION_TIMEOUT, 
> wsTimeOutInMilliSeconds);
>                 options.setCallTransportCleanup(true);
>                 options.setUserName(user);
>                 StringEncryptionUtility util = new StringEncryptionUtility();
>                 char[] pwd = util.getCSFPassword(password);
>                 options.setPassword(new String(pwd));
>                 Util.flushCharArray(pwd);
>                 sc.setOptions(options);
>                 // Enable axis2 security module
>                 sc.engageModule(AXIS2_SECURITY_MODULE);
>                 stub._setServiceClient(sc);
>             }
>             catch (Exception t)
>             {
>                 t.printStackTrace();
>                 logger.error(t);
>                 throw t;
>             }
>         }
>         
>         ServiceClient sc = stub._getServiceClient();
> //        // Set security options
>         org.apache.axis2.client.Options options = sc.getOptions();
>         if(compressMessage)
>         {
>               options.setProperty(HTTPConstants.MC_GZIP_REQUEST, true);
>               options.setProperty(HTTPConstants.CHUNKED, true);
> //            options.setProperty(HTTPConstants.MC_ACCEPT_GZIP, true);
> //            options.setProperty(HTTPConstants.MC_GZIP_RESPONSE, true);
> //            
> //            
> //            
> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.MC_ACCEPT_GZIP,
>  Boolean.TRUE);
> //            
> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.MC_GZIP_REQUEST,
>  Boolean.TRUE);
> //            
> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.MC_GZIP_RESPONSE,Boolean.TRUE);
> //            
> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.COMPRESSION_GZIP,Boolean.TRUE);
> //            
> options.setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED,Boolean.FALSE);
>               
>         }
>         sc.setOptions(options);
>         stub._setServiceClient(sc);
>         
>         return stub;
>     }   
> ******************************   SERVICE2 ************************************
>     /**
>      * Returns (new or existing) reference to Web Services' ReturnsManager.
>      * @return ReturnsManager
>      */
>     private ReturnsManagerStub getWSReturnsManager()
>     {
>         if (wsReturnsMgr == null)
>         {
>             try
>             {
>                 wsReturnsMgr = new ReturnsManagerStub(protocol + "://" + 
> getReturnsManagerServerName() + ":"
>                         + getReturnsManagerServerPort() + path);
>                 ServiceClient sc = wsReturnsMgr._getServiceClient();
>                 // Set security options
>                 Options options = sc.getOptions();
>                 options.setProperty(RampartMessageData.KEY_RAMPART_POLICY, 
> loadPolicy(getWebServiceSecurityPolicy()));
>                 MultiThreadedHttpConnectionManager manager = new 
> MultiThreadedHttpConnectionManager();
>                 options.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, new 
> org.apache.commons.httpclient.HttpClient(manager));
>                 options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, true);
>                 options.setProperty(HTTPConstants.CONNECTION_TIMEOUT, 
> getTimeOutInMilliSeconds());
>                 if(isCompressionAllowed())
>                 {
>                       options.setProperty(HTTPConstants.MC_GZIP_REQUEST, 
> true);
> //                    options.setProperty(HTTPConstants.MC_ACCEPT_GZIP, true);
> //                    options.setProperty(HTTPConstants.MC_GZIP_RESPONSE, 
> true);
>                 }
>                 options.setTimeOutInMilliSeconds(getTimeOutInMilliSeconds());
>                 options.setCallTransportCleanup(true);
>                 options.setUserName(getWebServiceUser());
>                 char[] pwd = getWebServicePassword();
>                 options.setPassword(new String(pwd));
>                 Util.flushCharArray(pwd);
>                 sc.setOptions(options);
>                 // Enable axis2 security module
>                 sc.engageModule(AXIS2_SECURITY_MODULE);
>                 wsReturnsMgr._setServiceClient(sc);
>             }
>             catch (Throwable t)
>             {
>               logger.error("Unable to properly initialize the ReturnsManager 
> webservice.", t);
>             }
>         }
>         return wsReturnsMgr;
>     }
>  
> The above method is defined in  a class EnterpriseWebserviceOperation.java 
> and I am creating multiple instances of it for every action to be called with 
> in the webservice. I am doing this with the assumption that some of the 
> actions are called very frequently and if there is only one instance of stub, 
> that may cause denial of service.  Is it a good idea to create multiple 
> instances of stub for every action? Even if you create multiple instances, 
> the underlying axis2 api will use only one instance of 
> MultiThreadedHttpConnectionManager?
> As I have told you before I have two servcies deployed on two servers and 
> from the client which is running in  a single JVM, for one service I send the 
> request xml as compressed and for the othere service send the clear text xml. 
> After sending the request xml to service2 in clear text, immediately after 
> that we will send the outcome of the previous service to the other service in 
> compression format. Do these multiple service calls use the same 
> MultiThreadedHttpConnectionManager and the options get overridden? 
> I have also another concern here, this service is running at a corporate 
> level and all the stores will be sending the sale transactions to this 
> corporate server. If there are around 500 stores and if the TPS is 500 sent 
> to this webservice, will the service be able to handle that many requests or 
> will the server die? Currently we are using JMS for sending these 
> transactions and my plan is to introduce webservice layer to send the 
> transactions. will this approach work or are we going end up with scalability 
> issues?
> Another issue under the same context, the response is not compressed after 
> setting the following code. Do I have to do anything on the server side to 
> allow the compression for the response.
> We are using Websphere and Weblogic application servers.
>                       options.setProperty(HTTPConstants.MC_GZIP_RESPONSE, 
> true);
>                       options.setProperty(HTTPConstants.MC_ACCEPT_GZIP, true);

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org
For additional commands, e-mail: java-dev-h...@axis.apache.org

Reply via email to