Hi Willem,

Attached is a patch for camel-cxf to copy all of the contents to
the new out message.

An example use case:
A processor which has to decrypt the incoming request to decide
which route should be choosen.
Later in a cxf-interceptor you don't have decrypt the message again,
but use the stored one.

All existing camel-cxf JUnit tests passes successful.

What do you think?

Thanks.

Cheers,

Marc
Index: src/main/java/org/apache/camel/component/cxf/CxfProducer.java
===================================================================
--- src/main/java/org/apache/camel/component/cxf/CxfProducer.java	(revision 638041)
+++ src/main/java/org/apache/camel/component/cxf/CxfProducer.java	(working copy)
@@ -222,7 +222,7 @@
                 	invokingContext = InvokingContextFactory.createContext(dataFormat);
                 	ex.put(InvokingContext.class, invokingContext);
                 }
-                Object params = invokingContext.getRequestContent(inMessage);
+                Map params = invokingContext.getRequestContent(inMessage);
                 // invoke the stream message with the exchange context
                 CxfClient cxfClient = (CxfClient) client;
                 // need to get the binding object to create the message
Index: src/main/java/org/apache/camel/component/cxf/invoker/CxfClient.java
===================================================================
--- src/main/java/org/apache/camel/component/cxf/invoker/CxfClient.java	(revision 638041)
+++ src/main/java/org/apache/camel/component/cxf/invoker/CxfClient.java	(working copy)
@@ -48,7 +48,7 @@
 
     }
 
-    public Object dispatch(Object params,
+    public Object dispatch(Map params,
                            Map<String, Object> context,
                            Exchange exchange) throws Exception {
 
@@ -82,7 +82,7 @@
 
     @SuppressWarnings("unchecked")
     public Object invokeWithMessageStream(BindingOperationInfo bi,
-                                          Object param,
+                                          Map param,
                                           Map<String, Object> context,
                                           InvokingContext invokingContext) throws Exception {
 
@@ -182,7 +182,7 @@
 
 
     private Message prepareMessage(Exchange exchange, Map<String, Object> requestContext,
-            Object param, InvokingContext InvokingContext) {
+            Map param, InvokingContext InvokingContext) {
 
         Message message = getEndpoint().getBinding().createMessage();
         message.put(Message.REQUESTOR_ROLE, Boolean.TRUE);
Index: src/main/java/org/apache/camel/component/cxf/invoker/PayloadInvokingContext.java
===================================================================
--- src/main/java/org/apache/camel/component/cxf/invoker/PayloadInvokingContext.java	(revision 638041)
+++ src/main/java/org/apache/camel/component/cxf/invoker/PayloadInvokingContext.java	(working copy)
@@ -18,6 +18,7 @@
 
 import java.util.List;
 import java.util.Map;
+import java.util.IdentityHashMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -34,9 +35,9 @@
 
     }
 
-    public void setRequestOutMessageContent(Message message, Object content) {
+    public void setRequestOutMessageContent(Message message, Map contents) {
 
-        PayloadMessage request = (PayloadMessage) content;
+        PayloadMessage request = (PayloadMessage)contents.get(PayloadMessage.class);
 
         Element header = request.getHeader();
         List<Element> payload = request.getPayload();
@@ -92,7 +93,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public Object getRequestContent(Message inMessage) {
+    public Map getRequestContent(Message inMessage) {
         List<Element> payload = inMessage.get(List.class);
         Element header = inMessage.get(Element.class);
 
@@ -100,7 +101,10 @@
             LOG.finest("Header = " + header + ", Payload = " + payload);
         }
 
-        return new PayloadMessage(payload, header);
+        Map contents = new IdentityHashMap();
+        contents.put(PayloadMessage.class, new PayloadMessage(payload, header));
+
+        return contents;
     }
 
 }
Index: src/main/java/org/apache/camel/component/cxf/invoker/RawMessageInvokingContext.java
===================================================================
--- src/main/java/org/apache/camel/component/cxf/invoker/RawMessageInvokingContext.java	(revision 638041)
+++ src/main/java/org/apache/camel/component/cxf/invoker/RawMessageInvokingContext.java	(working copy)
@@ -18,6 +18,9 @@
 
 import java.io.InputStream;
 import java.util.Map;
+import java.util.Set;
+import java.util.Iterator;
+import java.util.IdentityHashMap;
 import java.util.logging.Logger;
 
 import org.apache.cxf.message.Exchange;
@@ -30,8 +33,15 @@
 
     }
 
-    public void setRequestOutMessageContent(Message message, Object content) {
-        message.setContent(InputStream.class, content);
+    public void setRequestOutMessageContent(Message message, Map contents) {
+        Set entries = contents.keySet();
+        Iterator iter = entries.iterator();
+        while (iter.hasNext()){
+            Object obj = iter.next();
+            if (obj instanceof Class){
+                message.setContent((Class)obj, contents.get((Class)obj));
+            }
+        }        
     }
 
     public Object getResponseObject(Exchange exchange, Map<String, Object> responseContext) {
@@ -45,9 +55,20 @@
         //loggerTheMessage(outMessage, "Out Message");
     }
 
-    public Object getRequestContent(Message inMessage) {
+    public Map getRequestContent(Message inMessage) {
         //loggerTheMessage(inMessage, "In Message");
-        return inMessage.getContent(InputStream.class);
+
+        IdentityHashMap contents = new IdentityHashMap();
+
+        Set set = inMessage.getContentFormats();
+        Iterator iter = set.iterator();
+        while (iter.hasNext()){
+            Object obj = iter.next();
+            if (obj instanceof Class)
+                contents.put((Class)obj, inMessage.getContent((Class)obj));
+        }
+
+        return contents;
     }
 
 }
Index: src/main/java/org/apache/camel/component/cxf/invoker/InvokingContext.java
===================================================================
--- src/main/java/org/apache/camel/component/cxf/invoker/InvokingContext.java	(revision 638041)
+++ src/main/java/org/apache/camel/component/cxf/invoker/InvokingContext.java	(working copy)
@@ -29,7 +29,7 @@
      * It sets the content in the given (out) message object.
      * @param content
      */
-    void setRequestOutMessageContent(Message message, Object content);
+    void setRequestOutMessageContent(Message message, Map contents);
 
     /**
      * This method is call when the CxfClient receives a response from a CXF server and needs
@@ -54,8 +54,8 @@
      * the client and needs to extract the request content from the message.  It retreives
      * and receives the request content from the incoming message.
      * @param inMessage
-     * @return the request from client
+     * @return the request contents from client
      */
-    Object getRequestContent(Message inMessage);
+    Map getRequestContent(Message inMessage);
 
 }

Reply via email to