Hi
A few cosmetic issues:
- System.out in a unit test
- Spelling in the WARN log" exculed by the MinaPayloadHold"
Should be excluded and ...holder
A side note: What about William Tam's new header stuff? Can't it be used to
exclude the headers not supported? Maybe it's to confusing to use ;)
Med venlig hilsen
Claus Ibsen
......................................
Silverbullet
Skovsgårdsvænget 21
8362 Hørning
Tlf. +45 2962 7576
Web: www.silverbullet.dk
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Sent: 2. september 2008 11:58
To: [EMAIL PROTECTED]
Subject: svn commit: r691178 - in
/activemq/camel/trunk/components/camel-mina/src:
main/java/org/apache/camel/component/mina/
test/java/org/apache/camel/component/mina/
Author: ningjiang
Date: Tue Sep 2 02:58:23 2008
New Revision: 691178
URL: http://svn.apache.org/viewvc?rev=691178&view=rev
Log:
CAMEL-874 Add seralizable checking on the MinaPayloadHolder to make sure the
MinaPayloadHolder can be seralized by Mina
Modified:
activemq/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java
activemq/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHolder.java
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTransferExchangeOptionTest.java
Modified:
activemq/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java?rev=691178&r1=691177&r2=691178&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java
(original)
+++
activemq/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java
Tue Sep 2 02:58:23 2008
@@ -109,14 +109,15 @@
} else {
body = MinaPayloadHelper.getIn(endpoint, exchange);
}
- boolean failed = exchange.isFailed();
- if (!endpoint.isTransferExchange() && failed) {
+ boolean failed = exchange.isFailed();
+ if (failed && !endpoint.isTransferExchange()) {
if (exchange.getException() != null) {
body = exchange.getException();
} else {
body = exchange.getFault().getBody();
}
}
+
if (body == null) {
// must close session if no data to write otherwise client
will never receive a response
// and wait forever (if not timing out)
Modified:
activemq/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHolder.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHolder.java?rev=691178&r1=691177&r2=691178&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHolder.java
(original)
+++
activemq/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHolder.java
Tue Sep 2 02:58:23 2008
@@ -19,8 +19,11 @@
import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Set;
import org.apache.camel.Exchange;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
/**
* Holder object for sending an exchange over the wire using the MINA
ObjectSerializationCodecFactory codec.
@@ -43,6 +46,7 @@
*/
public class MinaPayloadHolder implements Serializable {
private static final long serialVersionUID = 1L;
+ private static final transient Log LOG =
LogFactory.getLog(MinaPayloadHolder.class);
private Object inBody;
private Object outBody;
@@ -55,6 +59,7 @@
/**
* Creates a payload object with the information from the given exchange.
+ * Only marshal the Serializable object
*
* @param exchange the exchange
* @return the holder object with information copied form the exchange
@@ -62,17 +67,17 @@
public static MinaPayloadHolder marshal(Exchange exchange) {
MinaPayloadHolder payload = new MinaPayloadHolder();
- payload.inBody = exchange.getIn().getBody();
+ payload.inBody = checkSerializableObject(exchange.getIn().getBody());
if (exchange.getOut(false) != null) {
- payload.outBody = exchange.getOut().getBody();
+ payload.outBody =
checkSerializableObject(exchange.getOut().getBody());
}
- payload.inHeaders.putAll(exchange.getIn().getHeaders());
- payload.outHeaders.putAll(exchange.getOut().getHeaders());
- payload.properties.putAll(exchange.getProperties());
+
payload.inHeaders.putAll(checkMapSerializableObjects(exchange.getIn().getHeaders()));
+
payload.outHeaders.putAll(checkMapSerializableObjects(exchange.getOut().getHeaders()));
+
payload.properties.putAll(checkMapSerializableObjects(exchange.getProperties()));
payload.exception = exchange.getException();
if (exchange.getFault(false) != null) {
payload.faultBody = exchange.getFault().getBody();
- payload.faultHeaders.putAll(exchange.getFault().getHeaders());
+
payload.faultHeaders.putAll(checkMapSerializableObjects(exchange.getFault().getHeaders()));
}
return payload;
@@ -105,4 +110,33 @@
+ faultHeaders + ", properties=" + properties + ", exception="
+ exception + '}';
}
+ private static Object checkSerializableObject(Object object) {
+ if (object instanceof Serializable) {
+ return object;
+ } else {
+ LOG.warn("Object " + object + " can't be serialized, it will be exculed
by the MinaPayloadHold");
+ return null;
+ }
+ }
+
+ private static Map<String, Object> checkMapSerializableObjects(Map<String,
Object> map) {
+ if (map == null) {
+ return null;
+ }
+ Set<String> keys = map.keySet();
+ Map<String, Object> result = new LinkedHashMap<String, Object>();
+ for (String key : keys) {
+ Object object = map.get(key);
+ if (object instanceof Serializable) {
+ result.put(key, object);
+ } else {
+ LOG.warn("Object " + object + " of key " + key
+ + " can't be serialized, it will be exculed by the
MinaPayloadHold");
+ }
+ }
+ return result;
+
+ }
+
+
}
Modified:
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTransferExchangeOptionTest.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTransferExchangeOptionTest.java?rev=691178&r1=691177&r2=691178&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTransferExchangeOptionTest.java
(original)
+++
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTransferExchangeOptionTest.java
Tue Sep 2 02:58:23 2008
@@ -16,6 +16,8 @@
*/
package org.apache.camel.component.mina;
+import java.nio.charset.Charset;
+
import junit.framework.Assert;
import org.apache.camel.ContextTestSupport;
@@ -71,7 +73,7 @@
assertEquals("cheddar", out.getHeader("cheese"));
} else {
Message fault = exchange.getFault();
- assertNotNull(fault);
+ assertNotNull(fault.getBody());
assertTrue("Should get the InterrupteException exception",
fault.getBody() instanceof InterruptedException);
assertEquals("nihao", fault.getHeader("hello"));
}
@@ -84,6 +86,7 @@
assertEquals("feta", in.getHeader("cheese"));
// however the shared properties have changed
assertEquals("fresh", exchange.getProperty("salami"));
+ assertNull(exchange.getProperty("Charset"));
}
protected RouteBuilder createRouteBuilder() {
@@ -108,6 +111,7 @@
e.getOut().setHeader("cheese", "cheddar");
}
e.setProperty("salami", "fresh");
+ e.setProperty("Charset", Charset.defaultCharset());
}
});
}