Grzegorz Grzybek created CXF-5629:
-------------------------------------

             Summary: In robust one-way fault the fault message is written twice
                 Key: CXF-5629
                 URL: https://issues.apache.org/jira/browse/CXF-5629
             Project: CXF
          Issue Type: Bug
    Affects Versions: 3.0.0
            Reporter: Grzegorz Grzybek


I have robust one-way operation. However the resulting soap fault is not 
written to response, because the output stream is closed, as the same 
{{faultObserver}} is called twice:

1. in {{org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(Message)}}:
{code:java}
boolean isOneWay = false;
if (message.getExchange() != null) {
    if (message.getContent(Exception.class) != null) {
        message.getExchange().put(Exception.class, ex2);
    }
    isOneWay = message.getExchange().isOneWay() 
        && 
!MessageUtils.isTrue(message.getContextualProperty(Message.ROBUST_ONEWAY));
}

if (faultObserver != null && !isOneWay) {
    faultObserver.onMessage(message);
}
{code}

2. later in 
{{org.apache.cxf.interceptor.OneWayProcessorInterceptor.handleMessage(Message)}}:
{code:java}
if (message.getContent(Exception.class) != null) {
    // return the fault over the response fault channel
    MessageObserver faultObserver = chain.getFaultObserver();
    if (faultObserver != null) {
        message.getExchange().setOneWay(false);
        faultObserver.onMessage(message);
    } 
    return;
}
{code}

However, exchage is one-way only in second call, but the soap fault has no 
change to get to client (output stream is closed).

I'm working on a patch



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to