CAMEL-3581 Forward http response code from CXF to Camel
git-svn-id: https://svn.apache.org/repos/asf/camel/trunk@1062776 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java
index 2782fb9..9cb3a53 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java
@@ -51,6 +51,8 @@
/**
* @version $Revision$
+ *
+ * Forwards messages from Camel to CXF and the CXF response back to Camel
*/
public class CamelDestination extends AbstractDestination implements Configurable {
protected static final String BASE_BEAN_NAME_SUFFIX = ".camel-destination";
@@ -243,6 +245,9 @@
camelExchange.getOut().getHeaders(), camelExchange);
}
+ /**
+ * Receives a response from CXF and forwards it to the camel route the request came in from
+ */
private class CamelOutputStream extends CachedOutputStream {
private Message outMessage;
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/CxfHeaderHelper.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/CxfHeaderHelper.java
index 30fddc3..69a8a49 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/CxfHeaderHelper.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/CxfHeaderHelper.java
@@ -85,9 +85,9 @@
return;
}
+ // Copy the CXF protocol headers to the camel headers
Map<String, List<String>> cxfHeaders =
CastUtils.cast((Map)message.get(Message.PROTOCOL_HEADERS));
-
if (cxfHeaders != null) {
for (Map.Entry<String, List<String>> entry : cxfHeaders.entrySet()) {
if (!strategy.applyFilterToExternalHeaders(entry.getKey(), entry.getValue(), exchange)) {
@@ -116,6 +116,13 @@
if (value != null && !strategy.applyFilterToExternalHeaders(key, value, exchange)) {
headers.put(key, value);
}
+
+ // propagate response code
+ key = Message.RESPONSE_CODE;
+ value = message.get(key);
+ if (value != null && !strategy.applyFilterToExternalHeaders(key, value, exchange)) {
+ headers.put(Exchange.HTTP_RESPONSE_CODE, value);
+ }
}
}