Author: davsclaus Date: Sat Jun 4 09:09:26 2011 New Revision: 1131354 URL: http://svn.apache.org/viewvc?rev=1131354&view=rev Log: CAMEL-2525: Fixed issue with setting content-type with camel-ahc when running in osgi. Added more TRACE logging.
Modified: camel/trunk/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/DefaultAhcBinding.java camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java Modified: camel/trunk/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/DefaultAhcBinding.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/DefaultAhcBinding.java?rev=1131354&r1=1131353&r2=1131354&view=diff ============================================================================== --- camel/trunk/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/DefaultAhcBinding.java (original) +++ camel/trunk/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/DefaultAhcBinding.java Sat Jun 4 09:09:26 2011 @@ -46,12 +46,13 @@ import org.apache.camel.converter.IOConv import org.apache.camel.spi.HeaderFilterStrategy; import org.apache.camel.util.ExchangeHelper; import org.apache.camel.util.IOHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -/** - * - */ public class DefaultAhcBinding implements AhcBinding { + protected final transient Logger log = LoggerFactory.getLogger(this.getClass()); + @Override public Request prepareRequest(AhcEndpoint endpoint, Exchange exchange) throws CamelExchangeException { if (endpoint.isBridgeEndpoint()) { @@ -60,11 +61,15 @@ public class DefaultAhcBinding implement RequestBuilder builder = new RequestBuilder(); try { - builder.setUrl(AhcHelper.createURL(exchange, endpoint)); + String url = AhcHelper.createURL(exchange, endpoint); + log.trace("Setting url {}", url); + builder.setUrl(url); } catch (URISyntaxException e) { throw new CamelExchangeException("Error creating URL", exchange, e); } - builder.setMethod(extractMethod(exchange)); + String method = extractMethod(exchange); + log.trace("Setting method {}", method); + builder.setMethod(method); populateHeaders(builder, endpoint, exchange); populateBody(builder, endpoint, exchange); @@ -91,6 +96,7 @@ public class DefaultAhcBinding implement for (Map.Entry<String, Object> entry : exchange.getIn().getHeaders().entrySet()) { String headerValue = exchange.getIn().getHeader(entry.getKey(), String.class); if (strategy != null && !strategy.applyFilterToCamelHeaders(entry.getKey(), headerValue, exchange)) { + log.trace("Adding header {} = {}", entry.getKey(), headerValue); builder.addHeader(entry.getKey(), headerValue); } } @@ -104,6 +110,7 @@ public class DefaultAhcBinding implement String contentType = ExchangeHelper.getContentType(exchange); BodyGenerator body = in.getBody(BodyGenerator.class); + String charset = IOConverter.getCharsetName(exchange, false); if (body == null) { try { @@ -129,7 +136,6 @@ public class DefaultAhcBinding implement // so we only do an instanceof check and accept String if the body is really a String // do not fallback to use the default charset as it can influence the request // (for example application/x-www-form-urlencoded forms being sent) - String charset = IOConverter.getCharsetName(exchange, false); if (charset != null) { body = new ByteArrayBodyGenerator(((String) data).getBytes(charset)); } else { @@ -150,12 +156,18 @@ public class DefaultAhcBinding implement } } - if (contentType != null) { - builder.setHeader(Exchange.CONTENT_TYPE, contentType); - } if (body != null) { + log.trace("Setting body {}", body); builder.setBody(body); } + if (charset != null) { + log.trace("Setting body charset {}", charset); + builder.setBodyEncoding(charset); + } + // must set content type, even if its null, otherwise it may default to + // application/x-www-form-urlencoded which may not be your intention + log.trace("Setting Content-Type {}", contentType); + builder.setHeader(Exchange.CONTENT_TYPE, contentType); } @Override 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=1131354&r1=1131353&r2=1131354&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 Sat Jun 4 09:09:26 2011 @@ -24,7 +24,6 @@ import java.io.Serializable; import java.net.URLDecoder; import java.util.Enumeration; import java.util.Map; - import javax.activation.DataHandler; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; @@ -43,6 +42,8 @@ import org.apache.camel.spi.HeaderFilter import org.apache.camel.util.IOHelper; import org.apache.camel.util.MessageHelper; import org.apache.camel.util.ObjectHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Binding between {@link HttpMessage} and {@link HttpServletResponse}. @@ -51,6 +52,7 @@ import org.apache.camel.util.ObjectHelpe */ public class DefaultHttpBinding implements HttpBinding { + private static final transient Logger LOG = LoggerFactory.getLogger(DefaultHttpBinding.class); private boolean useReaderForPayload; private HeaderFilterStrategy headerFilterStrategy = new HttpHeaderFilterStrategy(); private HttpEndpoint endpoint; @@ -70,6 +72,7 @@ public class DefaultHttpBinding implemen } public void readRequest(HttpServletRequest request, HttpMessage message) { + LOG.trace("readRequest {}", request); // lets force a parse of the body and headers message.getBody(); @@ -116,6 +119,15 @@ public class DefaultHttpBinding implemen headers.put(Exchange.HTTP_PATH, request.getPathInfo()); headers.put(Exchange.CONTENT_TYPE, request.getContentType()); + if (LOG.isTraceEnabled()) { + LOG.trace("HTTP method {}", request.getMethod()); + LOG.trace("HTTP query {}", request.getQueryString()); + LOG.trace("HTTP url {}", request.getRequestURL()); + LOG.trace("HTTP uri {}", request.getRequestURI()); + LOG.trace("HTTP path {}", request.getPathInfo()); + LOG.trace("HTTP content-type {}", request.getContentType()); + } + // if content type is serialized java object, then de-serialize it to a Java object if (request.getContentType() != null && HttpConstants.CONTENT_TYPE_JAVA_SERIALIZED_OBJECT.equals(request.getContentType())) { try { @@ -139,11 +151,14 @@ public class DefaultHttpBinding implemen while (names.hasMoreElements()) { String name = (String)names.nextElement(); Object value = request.getParameter(name); + LOG.trace("HTTP header {} = {}", name, value); if (headerFilterStrategy != null && !headerFilterStrategy.applyFilterToExternalHeaders(name, value, message.getExchange())) { headers.put(name, value); } } + + LOG.trace("HTTP method {} with Content-Type {}", request.getMethod(), request.getContentType()); if (request.getMethod().equals("POST") && request.getContentType() != null && request.getContentType().startsWith(HttpConstants.CONTENT_TYPE_WWW_FORM_URLENCODED)) { @@ -175,6 +190,7 @@ public class DefaultHttpBinding implemen while (names.hasMoreElements()) { String name = (String) names.nextElement(); Object object = request.getAttribute(name); + LOG.trace("HTTP attachment {} = {}", name, object); if (object instanceof File) { String fileName = request.getParameter(name); message.addAttachment(fileName, new DataHandler(new CamelFileDataSource((File)object, fileName)));