Author: davsclaus
Date: Fri Sep 11 08:30:41 2009
New Revision: 813717
URL: http://svn.apache.org/viewvc?rev=813717&view=rev
Log:
CAMEL-1995: Streams are by default not logged to avoid causing the stream to be
read and then later not possible to read it again. There is a flag to control
this behavior on camel context properties. Fixed CS.
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/LogDebugBodyStreamsTest.java
- copied, changed from r813675,
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/LogDebugBodyMaxCharsTest.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
camel/trunk/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextStopFailureTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierServiceStoppingFailedEventTest.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java?rev=813717&r1=813716&r2=813717&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
(original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java Fri Sep
11 08:30:41 2009
@@ -81,6 +81,7 @@
String INTERCEPTED_ENDPOINT = "CamelInterceptedEndpoint";
String LOG_DEBUG_BODY_MAX_CHARS = "CamelLogDebugBodyMaxChars";
+ String LOG_DEBUG_BODY_STREAMS = "CamelLogDebugStreams";
String LOOP_INDEX = "CamelLoopIndex";
String LOOP_SIZE = "CamelLoopSize";
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java?rev=813717&r1=813716&r2=813717&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
Fri Sep 11 08:30:41 2009
@@ -16,9 +16,17 @@
*/
package org.apache.camel.util;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+import javax.xml.transform.stream.StreamSource;
+
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.StreamCache;
+import org.apache.camel.converter.jaxp.BytesSource;
+import org.apache.camel.converter.jaxp.StringSource;
/**
* Some helper methods when working with {...@link org.apache.camel.Message}.
@@ -123,6 +131,34 @@
* @return the logging message
*/
public static String extractBodyForLogging(Message message) {
+ Object obj = message.getBody();
+ if (obj == null) {
+ return "Message: [Body is null]";
+ }
+
+ // do not log streams by default
+ boolean streams = false;
+ if (message.getExchange() != null) {
+ String property =
message.getExchange().getContext().getProperties().get(Exchange.LOG_DEBUG_BODY_STREAMS);
+ if (property != null) {
+ streams =
message.getExchange().getContext().getTypeConverter().convertTo(Boolean.class,
property);
+ }
+ }
+
+ if (obj instanceof StringSource || obj instanceof BytesSource) {
+ // these two are okay
+ } else if (!streams && obj instanceof StreamSource) {
+ return "Message: [Body is instance of
java.xml.transform.StreamSource]";
+ } else if (!streams && obj instanceof InputStream) {
+ return "Message: [Body is instance of java.io.InputStream]";
+ } else if (!streams && obj instanceof OutputStream) {
+ return "Message: [Body is instance of java.io.OutputStream]";
+ } else if (!streams && obj instanceof Reader) {
+ return "Message: [Body is instance of java.io.Reader]";
+ } else if (!streams && obj instanceof Writer) {
+ return "Message: [Body is instance of java.io.Writer]";
+ }
+
// default to 1000 chars
int length = 1000;
@@ -133,11 +169,6 @@
}
}
- Object obj = message.getBody();
- if (obj == null) {
- return "Message: [Body is null]";
- }
-
String body = obj.toString();
if (body == null) {
return "Message: [Body is null]";
@@ -150,4 +181,5 @@
return "Message: " + body;
}
+
}
Modified:
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextStopFailureTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextStopFailureTest.java?rev=813717&r1=813716&r2=813717&view=diff
==============================================================================
---
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextStopFailureTest.java
(original)
+++
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextStopFailureTest.java
Fri Sep 11 08:30:41 2009
@@ -44,7 +44,7 @@
assertEquals("CBA", stopOrder);
}
- private class MyService implements Service {
+ private final class MyService implements Service {
private String name;
private boolean fail;
Copied:
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/LogDebugBodyStreamsTest.java
(from r813675,
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/LogDebugBodyMaxCharsTest.java)
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/LogDebugBodyStreamsTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/impl/LogDebugBodyStreamsTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/impl/LogDebugBodyMaxCharsTest.java&r1=813675&r2=813717&rev=813717&view=diff
==============================================================================
---
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/LogDebugBodyMaxCharsTest.java
(original)
+++
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/LogDebugBodyStreamsTest.java
Fri Sep 11 08:30:41 2009
@@ -16,30 +16,41 @@
*/
package org.apache.camel.impl;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
import org.apache.camel.ContextTestSupport;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.converter.jaxp.StringSource;
/**
* @version $Revision$
*/
-public class LogDebugBodyMaxCharsTest extends ContextTestSupport {
+public class LogDebugBodyStreamsTest extends ContextTestSupport {
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- context.getProperties().put(Exchange.LOG_DEBUG_BODY_MAX_CHARS, "20");
+ public void testLogBodyStreamStringSourceDisabled() throws Exception {
+ context.getProperties().put(Exchange.LOG_DEBUG_BODY_STREAMS, "false");
+
+ StringSource body = new StringSource("<?xml
version=\"1.0\"?><person><name>Claus</name></person>");
+
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+
+ template.sendBody("direct:start", body);
+
+ assertMockEndpointsSatisfied();
+
+ // should be logged anyway
+ String msg = mock.getReceivedExchanges().get(0).getIn().toString();
+ assertEquals("Message: StringSource[<?xml
version=\"1.0\"?><person><name>Claus</name></person>]", msg);
}
- public void testLogBodyMaxLengthTest() throws Exception {
- // create a big body
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < 1000; i++) {
- int value = i % 10;
- sb.append(value);
- }
- String body = sb.toString();
+ public void testLogBodyStreamStringSourceDisabledByDefault() throws
Exception {
+ context.getProperties().remove(Exchange.LOG_DEBUG_BODY_STREAMS);
+
+ StringSource body = new StringSource("<?xml
version=\"1.0\"?><person><name>Claus</name></person>");
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedMessageCount(1);
@@ -48,28 +59,78 @@
assertMockEndpointsSatisfied();
- // should be clipped after 20 chars
+ // should be logged anyway
String msg = mock.getReceivedExchanges().get(0).getIn().toString();
- assertEquals("Message: 01234567890123456789... [Body clipped after 20
chars, total length is 1000]", msg);
+ assertEquals("Message: StringSource[<?xml
version=\"1.0\"?><person><name>Claus</name></person>]", msg);
+ }
+
+ public void testLogBodyStreamStringSourceEnabled() throws Exception {
+ context.getProperties().put(Exchange.LOG_DEBUG_BODY_STREAMS, "true");
+
+ StringSource body = new StringSource("<?xml
version=\"1.0\"?><person><name>Claus</name></person>");
+
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
- // but body and clipped should not be the same
- assertNotSame("clipped log and real body should not be the same", msg,
mock.getReceivedExchanges().get(0).getIn().getBody(String.class));
+ template.sendBody("direct:start", body);
+
+ assertMockEndpointsSatisfied();
+
+ // should be logged anyway
+ String msg = mock.getReceivedExchanges().get(0).getIn().toString();
+ assertEquals("Message: StringSource[<?xml
version=\"1.0\"?><person><name>Claus</name></person>]", msg);
}
- public void tesNotClipped() throws Exception {
+ public void testLogBodyStreamDisabled() throws Exception {
+ context.getProperties().put(Exchange.LOG_DEBUG_BODY_STREAMS, "false");
+
+ InputStream body = new ByteArrayInputStream("Hello World".getBytes());
+
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedMessageCount(1);
- template.sendBody("direct:start", "1234567890");
+ template.sendBody("direct:start", body);
+
+ assertMockEndpointsSatisfied();
+
+ // should NOT be logged
+ String msg = mock.getReceivedExchanges().get(0).getIn().toString();
+ assertEquals("Message: [Body is instance of java.io.InputStream]",
msg);
+ }
+
+ public void testLogBodyStreamDisabledByDefault() throws Exception {
+ context.getProperties().remove(Exchange.LOG_DEBUG_BODY_STREAMS);
+
+ InputStream body = new ByteArrayInputStream("Hello World".getBytes());
+
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+
+ template.sendBody("direct:start", body);
assertMockEndpointsSatisfied();
- // should be clipped after 20 chars
+ // should NOT be logged
String msg = mock.getReceivedExchanges().get(0).getIn().toString();
- assertEquals("Message: 01234567890", msg);
+ assertEquals("Message: [Body is instance of java.io.InputStream]",
msg);
+ }
+
+ public void testLogBodyStreamEnabled() throws Exception {
+ context.getProperties().put(Exchange.LOG_DEBUG_BODY_STREAMS, "true");
+
+ InputStream body = new ByteArrayInputStream("Hello World".getBytes());
+
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+
+ template.sendBody("direct:start", body);
- // but body and clipped should not be the same
- assertNotSame("clipped log and real body should not be the same", msg,
mock.getReceivedExchanges().get(0).getIn().getBody(String.class));
+ assertMockEndpointsSatisfied();
+
+ // should be logged
+ String msg = mock.getReceivedExchanges().get(0).getIn().toString();
+ assertNotSame("Message: [Body is instance of java.io.InputStream]",
msg);
+ assertIsInstanceOf(InputStream.class,
mock.getReceivedExchanges().get(0).getIn().getBody());
}
@Override
@@ -81,4 +142,4 @@
}
};
}
-}
+}
\ No newline at end of file
Modified:
camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierServiceStoppingFailedEventTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierServiceStoppingFailedEventTest.java?rev=813717&r1=813716&r2=813717&view=diff
==============================================================================
---
camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierServiceStoppingFailedEventTest.java
(original)
+++
camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierServiceStoppingFailedEventTest.java
Fri Sep 11 08:30:41 2009
@@ -82,7 +82,7 @@
assertEquals("Failure to stop service: B due to Fail B",
event.toString());
}
- private class MyService implements Service {
+ private final class MyService implements Service {
private String name;
private boolean fail;