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

DocLiteralInInterceptor throws NPE if oneWay operation sends non-empty response

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • None
    • 2.4.8, 2.5.4, 2.6.1
    • None
    • None
    • Unknown

    Description

      Hi,

      Test case: Web service provides oneWay operation (SoapUI mock), but sends non-empty SOAP response back
      Expected: response will be ignored
      Actual: DocLiteralInInterceptor throws NPE
      Caused by: java.lang.NullPointerException
      at org.apache.cxf.interceptor.DocLiteralInInterceptor.shouldWrapParameters(DocLiteralInInterceptor.java:292)
      at org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:103)
      at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
      at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:799)
      at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1627)
      at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1494)
      at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1402)
      at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
      at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:649)
      at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSende
      rInterceptor.java:62)

      Fix proposal: I have discovered (thanks Aki!) that there are some cases when oneWay response can be proceeded. Regarding Basic Profile 1.1:
      R2714 For one-way operations, an HTTP Response MESSAGE MAY contain an envelope.
      One-way operations typically do not produce SOAP responses. However, some INSTANCEs may choose to communicate infrastructure-related faults (e.g. MustUnderstand, VersionMismatch) in the HTTP Response message.
      In addition to this, the use of some protocol extensions (e.g.
      WS-ReliableMessaging) may create the possibility for non-empty responses to one-way messages. For these reasons the Basic Profile 1.1 requirement that the HTTP Response message not contain a SOAP envelope has been relaxed.

      I would propose to process successful oneWay responses only in following cases:
      A) if RM is active (check RMMessageConstants.RM_PROPERTIES_OUTBOUND, RMMessageConstants.RM_PROPERTIES_INBOUND)
      B) if user activate it with org.apache.cxf.transport.processOneWayResponse property on client.

      In other case oneWay response will be ignored by client.

      Patch is attached.

      Regards,
      Andrei.

      Attachments

        1. HTTPConduit.patch
          11 kB
          Andrei Shakirin
        2. OneWayResponseProcessing.patch
          7 kB
          Andrei Shakirin
        3. OneWayResponseProcessing-fixed.patch
          10 kB
          Andrei Shakirin

        Activity

          People

            ay Akitoshi Yoshida
            ashakirin Andrei Shakirin
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: