CAMEL-9359: DefaultExchangeHolder should be less noisty in logging. Also update javadoc about headers/properties are only primitive/string/numbers.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f1d82129 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f1d82129 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f1d82129 Branch: refs/heads/camel-2.16.x Commit: f1d82129301a9d7aa75a7f9771ddca8e3ad3336e Parents: b371be6 Author: Claus Ibsen <davscl...@apache.org> Authored: Wed Nov 25 14:33:09 2015 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed Nov 25 14:33:34 2015 +0100 ---------------------------------------------------------------------- .../camel/impl/DefaultExchangeHolder.java | 56 ++++++++++---------- 1 file changed, 27 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/f1d82129/camel-core/src/main/java/org/apache/camel/impl/DefaultExchangeHolder.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchangeHolder.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchangeHolder.java index ea9713c..a066043 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchangeHolder.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchangeHolder.java @@ -34,27 +34,31 @@ import org.slf4j.LoggerFactory; /** * Holder object for sending an exchange over a remote wire as a serialized object. * This is usually configured using the <tt>transferExchange=true</tt> option on the endpoint. - * <p/> - * Note: Message body of type {@link File} or {@link WrappedFile} is <b>not</b> supported and + * <br/> + * <b>Note:</b> Message body of type {@link File} or {@link WrappedFile} is <b>not</b> supported and * a {@link RuntimeExchangeException} is thrown. - * <p/> + * <br/> * As opposed to normal usage where only the body part of the exchange is transferred over the wire, * this holder object serializes the following fields over the wire: * <ul> * <li>exchangeId</li> * <li>in body</li> * <li>out body</li> - * <li>in headers</li> - * <li>out headers</li> * <li>fault body </li> - * <li>fault headers</li> * <li>exchange properties</li> * <li>exception</li> * </ul> + * And the following headers is transferred if their values are of primitive types, String or Number based. + * <ul> + * <li>in headers</li> + * <li>out headers</li> + * <li>fault headers</li> + * </ul> * The body is serialized and stored as serialized bytes. The header and exchange properties only include - * primitive, and String types (and Exception types for exchange properties). Any other type is skipped. - * <p/> - * Any object that is not serializable will be skipped and Camel will log this at WARN level. + * primitive, String, and Number types (and Exception types for exchange properties). Any other type is skipped. + * <br/> + * Any message body object that is not serializable will be skipped and Camel will log this at <tt>WARN</tt> level. + * And any message header values that is not a primitive value will be skipped and Camel will log this at <tt>DEBUG</tt> level. * * @version */ @@ -235,6 +239,10 @@ public class DefaultExchangeHolder implements Serializable { for (Map.Entry<String, Object> entry : map.entrySet()) { // silently skip any values which is null + if (entry.getValue() == null) { + continue; + } + Object value = getValidHeaderValue(entry.getKey(), entry.getValue()); if (value != null) { Serializable converted = exchange.getContext().getTypeConverter().convertTo(Serializable.class, exchange, value); @@ -260,6 +268,10 @@ public class DefaultExchangeHolder implements Serializable { for (Map.Entry<String, Object> entry : map.entrySet()) { // silently skip any values which is null + if (entry.getValue() == null) { + continue; + } + Object value = getValidExchangePropertyValue(entry.getKey(), entry.getValue()); if (value != null) { Serializable converted = exchange.getContext().getTypeConverter().convertTo(Serializable.class, exchange, value); @@ -347,30 +359,16 @@ public class DefaultExchangeHolder implements Serializable { } private static void logInvalidHeaderValue(String type, String key, Object value) { - if (key.startsWith("Camel")) { - // log Camel at DEBUG level - if (LOG.isDebugEnabled()) { - LOG.debug("Exchange {} containing key: {} with object: {} of type: {} is not valid header type, it will be excluded by the holder." - , new Object[]{type, key, value, ObjectHelper.classCanonicalName(value)}); - } - } else { - // log regular at WARN level - LOG.warn("Exchange {} containing key: {} with object: {} of type: {} is not valid header type, it will be excluded by the holder." - , new Object[]{type, key, value, ObjectHelper.classCanonicalName(value)}); + if (LOG.isDebugEnabled()) { + LOG.debug("Exchange {} containing key: {} with object: {} of type: {} is not valid header type, it will be excluded by the holder." + , new Object[]{type, key, value, ObjectHelper.classCanonicalName(value)}); } } private static void logInvalidExchangePropertyValue(String type, String key, Object value) { - if (key.startsWith("Camel")) { - // log Camel at DEBUG level - if (LOG.isDebugEnabled()) { - LOG.debug("Exchange {} containing key: {} with object: {} of type: {} is not valid exchange property type, it will be excluded by the holder." - , new Object[]{type, key, value, ObjectHelper.classCanonicalName(value)}); - } - } else { - // log regular at WARN level - LOG.warn("Exchange {} containing key: {} with object: {} of type: {} is not valid exchange property type, it will be excluded by the holder." - , new Object[]{type, key, value, ObjectHelper.classCanonicalName(value)}); + if (LOG.isDebugEnabled()) { + LOG.debug("Exchange {} containing key: {} with object: {} of type: {} is not valid exchange property type, it will be excluded by the holder." + , new Object[]{type, key, value, ObjectHelper.classCanonicalName(value)}); } }