You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2011/10/21 11:00:31 UTC
svn commit: r1187221 - in /camel/trunk/components/camel-jetty/src:
main/java/org/apache/camel/component/jetty/JettyContentExchange.java
test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerContentTypeEncodingInQuoteTest.java
Author: davsclaus
Date: Fri Oct 21 09:00:31 2011
New Revision: 1187221
URL: http://svn.apache.org/viewvc?rev=1187221&view=rev
Log:
CAMEL-4571: Jetty producer now supports Content-Type header having quotes arond the charset value.
Added:
camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerContentTypeEncodingInQuoteTest.java (contents, props changed)
- copied, changed from r1187189, camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerPutContentTest.java
Modified:
camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java
Modified: camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java?rev=1187221&r1=1187220&r2=1187221&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java (original)
+++ camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyContentExchange.java Fri Oct 21 09:00:31 2011
@@ -28,11 +28,14 @@ import org.apache.camel.CamelExchangeExc
import org.apache.camel.Exchange;
import org.apache.camel.ExchangeTimedOutException;
import org.apache.camel.util.IOHelper;
+import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.StringHelper;
import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.client.HttpExchange;
import org.eclipse.jetty.http.HttpHeaders;
import org.eclipse.jetty.io.Buffer;
+import org.eclipse.jetty.io.ByteArrayBuffer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -65,12 +68,34 @@ public class JettyContentExchange extend
@Override
protected void onResponseHeader(Buffer name, Buffer value) throws IOException {
+ String k = name.toString();
+ String v = value.toString();
+ LOG.trace("onResponseHeader {} -> {}", k, v);
+
+ // need to remove quotes from charset which can be returned by some http servers
+ if (Exchange.CONTENT_TYPE.equalsIgnoreCase(k)) {
+ String charset = ObjectHelper.after(v, "charset=");
+ if (charset != null) {
+ charset = charset.trim();
+ String s = StringHelper.removeLeadingAndEndingQuotes(charset);
+ if (!charset.equals(s)) {
+ v = ObjectHelper.before(v, "charset=") + "charset=" + s;
+ LOG.debug("Removed quotes from charset in " + Exchange.CONTENT_TYPE + " from {} to {}", charset, s);
+
+ // use a new buffer to adjust the value
+ value = new ByteArrayBuffer.CaseInsensitive(v);
+ }
+ }
+ }
+
super.onResponseHeader(name, value);
- headers.put(name.toString(), value.toString());
+ headers.put(k, v);
}
@Override
protected void onRequestComplete() throws IOException {
+ LOG.trace("onRequestComplete");
+
// close the input stream when its not needed anymore
InputStream is = getRequestContentSource();
if (is != null) {
@@ -80,6 +105,8 @@ public class JettyContentExchange extend
@Override
protected void onResponseComplete() throws IOException {
+ LOG.trace("onResponseComplete");
+
try {
super.onResponseComplete();
} finally {
@@ -89,6 +116,8 @@ public class JettyContentExchange extend
@Override
protected void onExpire() {
+ LOG.trace("onExpire");
+
try {
super.onExpire();
} finally {
@@ -98,6 +127,8 @@ public class JettyContentExchange extend
@Override
protected void onException(Throwable ex) {
+ LOG.trace("onException {}", ex);
+
try {
super.onException(ex);
} finally {
@@ -107,6 +138,8 @@ public class JettyContentExchange extend
@Override
protected void onConnectionFailed(Throwable ex) {
+ LOG.trace("onConnectionFailed {}", ex);
+
try {
super.onConnectionFailed(ex);
} finally {
Copied: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerContentTypeEncodingInQuoteTest.java (from r1187189, camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerPutContentTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerContentTypeEncodingInQuoteTest.java?p2=camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerContentTypeEncodingInQuoteTest.java&p1=camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerPutContentTest.java&r1=1187189&r2=1187221&rev=1187221&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerPutContentTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerContentTypeEncodingInQuoteTest.java Fri Oct 21 09:00:31 2011
@@ -16,9 +16,6 @@
*/
package org.apache.camel.component.jetty.jettyproducer;
-import java.io.File;
-import java.io.InputStream;
-
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
@@ -29,10 +26,10 @@ import org.junit.Test;
/**
* @version
*/
-public class JettyHttpProducerPutContentTest extends BaseJettyTest {
+public class JettyHttpProducerContentTypeEncodingInQuoteTest extends BaseJettyTest {
@Test
- public void testHttpProducerPutContentTest() throws Exception {
+ public void testHttpProducerEncodingInQuoteTest() throws Exception {
// these tests do not run well on Windows
if (isPlatform("windows")) {
return;
@@ -43,21 +40,19 @@ public class JettyHttpProducerPutContent
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedMinimumMessageCount(1);
- mock.message(0).body().isInstanceOf(InputStream.class);
- mock.message(0).header("Content-Type").isEqualTo("image/jpeg");
- Exchange out = template.send("jetty://http://localhost:{{port}}/myapp/myservice", new Processor() {
+ Exchange out = template.send("jetty:http://localhost:{{port}}/myapp/myservice", new Processor() {
public void process(Exchange exchange) throws Exception {
- exchange.getIn().setBody(new File("src/test/data/logo.jpeg"));
- exchange.getIn().setHeader("Content-Type", "image/jpeg");
- exchange.getIn().setHeader(Exchange.HTTP_METHOD, org.apache.camel.component.http.HttpMethods.PUT);
+ exchange.getIn().setBody("Hello World");
+ exchange.getIn().setHeader("Content-Type", "text/plain; charset=\"utf-8\"");
}
});
assertMockEndpointsSatisfied();
assertEquals("OK", out.getOut().getBody(String.class));
- assertEquals("text/plain", out.getOut().getHeader("Content-Type"));
+ // camel-jetty will remove quotes from charset
+ assertEquals("text/foo; charset=utf-8", out.getOut().getHeader("Content-Type"));
}
@Override
@@ -69,12 +64,11 @@ public class JettyHttpProducerPutContent
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
String body = exchange.getIn().getBody(String.class);
- assertNotNull("Body should not be null", body);
- assertTrue("CamelHttpMethod is not PUT", exchange.getIn().getHeader("CamelHttpMethod").equals("PUT"));
- assertTrue("Content-Type is not image/jpeg", exchange.getIn().getHeader("Content-Type").equals("image/jpeg"));
+ assertEquals("Hello World", body);
+ assertTrue("Content-Type is not text/plain; charset=\"utf-8\"", exchange.getIn().getHeader("Content-Type").equals("text/plain; charset=\"utf-8\""));
}
})
- .transform(constant("OK")).setHeader("Content-Type", constant("text/plain"));
+ .transform(constant("OK")).setHeader("Content-Type", constant("text/foo; charset=\"utf-8\""));
}
};
}
Propchange: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/jettyproducer/JettyHttpProducerContentTypeEncodingInQuoteTest.java
------------------------------------------------------------------------------
svn:eol-style = native