[Axis2] how to close client when using setUseSeparateListener with Non-Blocking Invocation

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[Axis2] how to close client when using setUseSeparateListener with Non-Blocking Invocation

Ashish Soni

Hi,

 

I am trying to implement the example mentioned in Apache Axis2 Advanced User’s Guide [http://axis.apache.org/axis2/java/core/docs/adv-userguide.html].

 

When writing the web service client using “Do a Non-Blocking Invocation” I found that:

1)       it’s not terminating the client

2)      Next execution of client it’s not calling the Axis2SampleDocLitServiceCallbackHandler

3)      both client hang.

4)      All for further execution of client hang without entering to Axis2SampleDocLitServiceCallbackHandler.

 

I found that it’s happening because it use a separate Listener for response and after first execution of client it’s not getting cleaned up, so further call to client hang and not entering to Axis2SampleDocLitServiceCallbackHandler.

 

Code Snippet:

 

package org.apache.axis2.userguide;

 

import java.rmi.RemoteException;

 

import org.apache.axis2.AxisFault;

import org.apache.axis2.Constants;

import org.apache.axis2.transport.http.HTTPConstants;

import org.apache.axis2.userguide.xsd.EchoStringParamDocument;

import org.apache.axis2.userguide.xsd.EchoStringReturnDocument;

 

public class Axis2SampleDocLitServiceClient {

                public static void main(String[] args) {

                                Axis2SampleDocLitServiceStub stub= null;

                                try{

                                                stub= new Axis2SampleDocLitServiceStub("http://localhost:9090/axis2/services/Axis2SampleDocLitService");

 

                                                EchoStringParamDocument reqDoc= EchoStringParamDocument.Factory.newInstance();

                                                reqDoc.setEchoStringParam("Ashish Soni");

 

/**

                                                 * Do a Non-Blocking Invocation

                                                 */

                                                stub._getServiceClient().engageModule("addressing");

                                                stub._getServiceClient().getOptions().setUseSeparateListener(true);

                                                stub._getServiceClient().getOptions().setProperty(HTTPConstants.AUTO_RELEASE_CONNECTION, Constants.VALUE_TRUE);

                                                stub._getServiceClient().getOptions().setProperty(HTTPConstants.REUSE_HTTP_CLIENT, Constants.VALUE_FALSE);

                                               

                                                Axis2SampleDocLitServiceCallbackHandler handler= new Axis2SampleDocLitServiceCallbackHandler() {                                                                                                    

                                                                @Override

                                                                public void receiveErrorechoString(Exception e) {

                                                                                System.out.println(e.getMessage());

                                                                }

                                                               

                                                                @Override

                                                                public void receiveResultechoString(

                                                                                                EchoStringReturnDocument result) {

                                                                                System.out.println("Callback Handler called: " + result.getEchoStringReturn()); 

                                                                                completed= true;

                                                                }

                                                };

                                               

                                                stub.startechoString(reqDoc, handler);                

                                                                                               

                                                stub._getServiceClient().getOptions().getTransportIn().getReceiver().destroy();

                                }catch(RemoteException fault) {

                                                fault.printStackTrace();

                                } finally {

                                                if(stub!=null) {

                                                                try{

                                                                stub._getServiceClient().cleanupTransport();                                   

                                                                }catch(AxisFault fault) {

                                                                                // Nothing need to be done

                                                                }

                                                }

                                }

                }

}

 

Could please help how to do the clean of “response stream” after getting the reponse.

 

References followed:

http://axis.apache.org/axis2/java/core/docs/adv-userguide.html

http://amilachinthaka.blogspot.in/2010/01/improving-axis2-http-transport-client.html

 


--
Ashish Soni
Bangalore(Karnataka)- 560076

"A dream becomes a goal when action is taken toward its achievement."