Repository: camel
Updated Branches:
  refs/heads/master 7c0eb6d5f -> bb24b663c


CAMEL-10399 camel-jetty - consumer should not load attachment payload


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/bb24b663
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/bb24b663
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/bb24b663

Branch: refs/heads/master
Commit: bb24b663caf901cba9134b7abbbd7b38b6fa2c8b
Parents: 7c0eb6d
Author: Tomohisa Igarashi <tm.igara...@gmail.com>
Authored: Thu Oct 27 00:08:03 2016 +0900
Committer: Tomohisa Igarashi <tm.igara...@gmail.com>
Committed: Thu Oct 27 00:32:02 2016 +0900

----------------------------------------------------------------------
 .../component/jetty9/AttachmentHttpBinding.java | 42 ++++++++++++++++++++
 .../component/jetty/MultiPartFormTest.java      |  6 +++
 2 files changed, 48 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/bb24b663/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/AttachmentHttpBinding.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/AttachmentHttpBinding.java
 
b/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/AttachmentHttpBinding.java
index 293dd70..7c51839 100644
--- 
a/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/AttachmentHttpBinding.java
+++ 
b/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/AttachmentHttpBinding.java
@@ -20,6 +20,10 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Map;
+
+import javax.activation.DataHandler;
 import javax.activation.DataSource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.Part;
@@ -27,9 +31,12 @@ import javax.servlet.http.Part;
 import org.apache.camel.Attachment;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.http.common.DefaultHttpBinding;
+import org.apache.camel.http.common.HttpHelper;
 import org.apache.camel.http.common.HttpMessage;
 import org.apache.camel.impl.DefaultAttachment;
 import org.eclipse.jetty.util.MultiPartInputStreamParser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * To handle attachments with Jetty 9.
@@ -37,6 +44,7 @@ import org.eclipse.jetty.util.MultiPartInputStreamParser;
  * This implementation is needed to deal with attachments when using Jetty 9.
  */
 final class AttachmentHttpBinding extends DefaultHttpBinding {
+    private static final Logger LOG = 
LoggerFactory.getLogger(AttachmentHttpBinding.class);
 
     AttachmentHttpBinding() {
     }
@@ -64,6 +72,40 @@ final class AttachmentHttpBinding extends DefaultHttpBinding 
{
             }
         }
     }
+
+    protected void populateRequestParameters(HttpServletRequest request, 
HttpMessage message) throws Exception {
+        //we populate the http request parameters without checking the request 
method
+        Map<String, Object> headers = message.getHeaders();
+        Enumeration<?> names = request.getParameterNames();
+        while (names.hasMoreElements()) {
+            String name = (String)names.nextElement();
+            if (message.getAttachment(name) != null) {
+                DataHandler dh = message.getAttachment(name);
+                Object value = dh;
+                if (dh.getContentType() == null || 
dh.getContentType().startsWith("text/plain")) {
+                    value = request.getParameter(name);
+                }
+                if (getHeaderFilterStrategy() != null
+                    && 
!getHeaderFilterStrategy().applyFilterToExternalHeaders(name, value, 
message.getExchange())) {
+                    HttpHelper.appendHeader(headers, name, value);
+                }
+                continue;
+            }
+
+            // there may be multiple values for the same name
+            String[] values = request.getParameterValues(name);
+            LOG.trace("HTTP parameter {} = {}", name, values);
+
+            if (values != null) {
+                for (String value : values) {
+                    if (getHeaderFilterStrategy() != null
+                        && 
!getHeaderFilterStrategy().applyFilterToExternalHeaders(name, value, 
message.getExchange())) {
+                        HttpHelper.appendHeader(headers, name, value);
+                    }
+                }
+            }
+        }
+    }
     
     final class PartDataSource implements DataSource {
         private final Part part;

http://git-wip-us.apache.org/repos/asf/camel/blob/bb24b663/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java
 
b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java
index 407cb47..715207d 100644
--- 
a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java
+++ 
b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java
@@ -102,6 +102,12 @@ public class MultiPartFormTest extends BaseJettyTest {
 
                         // The other form date can be get from the message
                         // header
+
+                        // For binary attachment, header should also be 
populated by DataHandler but not payload
+                        Object header = in.getHeader("NOTICE.txt");
+                        assertEquals(DataHandler.class, header.getClass());
+                        assertEquals(data, header);
+
                         exchange.getOut().setBody(in.getHeader("comment"));
                     }
 

Reply via email to