Author: ningjiang
Date: Mon Mar 15 13:26:49 2010
New Revision: 923216
URL: http://svn.apache.org/viewvc?rev=923216&view=rev
Log:
CAMEL-1913 supported multi-part from out of box in camel-jetty
Added:
camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java
(with props)
Modified:
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java
camel/trunk/components/camel-jetty/pom.xml
camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
Modified:
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java?rev=923216&r1=923215&r2=923216&view=diff
==============================================================================
---
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java
(original)
+++
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java
Mon Mar 15 13:26:49 2010
@@ -16,11 +16,16 @@
*/
package org.apache.camel.component.http;
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.Map;
+
+import javax.activation.DataHandler;
+import javax.activation.FileDataSource;
+import javax.activation.FileTypeMap;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -96,6 +101,18 @@ public class DefaultHttpBinding implemen
headers.put(Exchange.HTTP_PATH, request.getPathInfo());
headers.put(Exchange.CONTENT_TYPE, request.getContentType());
headers.put(Exchange.HTTP_CHARACTER_ENCODING,
request.getCharacterEncoding());
+
+ // check if there is multipart files, if so will put it into
DataHandler
+ names = request.getAttributeNames();
+ while (names.hasMoreElements()) {
+ String name = (String) names.nextElement();
+ Object object = request.getAttribute(name);
+ if (object instanceof File) {
+ String fileName = request.getParameter(name);
+ message.addAttachment(fileName, new DataHandler(new
FileDataSource((File)object),
FileTypeMap.getDefaultFileTypeMap().getContentType(fileName)));
+ }
+ }
+
}
public void writeResponse(Exchange exchange, HttpServletResponse response)
throws IOException {
Modified: camel/trunk/components/camel-jetty/pom.xml
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/pom.xml?rev=923216&r1=923215&r2=923216&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/pom.xml (original)
+++ camel/trunk/components/camel-jetty/pom.xml Mon Mar 15 13:26:49 2010
@@ -58,6 +58,11 @@
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-servlets</artifactId>
+ <version>${jetty-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-client</artifactId>
</dependency>
@@ -74,6 +79,12 @@
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpmime</artifactId>
+ <version>${httpclient4-version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient4-version}</version>
<classifier>tests</classifier>
Modified:
camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java?rev=923216&r1=923215&r2=923216&view=diff
==============================================================================
---
camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
(original)
+++
camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
Mon Mar 15 13:26:49 2010
@@ -21,6 +21,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.component.http.CamelServlet;
@@ -44,8 +45,10 @@ import org.eclipse.jetty.server.handler.
import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.eclipse.jetty.server.session.SessionHandler;
import org.eclipse.jetty.server.ssl.SslSocketConnector;
+import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.servlets.MultiPartFilter;
import org.eclipse.jetty.util.component.LifeCycle;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.eclipse.jetty.util.thread.ThreadPool;
@@ -57,6 +60,7 @@ import org.eclipse.jetty.util.thread.Thr
* @version $Revision$
*/
public class JettyHttpComponent extends HttpComponent {
+ public static final String TMP_DIR = "CamelJettyTempDir";
protected static final HashMap<String, ConnectorRef> CONNECTORS = new
HashMap<String, ConnectorRef>();
@@ -374,6 +378,15 @@ public class JettyHttpComponent extends
CamelServlet camelServlet = new CamelServlet();
ServletHolder holder = new ServletHolder();
holder.setServlet(camelServlet);
+ CamelContext camelContext = this.getCamelContext();
+ FilterHolder filterHolder = new FilterHolder();
+ filterHolder.setInitParameter("deleteFiles", "true");
+ if (camelContext.getProperties().get(TMP_DIR) != null) {
+ context.setAttribute("javax.servlet.context.tempdir",
camelContext.getProperties().get(TMP_DIR));
+ }
+ filterHolder.setFilter(new MultiPartFilter());
+ //add the default MultiPartFilter filter for it
+ context.addFilter(filterHolder, "/*", 0);
context.addServlet(holder, "/*");
return camelServlet;
Added:
camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java?rev=923216&view=auto
==============================================================================
---
camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java
(added)
+++
camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java
Mon Mar 15 13:26:49 2010
@@ -0,0 +1,90 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jetty;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.InputStream;
+
+import javax.activation.DataHandler;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.mime.MultipartEntity;
+import org.apache.http.entity.mime.content.FileBody;
+import org.apache.http.entity.mime.content.StringBody;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.junit.Test;
+
+public class MultiPartFormTest extends CamelTestSupport {
+
+ @Test
+ public void testSendMultiPartForm() throws Exception {
+ HttpClient httpclient = new DefaultHttpClient();
+
+ HttpPost httppost = new HttpPost("http://localhost:9080/test");
+
+ FileBody bin = new FileBody(new
File("src/main/resources/META-INF/NOTICE.txt"));
+ StringBody comment = new StringBody("A binary file of some kind");
+
+ MultipartEntity reqEntity = new MultipartEntity();
+ reqEntity.addPart("bin", bin);
+ reqEntity.addPart("comment", comment);
+
+ httppost.setEntity(reqEntity);
+
+ HttpResponse response = httpclient.execute(httppost);
+ HttpEntity resEntity = response.getEntity();
+
+ assertEquals("Get a wrong response status", "HTTP/1.1 200 OK",
response.getStatusLine().toString());
+ assertNotNull("resEntity should not be null", resEntity);
+
+ String result = context.getTypeConverter().convertTo(String.class,
resEntity.getContent());
+
+ assertEquals("Get a wrong result", "A binary file of some kind",
result);
+
+ }
+
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() throws Exception {
+
+ from("jetty://http://localhost:9080/test").process(new
Processor() {
+
+ public void process(Exchange exchange) throws Exception {
+ Message in = exchange.getIn();
+ assertEquals("Get a wrong attachement size", 1,
in.getAttachments().size());
+ DataHandler data = in.getAttachment("NOTICE.txt");
+ assertNotNull("Should get the DataHandle NOTICE.txt",
data);
+ assertEquals("Get a wrong content type", "text/plain",
data.getContentType());
+ exchange.getOut().setBody(in.getHeader("comment"));
+ }
+
+ });
+ }
+ };
+ }
+
+
+}
Propchange:
camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date