Description
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):
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); }
2. later in org.apache.cxf.interceptor.OneWayProcessorInterceptor.handleMessage(Message):
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; }
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