Uploaded image for project: 'Axis2'
  1. Axis2
  2. AXIS2-3141

Can't use SSL with scope="transportsession"

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Blocker
    • Resolution: Fixed
    • 1.2, 1.3
    • None
    • None
    • None
    • Windows XP Professional, Java 1.4.2_03 and 1.5.0_06, Tomcat 4.1.30, Axis2 1.3 and 1.2.

    Description

      When I try to invoke my service via https, Axis2 1.3 throws a
      NullPointerException (though it works fine via http):

      java.lang.NullPointerException
      at org.apache.axis2.engine.DispatchPhase.fillContextsFromSessionContext(DispatchPhase.java:227)
      at org.apache.axis2.engine.DispatchPhase.loadContexts(DispatchPhase.java:156)
      at org.apache.axis2.engine.DispatchPhase.checkPostConditions(DispatchPhase.java:95)
      at org.apache.axis2.engine.Phase.invoke(Phase.java:308)
      at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:212)
      at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:132)
      at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
      at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:120)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:716)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
      at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
      at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
      at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
      at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:199)
      at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
      at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
      at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
      at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
      at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
      at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
      at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
      at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
      at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
      at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
      at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
      at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
      at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
      at java.lang.Thread.run(Unknown Source)

      Here's the stack trace if I use Axis2 1.2:

      Caused by: java.lang.NullPointerException
      at org.apache.axis2.engine.InstanceDispatcher.fillContextsFromSessionContext(InstanceDispatcher.java:123)
      at org.apache.axis2.engine.InstanceDispatcher.invoke(InstanceDispatcher.java:70)
      at org.apache.axis2.engine.Phase.invoke(Phase.java:383)
      at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:203)
      at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:131)
      at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:279)
      at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:116)
      ... 33 more

      I think I found what's causing it. My service is defined like this in
      services.xml:
      <service name="..." scope="transportsession">...</service>

      If I remove 'scope="transportsession"', Axis2 no longer throws this
      Exception, and my own code is invoked (though it causes my code to fail,
      since mc.getSessionContext() returns null).

      Is there any reason why 'scope="transportsession"' would work via http
      but not https?

      I get the same error with version-1.3.aar in Axis2 1.3 and version.aar in Axis2 1.2 if I change the first line of its services.xml to this:
      <service name="Version" scope="transportsession">

      I modified my axis2.xml, uncommenting this section:
      <transportReceiver name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLListener">...
      Is that necessary? I thought that SSL was controlled entirely by the servlet container in Axis1. Has that changed in Axis2?

      After that, I got this:
      java.lang.UnsupportedClassVersionError: org/apache/http/impl/nio/reactor/SSLIOSessionHandler (Unsupported major.minor version 49.0)
      I tried temporarily switching to jre1.5.0_06. Is that necessary? I thought Axis2 was compatible with Java 1.4.

      After that, I no longer get the NullPointerException immediately.

      However, that doesn't fix the real problem. This method for retrieving the SessionContext ends up returning null when the service is invoked via https (though it works fine via http):
      SessionContext getSession()
      {
      MessageContext mc = MessageContext.getCurrentMessageContext();
      Options o;

      o = mc.getOptions();
      if (o == null)

      { o = new Options(); mc.setOptions(o); }

      o.setManageSession(true);

      return mc.getSessionContext();
      }

      Attachments

        1. httpsaxis2v1.2.patch
          2 kB
          epepep

        Activity

          People

            deepal Deepal Jayasinghe
            amartin Andrew Martin
            Votes:
            6 Vote for this issue
            Watchers:
            11 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: