Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-7653

Null pointer in JaxwsResponseCallback

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 3.0.10
    • Fix Version/s: 3.1.15, 3.2.3, 3.2.4
    • Component/s: JAX-WS Runtime
    • Labels:
      None
    • Environment:

      AIX

    • Estimated Complexity:
      Unknown

      Description

      Occasionally we'll get a null pointer in the JAXWS code.

      Caused by: java.lang.NullPointerException
      at org.apache.cxf.jaxws.JaxwsResponseCallback.get(JaxwsResponseCallback.java:49)

      When we receive a SOAP message with an empty body (example below) the (T)callback.get()[0] line in JaxwsResponseCallback throws a null pointer exception. We're still unsure why we're getting a message with an empty body in the first place, and if that's AIX related or we're just lucky in other operating systems.

      <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
         <soap:Header>
         <!-- Stuff in here that I've removed. -->
         </soap:Header>
         <soap:Body />
      </soap:Envelope>

      We did some debugging and checked where our code diverged between the two types of messages.  The below chunk of code is where it starts to unravel. 

      Code from within DocLiteralInInterceptor.java
      
      MessageContentsList parameters = new MessageContentsList();
      
      Exchange exchange = message.getExchange();
      BindingOperationInfo bop = exchange.getBindingOperationInfo();
      
      boolean client = isRequestor(message);
      
      //if body is empty and we have BindingOperationInfo, we do not need to match
      //operation anymore, just return
      if (bop != null && !StaxUtils.toNextElement(xmlReader)) {
         // body may be empty for partial response to decoupled request
         return;
      }
      ...
      // Lots of logic
      ...
      message.setContent(List.class, parameters);
      
      

      ~~~~~~~

      When we do a StaxUtils.toNextElement that returns false, as it hits the end of the body immediately. This causes it to return without setting the MessageContentsList as a list on the message. Later, when the code tries to do a .getContent(List) it doesn't find anything, and this leads to it setting null as the first element returned on callback.get()[0].

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                dkulp Daniel Kulp
                Reporter:
                NealJohnson Neal Johnson
              • Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: