Author: dkulp
Date: Thu Jan 7 14:14:50 2010
New Revision: 896888
URL: http://svn.apache.org/viewvc?rev=896888&view=rev
Log:
[CXF-2594] During unwind on faults during output, with SAAJ, we can
really fully unwind.
Modified:
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJOutInterceptor.java
cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
Modified:
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java?rev=896888&r1=896887&r2=896888&view=diff
==============================================================================
---
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
(original)
+++
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
Thu Jan 7 14:14:50 2010
@@ -76,7 +76,8 @@
public void handleMessage(SoapMessage message) {
// Yes this is ugly, but it avoids us from having to implement any
kind of caching strategy
- if (!MessageUtils.isTrue(message.get(WROTE_ENVELOPE_START))) {
+ boolean wroteStart =
MessageUtils.isTrue(message.get(WROTE_ENVELOPE_START));
+ if (!wroteStart) {
writeSoapEnvelopeStart(message);
OutputStream os = message.getContent(OutputStream.class);
Modified:
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJOutInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJOutInterceptor.java?rev=896888&r1=896887&r2=896888&view=diff
==============================================================================
---
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJOutInterceptor.java
(original)
+++
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJOutInterceptor.java
Thu Jan 7 14:14:50 2010
@@ -43,6 +43,7 @@
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.SoapVersion;
import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
+import org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor;
import org.apache.cxf.common.i18n.BundleUtils;
import org.apache.cxf.common.i18n.Message;
import org.apache.cxf.helpers.CastUtils;
@@ -147,6 +148,9 @@
@Override
public void handleFault(SoapMessage message) {
super.handleFault(message);
+ //need to clear these so the fault writing will work correctly
+ message.removeContent(SOAPMessage.class);
+ message.remove(SoapOutInterceptor.WROTE_ENVELOPE_START);
XMLStreamWriter writer =
(XMLStreamWriter)message.get(ORIGINAL_XML_WRITER);
if (writer != null) {
message.setContent(XMLStreamWriter.class, writer);
Modified:
cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java?rev=896888&r1=896887&r2=896888&view=diff
==============================================================================
---
cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java
(original)
+++
cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java
Thu Jan 7 14:14:50 2010
@@ -33,7 +33,8 @@
*
*/
public class LoggingOutInterceptor extends AbstractLoggingInterceptor {
-
+ private static final String LOG_SETUP =
LoggingOutInterceptor.class.getName() + ".log-setup";
+
public LoggingOutInterceptor(String phase) {
super(phase);
addBefore(StaxOutInterceptor.class.getName());
@@ -59,9 +60,13 @@
}
if (LOG.isLoggable(Level.INFO) || writer != null) {
// Write the output while caching it for the log message
- final CacheAndWriteOutputStream newOut = new
CacheAndWriteOutputStream(os);
- message.setContent(OutputStream.class, newOut);
- newOut.registerCallback(new LoggingCallback(message, os));
+ boolean hasLogged = message.containsKey(LOG_SETUP);
+ if (!hasLogged) {
+ message.put(LOG_SETUP, Boolean.TRUE);
+ final CacheAndWriteOutputStream newOut = new
CacheAndWriteOutputStream(os);
+ message.setContent(OutputStream.class, newOut);
+ newOut.registerCallback(new LoggingCallback(message, os));
+ }
}
}
Modified:
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java?rev=896888&r1=896887&r2=896888&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java
(original)
+++
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java
Thu Jan 7 14:14:50 2010
@@ -283,6 +283,9 @@
}
public void handleFault(SoapMessage message) {
+ if (getInvoker(message).getProtocolHandlers().isEmpty()) {
+ return;
+ }
if (getInvoker(message).isOutbound()
&& !chainAlreadyContainsSAAJ(message)) {
SAAJ_OUT.handleFault(message);
Modified:
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java?rev=896888&r1=896887&r2=896888&view=diff
==============================================================================
---
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
(original)
+++
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
Thu Jan 7 14:14:50 2010
@@ -526,8 +526,11 @@
*/
public void prepare(Message message) throws IOException {
message.put(HTTP_RESPONSE, response);
- message.setContent(OutputStream.class,
+ OutputStream os = message.getContent(OutputStream.class);
+ if (os == null) {
+ message.setContent(OutputStream.class,
new WrappedOutputStream(message, response));
+ }
}
}