Hi all,

I'm using Axis2 1.5.1 to expose a Spring bean as a web service. Everything
works pretty fine.

The client side is configured as described in:
http://amilachinthaka.blogspot.com/2009/05/improving-axis2-client-http-transport.html
and:
http://amilachinthaka.blogspot.com/2010/01/improving-axis2-http-transport-client.html

But once in a while, the client gets this exception:

java.lang.NullPointerException
        at 
org.apache.axis2.client.ServiceClient.cleanupTransport(ServiceClient.java:824)
        at 
org.apache.axis2.client.ServiceClient.createClient(ServiceClient.java:650)
        at 
org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:538)
        at 
org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:521)
        at 
org.apache.axis2.rpc.client.RPCServiceClient.invokeBlocking(RPCServiceClient.java:102)
        at 
com.linxo.services.jobs.impl.JobExplorerProxyImpl.updateJob(JobExplorerProxyImpl.java:210)
        at 
com.linxo.services.jobs.impl.JobExecutorServiceImpl.updateJob(JobExecutorServiceImpl.java:196)
        at 
com.linxo.services.sync.impl.AbstractSynchronizationJobProcessor.operationUpdate(AbstractSynchronizationJobProcessor.java:46)
        at 
com.linxo.sync.provider.AbstractProviderEngine.fireOperationUpdate(AbstractProviderEngine.java:35)
        at 
com.linxo.provider.caissedepargne.CEProviderEngine.navigateToHistory(CEProviderEngine.java:89)
        at 
com.linxo.provider.caissedepargne.CEProviderEngine.getTransactions(CEProviderEngine.java:110)
        at 
com.linxo.services.sync.impl.SynchronizeNowJobProcessor.process(SynchronizeNowJobProcessor.java:136)
        at sun.reflect.GeneratedMethodAccessor128.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at 
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
        at 
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
        at $Proxy40.process(Unknown Source)
        at 
com.linxo.services.jobs.impl.JobProcessorWrapperRunnable.invokeJobProcessor(JobProcessorWrapperRunnable.java:87)
        at 
com.linxo.services.jobs.impl.JobProcessorWrapperRunnable.run(JobProcessorWrapperRunnable.java:32)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:636)

This doesn't impact the following web service calls.

This exception occurs at the same place than one of the exceptions noted in:
https://issues.apache.org/jira/browse/AXIS2-4648
but the rest of the stack trace is different.

Do you think it could be related?
Did someone else get this exception?
Any idea of what's going on?

Here is my client code:

Initialization:
------------------
try {
      httpConnectionManager = new MultiThreadedHttpConnectionManager();
      HttpConnectionManagerParams params = new
HttpConnectionManagerParams();

params.setDefaultMaxConnectionsPerHost(configuration.getMaxConnectionsPerHost());

      httpConnectionManager.setParams(params);

      final HttpClient httpClient = new HttpClient(httpConnectionManager);
      rpcServiceClient = new RPCServiceClient();
      final Options options = rpcServiceClient.getOptions();
      final ConfigurationContext context =
rpcServiceClient.getServiceContext().getConfigurationContext();
      context.setProperty(HTTPConstants.REUSE_HTTP_CLIENT,
Constants.VALUE_TRUE);
      context.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, httpClient);
      context.setProperty(HTTPConstants.AUTO_RELEASE_CONNECTION,
Constants.VALUE_TRUE);
      final EndpointReference targetEPR
                              = new
EndpointReference(configuration.getWebServiceEndPointAddress());
      options.setTo(targetEPR);
      options.setCallTransportCleanup(true);
    } catch (AxisFault af) {
      logger.fatal("AxisFault while starting up web service client", af);
    }

At each call:
---------------------
try {
      final QName opMethodName = new
QName(configuration.getWebServiceNamespace(),
                                                       "methodName");
      final Object[] args = new Object[0];
      final Class[] returnTypes = new Class[]{ Long.class };

      final Object[] response =
rpcServiceClient.invokeBlocking(opMethodName, args,

returnTypes);
      return (Long) response[0];
    } catch (AxisFault af) {
      logger.error("AxisFault while calling methodName", af);
      throw buildException(af);
    }
    finally {
      cleanupTransport();
    }

where cleanupTransport() is:
-------------------------------------------

  private void cleanupTransport() throws MyException
  {
    try {
      rpcServiceClient.cleanupTransport();
    }
    catch(AxisFault af) {
      logger.error("AxisFault while cleaning up the transport", af);
      throw buildException(af);
    }
  }

and buildException() returns a MyException.



Thanks for your help,
Phil

Reply via email to