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 2015/09/25 11:12:32 UTC

[1/4] camel git commit: CAMEL-9157: JMX - Add explain to data format so we can know how exactly they are configured at runtime

Repository: camel
Updated Branches:
  refs/heads/master 1a3fa8fea -> 8ee52c744


CAMEL-9157: JMX - Add explain to data format so we can know how exactly they are configured at runtime


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f6525494
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f6525494
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f6525494

Branch: refs/heads/master
Commit: f6525494a0890a9feb6ca0107d4e1a336e5e9cb7
Parents: 1a3fa8f
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Sep 25 09:32:47 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Sep 25 09:32:47 2015 +0200

----------------------------------------------------------------------
 .../java/org/apache/camel/CamelContext.java     |   9 ++
 .../management/mbean/CamelOpenMBeanTypes.java   |  13 ++
 .../mbean/ManagedDataFormatMBean.java           |   3 +
 .../apache/camel/impl/DefaultCamelContext.java  | 153 +++++++++++++++++++
 .../org/apache/camel/impl/GzipDataFormat.java   |   8 +-
 .../camel/impl/SerializationDataFormat.java     |   8 +-
 .../org/apache/camel/impl/StringDataFormat.java |   8 +-
 .../org/apache/camel/impl/ZipDataFormat.java    |  10 +-
 .../management/mbean/ManagedDataFormat.java     |  61 +++++++-
 .../org/apache/camel/spi/DataFormatName.java    |  28 ++++
 .../camel/management/ManagedDataFormatTest.java |  19 +++
 11 files changed, 311 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/f6525494/camel-core/src/main/java/org/apache/camel/CamelContext.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/CamelContext.java b/camel-core/src/main/java/org/apache/camel/CamelContext.java
index 9a1509a..7c2840f 100644
--- a/camel-core/src/main/java/org/apache/camel/CamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/CamelContext.java
@@ -1559,6 +1559,15 @@ public interface CamelContext extends SuspendableService, RuntimeConfiguration {
     String explainComponentJson(String componentName, boolean includeAllOptions);
 
     /**
+     * Returns a JSON schema representation of the component parameters (not endpoint parameters) for the given component by its id.
+     *
+     * @param dataFormat the data format instance.
+     * @param includeAllOptions whether to include non configured options also (eg default options)
+     * @return the json
+     */
+    String explainDataFormatJson(String dataFormatName, DataFormat dataFormat, boolean includeAllOptions);
+
+    /**
      * Returns a JSON schema representation of the endpoint parameters for the given endpoint uri.
      *
      * @param uri the endpoint uri

http://git-wip-us.apache.org/repos/asf/camel/blob/f6525494/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
index 71f32f9..549a2f6 100644
--- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
+++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java
@@ -89,6 +89,19 @@ public final class CamelOpenMBeanTypes {
                                SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING});
     }
 
+    public static TabularType explainDataFormatTabularType() throws OpenDataException {
+        CompositeType ct = explainDataFormatsCompositeType();
+        return new TabularType("explainDataFormat", "Explain how this dataformat is configured", ct, new String[]{"option"});
+    }
+
+    public static CompositeType explainDataFormatsCompositeType() throws OpenDataException {
+        return new CompositeType("dataformats", "DataFormats", new String[]{"option", "kind", "label", "type", "java type", "deprecated", "value", "default value", "description"},
+                new String[]{"Option", "Kind", "Label", "Type", "Java Type", "Deprecated", "Value", "Default Value", "Description"},
+                new OpenType[]{SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING,
+                        SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING});
+    }
+
+
     public static TabularType explainEndpointTabularType() throws OpenDataException {
         CompositeType ct = explainEndpointsCompositeType();
         return new TabularType("explainEndpoint", "Explain how this endpoint is configured", ct, new String[]{"option"});

http://git-wip-us.apache.org/repos/asf/camel/blob/f6525494/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDataFormatMBean.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDataFormatMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDataFormatMBean.java
index c5ed0e0..62b33e0 100644
--- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDataFormatMBean.java
+++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDataFormatMBean.java
@@ -23,6 +23,9 @@ import org.apache.camel.api.management.ManagedOperation;
 
 public interface ManagedDataFormatMBean {
 
+    @ManagedAttribute(description = "The name of the data format")
+    String getName();
+
     @ManagedAttribute(description = "Camel ID")
     String getCamelId();
 

http://git-wip-us.apache.org/repos/asf/camel/blob/f6525494/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index 1c5227f..5d432a9 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -1639,6 +1639,159 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon
         }
     }
 
+    public String explainDataFormatJson(String dataFormatName, DataFormat dataFormat, boolean includeAllOptions) {
+        try {
+            String json = getDataFormatParameterJsonSchema(dataFormatName);
+            if (json == null) {
+                return null;
+            }
+
+            List<Map<String, String>> rows = JsonSchemaHelper.parseJsonSchema("properties", json, true);
+
+            // selected rows to use for answer
+            Map<String, String[]> selected = new LinkedHashMap<String, String[]>();
+            Map<String, String[]> dataFormatOptions = new LinkedHashMap<String, String[]>();
+
+            // extract options from the data format
+            Map<String, Object> options = new LinkedHashMap<String, Object>();
+            IntrospectionSupport.getProperties(dataFormat, options, "", false);
+
+            for (Map.Entry<String, Object> entry : options.entrySet()) {
+                String name = entry.getKey();
+                String value = "";
+                if (entry.getValue() != null) {
+                    value = entry.getValue().toString();
+                }
+                value = URISupport.sanitizePath(value);
+
+                // find type and description from the json schema
+                String type = null;
+                String kind = null;
+                String label = null;
+                String required = null;
+                String javaType = null;
+                String deprecated = null;
+                String defaultValue = null;
+                String description = null;
+                for (Map<String, String> row : rows) {
+                    if (name.equals(row.get("name"))) {
+                        type = row.get("type");
+                        kind = row.get("kind");
+                        label = row.get("label");
+                        required = row.get("required");
+                        javaType = row.get("javaType");
+                        deprecated = row.get("deprecated");
+                        defaultValue = row.get("defaultValue");
+                        description = row.get("description");
+                        break;
+                    }
+                }
+
+                // remember this option from the uri
+                dataFormatOptions.put(name, new String[]{name, kind, label, required, type, javaType, deprecated, value, defaultValue, description});
+            }
+
+            // include other rows
+            for (Map<String, String> row : rows) {
+                String name = row.get("name");
+                String kind = row.get("kind");
+                String label = row.get("label");
+                String required = row.get("required");
+                String value = row.get("value");
+                String defaultValue = row.get("defaultValue");
+                String type = row.get("type");
+                String javaType = row.get("javaType");
+                String deprecated = row.get("deprecated");
+                value = URISupport.sanitizePath(value);
+                String description = row.get("description");
+
+                boolean isDataFormatOption = dataFormatOptions.containsKey(name);
+
+                // always include from uri or path options
+                if (includeAllOptions || isDataFormatOption) {
+                    if (!selected.containsKey(name)) {
+                        // add as selected row, but take the value from uri options if it was from there
+                        if (isDataFormatOption) {
+                            selected.put(name, dataFormatOptions.get(name));
+                        } else {
+                            selected.put(name, new String[]{name, kind, label, required, type, javaType, deprecated, value, defaultValue, description});
+                        }
+                    }
+                }
+            }
+
+            json = ObjectHelper.before(json, "  \"properties\": {");
+
+            StringBuilder buffer = new StringBuilder("  \"properties\": {");
+
+            boolean first = true;
+            for (String[] row : selected.values()) {
+                if (first) {
+                    first = false;
+                } else {
+                    buffer.append(",");
+                }
+                buffer.append("\n    ");
+
+                String name = row[0];
+                String kind = row[1];
+                String label = row[2];
+                String required = row[3];
+                String type = row[4];
+                String javaType = row[5];
+                String deprecated = row[6];
+                String value = row[7];
+                String defaultValue = row[8];
+                String description = row[9];
+
+                // add json of the option
+                buffer.append(StringQuoteHelper.doubleQuote(name)).append(": { ");
+                CollectionStringBuffer csb = new CollectionStringBuffer();
+                if (kind != null) {
+                    csb.append("\"kind\": \"" + kind + "\"");
+                }
+                if (label != null) {
+                    csb.append("\"label\": \"" + label + "\"");
+                }
+                if (required != null) {
+                    csb.append("\"required\": \"" + required + "\"");
+                }
+                if (type != null) {
+                    csb.append("\"type\": \"" + type + "\"");
+                }
+                if (javaType != null) {
+                    csb.append("\"javaType\": \"" + javaType + "\"");
+                }
+                if (deprecated != null) {
+                    csb.append("\"deprecated\": \"" + deprecated + "\"");
+                }
+                if (value != null) {
+                    csb.append("\"value\": \"" + value + "\"");
+                }
+                if (defaultValue != null) {
+                    csb.append("\"defaultValue\": \"" + defaultValue + "\"");
+                }
+                if (description != null) {
+                    csb.append("\"description\": \"" + description + "\"");
+                }
+                if (!csb.isEmpty()) {
+                    buffer.append(csb.toString());
+                }
+                buffer.append(" }");
+            }
+
+            buffer.append("\n  }\n}\n");
+
+            // insert the original first part of the json into the start of the buffer
+            buffer.insert(0, json);
+            return buffer.toString();
+
+        } catch (Exception e) {
+            // ignore and return empty response
+            return null;
+        }
+    }
+
     public String explainComponentJson(String componentName, boolean includeAllOptions) {
         try {
             String json = getComponentParameterJsonSchema(componentName);

http://git-wip-us.apache.org/repos/asf/camel/blob/f6525494/camel-core/src/main/java/org/apache/camel/impl/GzipDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/GzipDataFormat.java b/camel-core/src/main/java/org/apache/camel/impl/GzipDataFormat.java
index d89460a..7770687 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/GzipDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/GzipDataFormat.java
@@ -24,13 +24,19 @@ import java.util.zip.GZIPOutputStream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.*;
 import org.apache.camel.util.IOHelper;
 
 /**
  * GZip {@link org.apache.camel.spi.DataFormat} for reading/writing data using gzip.
  */
-public class GzipDataFormat extends org.apache.camel.support.ServiceSupport implements DataFormat {
+public class GzipDataFormat extends org.apache.camel.support.ServiceSupport implements DataFormat, DataFormatName {
+
+    @Override
+    public String getDataFormatName() {
+        return "gzip";
+    }
 
     public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception {
         InputStream is = exchange.getContext().getTypeConverter().mandatoryConvertTo(InputStream.class, exchange, graph);

http://git-wip-us.apache.org/repos/asf/camel/blob/f6525494/camel-core/src/main/java/org/apache/camel/impl/SerializationDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/SerializationDataFormat.java b/camel-core/src/main/java/org/apache/camel/impl/SerializationDataFormat.java
index eb2fe24..25f313d 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/SerializationDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/SerializationDataFormat.java
@@ -24,6 +24,7 @@ import java.io.OutputStream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.util.ExchangeHelper;
 
 /**
@@ -32,7 +33,12 @@ import org.apache.camel.util.ExchangeHelper;
  *
  * @version 
  */
-public class SerializationDataFormat extends org.apache.camel.support.ServiceSupport implements DataFormat {
+public class SerializationDataFormat extends org.apache.camel.support.ServiceSupport implements DataFormat, DataFormatName {
+
+    @Override
+    public String getDataFormatName() {
+        return "serialization";
+    }
 
     public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception {
         ObjectOutput out = ExchangeHelper.convertToMandatoryType(exchange, ObjectOutput.class, stream);

http://git-wip-us.apache.org/repos/asf/camel/blob/f6525494/camel-core/src/main/java/org/apache/camel/impl/StringDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/StringDataFormat.java b/camel-core/src/main/java/org/apache/camel/impl/StringDataFormat.java
index 545c482..8003f84 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/StringDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/StringDataFormat.java
@@ -22,6 +22,7 @@ import java.io.OutputStream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.util.ExchangeHelper;
 
 /**
@@ -30,7 +31,7 @@ import org.apache.camel.util.ExchangeHelper;
  *
  * @version 
  */
-public class StringDataFormat extends org.apache.camel.support.ServiceSupport implements DataFormat {
+public class StringDataFormat extends org.apache.camel.support.ServiceSupport implements DataFormat, DataFormatName {
 
     private String charset;
 
@@ -41,6 +42,11 @@ public class StringDataFormat extends org.apache.camel.support.ServiceSupport im
         this.charset = charset;
     }
 
+    @Override
+    public String getDataFormatName() {
+        return "string";
+    }
+
     public String getCharset() {
         return charset;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/f6525494/camel-core/src/main/java/org/apache/camel/impl/ZipDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/ZipDataFormat.java b/camel-core/src/main/java/org/apache/camel/impl/ZipDataFormat.java
index daa9062..c107f3f 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/ZipDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/ZipDataFormat.java
@@ -25,13 +25,14 @@ import java.util.zip.InflaterInputStream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.util.IOHelper;
 
 /**
  * "Deflate" compression data format.
  * See {@link org.apache.camel.model.dataformat.ZipFileDataFormat} for Zip file compression.
  */
-public class ZipDataFormat extends org.apache.camel.support.ServiceSupport implements DataFormat {
+public class ZipDataFormat extends org.apache.camel.support.ServiceSupport implements DataFormat, DataFormatName {
 
     private int compressionLevel;
 
@@ -43,6 +44,11 @@ public class ZipDataFormat extends org.apache.camel.support.ServiceSupport imple
         this.compressionLevel = compressionLevel;
     }
 
+    @Override
+    public String getDataFormatName() {
+        return "zip";
+    }
+
     public int getCompressionLevel() {
         return compressionLevel;
     }
@@ -66,7 +72,7 @@ public class ZipDataFormat extends org.apache.camel.support.ServiceSupport imple
     public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
         InputStream is = exchange.getIn().getMandatoryBody(InputStream.class);
         InflaterInputStream unzipInput = new InflaterInputStream(is);
-        
+
         // Create an expandable byte array to hold the inflated data
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         try {

http://git-wip-us.apache.org/repos/asf/camel/blob/f6525494/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDataFormat.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDataFormat.java
index dcb5e09..dd4f7b9 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDataFormat.java
@@ -16,16 +16,26 @@
  */
 package org.apache.camel.management.mbean;
 
+import java.util.List;
+import java.util.Map;
+import javax.management.openmbean.CompositeData;
+import javax.management.openmbean.CompositeDataSupport;
+import javax.management.openmbean.CompositeType;
 import javax.management.openmbean.TabularData;
+import javax.management.openmbean.TabularDataSupport;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.StatefulService;
 import org.apache.camel.api.management.ManagedInstance;
 import org.apache.camel.api.management.ManagedResource;
+import org.apache.camel.api.management.mbean.CamelOpenMBeanTypes;
 import org.apache.camel.api.management.mbean.ManagedDataFormatMBean;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.spi.ManagementStrategy;
+import org.apache.camel.util.JsonSchemaHelper;
+import org.apache.camel.util.ObjectHelper;
 
 @ManagedResource(description = "Managed DataFormat")
 public class ManagedDataFormat implements ManagedInstance, ManagedDataFormatMBean {
@@ -50,6 +60,14 @@ public class ManagedDataFormat implements ManagedInstance, ManagedDataFormatMBea
     }
 
     @Override
+    public String getName() {
+        if (dataFormat instanceof DataFormatName) {
+            return ((DataFormatName) dataFormat).getDataFormatName();
+        }
+        return null;
+    }
+
+    @Override
     public String getCamelId() {
         return camelContext.getName();
     }
@@ -73,14 +91,49 @@ public class ManagedDataFormat implements ManagedInstance, ManagedDataFormatMBea
 
     @Override
     public String informationJson() {
-        // TODO: not yet implemented
-        return null;
+        String dataFormatName = getName();
+        if (dataFormatName != null) {
+            return camelContext.explainDataFormatJson(dataFormatName, dataFormat, true);
+        } else {
+            return null;
+        }
     }
 
     @Override
     public TabularData explain(boolean allOptions) {
-        // TODO: not yet implemented
-        return null;
+        String dataFormatName = getName();
+        if (dataFormatName != null) {
+            try {
+                TabularData answer = new TabularDataSupport(CamelOpenMBeanTypes.explainDataFormatTabularType());
+
+                String json = camelContext.explainDataFormatJson(dataFormatName, dataFormat, allOptions);
+                List<Map<String, String>> rows = JsonSchemaHelper.parseJsonSchema("properties", json, true);
+
+                for (Map<String, String> row : rows) {
+                    String name = row.get("name");
+                    String kind = row.get("kind");
+                    String label = row.get("label") != null ? row.get("label") : "";
+                    String type = row.get("type");
+                    String javaType = row.get("javaType");
+                    String deprecated = row.get("deprecated") != null ? row.get("deprecated") : "";
+                    String value = row.get("value") != null ? row.get("value") : "";
+                    String defaultValue = row.get("defaultValue") != null ? row.get("defaultValue") : "";
+                    String description = row.get("description") != null ? row.get("description") : "";
+
+                    CompositeType ct = CamelOpenMBeanTypes.explainDataFormatsCompositeType();
+                    CompositeData data = new CompositeDataSupport(ct,
+                            new String[]{"option", "kind", "label", "type", "java type", "deprecated", "value", "default value", "description"},
+                            new Object[]{name, kind, label, type, javaType, deprecated, value, defaultValue, description});
+                    answer.put(data);
+                }
+
+                return answer;
+            } catch (Exception e) {
+                throw ObjectHelper.wrapRuntimeCamelException(e);
+            }
+        } else {
+            return null;
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/f6525494/camel-core/src/main/java/org/apache/camel/spi/DataFormatName.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/spi/DataFormatName.java b/camel-core/src/main/java/org/apache/camel/spi/DataFormatName.java
new file mode 100644
index 0000000..1e23d3b
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/spi/DataFormatName.java
@@ -0,0 +1,28 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spi;
+
+/**
+ * The name of the {@link org.apache.camel.spi.DataFormat} which allows to know which kind of data format the implementation is.
+ */
+public interface DataFormatName {
+
+    /**
+     * The name of the data format
+     */
+    String getDataFormatName();
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/f6525494/camel-core/src/test/java/org/apache/camel/management/ManagedDataFormatTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedDataFormatTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedDataFormatTest.java
index fe5a58e..0429269 100644
--- a/camel-core/src/test/java/org/apache/camel/management/ManagedDataFormatTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedDataFormatTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.management;
 import java.util.Set;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
+import javax.management.openmbean.TabularData;
 
 import org.apache.camel.builder.RouteBuilder;
 
@@ -38,6 +39,24 @@ public class ManagedDataFormatTest extends ManagementTestSupport {
         // there should be 1 data format
         Set<ObjectName> set = mbeanServer.queryNames(new ObjectName("*:type=dataformats,*"), null);
         assertEquals(1, set.size());
+
+        ObjectName on = set.iterator().next();
+
+        String json = (String) mbeanServer.invoke(on, "informationJson", null, null);
+        assertNotNull(json);
+
+        assertTrue(json.contains("\"title\": \"String Encoding\""));
+        assertTrue(json.contains("\"modelJavaType\": \"org.apache.camel.model.dataformat.StringDataFormat\""));
+        assertTrue(json.contains("\"charset\": { \"kind\": \"attribute\""));
+        assertTrue(json.contains("\"value\": \"iso-8859-1\""));
+
+        TabularData data = (TabularData) mbeanServer.invoke(on, "explain", new Object[]{true}, new String[]{"boolean"});
+        assertNotNull(data);
+        assertEquals(2, data.size());
+
+        data = (TabularData) mbeanServer.invoke(on, "explain", new Object[]{false}, new String[]{"boolean"});
+        assertNotNull(data);
+        assertEquals(1, data.size());
     }
 
     @Override


[4/4] camel git commit: CAMEL-9157: JMX - Add explain to data format so we can know how exactly they are configured at runtime

Posted by da...@apache.org.
CAMEL-9157: JMX - Add explain to data format so we can know how exactly they are configured at runtime


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/8ee52c74
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/8ee52c74
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/8ee52c74

Branch: refs/heads/master
Commit: 8ee52c74402ee1fa157bdd7616c18a064d3e85dd
Parents: d6ecb59
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Sep 25 11:14:05 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Sep 25 11:14:05 2015 +0200

----------------------------------------------------------------------
 .../src/main/java/__name__DataFormat.java                   | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/8ee52c74/tooling/archetypes/camel-archetype-dataformat/src/main/resources/archetype-resources/src/main/java/__name__DataFormat.java
----------------------------------------------------------------------
diff --git a/tooling/archetypes/camel-archetype-dataformat/src/main/resources/archetype-resources/src/main/java/__name__DataFormat.java b/tooling/archetypes/camel-archetype-dataformat/src/main/resources/archetype-resources/src/main/java/__name__DataFormat.java
index 84cd2f8..97d3b92 100644
--- a/tooling/archetypes/camel-archetype-dataformat/src/main/resources/archetype-resources/src/main/java/__name__DataFormat.java
+++ b/tooling/archetypes/camel-archetype-dataformat/src/main/resources/archetype-resources/src/main/java/__name__DataFormat.java
@@ -21,20 +21,27 @@ import java.io.OutputStream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 
 /**
  * A <a href="http://camel.apache.org/data-format.html">data format</a> ({@link DataFormat})
  * for ${name} data.
  */
-public class ${name}DataFormat extends ServiceSupport implements DataFormat {
+public class ${name}DataFormat extends ServiceSupport implements DataFormat, DataFormatName {
+
+    public String getDataFormatName() {
+        return "${scheme}";
+    }
 
     public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception {
+        // marshal from the Java object (graph) to the ${scheme} type
         byte[] bytes = exchange.getContext().getTypeConverter().mandatoryConvertTo(byte[].class, graph);
         stream.write(bytes);
     }
 
     public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
+        // unmarshal from the input stream of ${scheme} to Java object (graph)
         byte[] bytes = exchange.getContext().getTypeConverter().mandatoryConvertTo(byte[].class, stream);
         return bytes;
     }


[3/4] camel git commit: Upgrade groovy

Posted by da...@apache.org.
Upgrade groovy


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/d6ecb593
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/d6ecb593
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/d6ecb593

Branch: refs/heads/master
Commit: d6ecb5933b839b70c8fbfd18ed69116729e1ef52
Parents: a8bf17e
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Sep 25 10:14:51 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Sep 25 10:14:51 2015 +0200

----------------------------------------------------------------------
 parent/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/d6ecb593/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index 83ff3cb..5e99df9 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -194,7 +194,7 @@
     <google-api-services-calendar-version>v3-rev99-1.19.0</google-api-services-calendar-version>
     <google-api-services-mail-version>v1-rev15-1.19.0</google-api-services-mail-version>
     <grizzly-websockets-version>2.3.21</grizzly-websockets-version>
-    <groovy-version>2.4.4</groovy-version>
+    <groovy-version>2.4.5</groovy-version>
     <gson-version>2.3.1</gson-version>
     <guice3-version>3.0</guice3-version>
     <guice-version>4.0</guice-version>


[2/4] camel git commit: CAMEL-9157: JMX - Add explain to data format so we can know how exactly they are configured at runtime

Posted by da...@apache.org.
CAMEL-9157: JMX - Add explain to data format so we can know how exactly they are configured at runtime


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a8bf17ed
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a8bf17ed
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a8bf17ed

Branch: refs/heads/master
Commit: a8bf17ed6fedd0c1fd03fb793874b321c55bcb8e
Parents: f652549
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Sep 25 10:13:13 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Sep 25 10:13:13 2015 +0200

----------------------------------------------------------------------
 .../camel/dataformat/avro/AvroDataFormat.java   |  8 ++-
 .../dataformat/barcode/BarcodeDataFormat.java   |  8 ++-
 .../dataformat/base64/Base64DataFormat.java     |  8 ++-
 .../dataformat/beanio/BeanIODataFormat.java     |  8 ++-
 .../bindy/BindyAbstractDataFormat.java          |  8 ++-
 .../camel/component/boon/BoonDataFormat.java    |  8 ++-
 .../castor/AbstractCastorDataFormat.java        |  8 ++-
 .../converter/crypto/CryptoDataFormat.java      |  8 ++-
 .../crypto/PGPKeyAccessDataFormat.java          |  8 ++-
 .../camel/dataformat/csv/CsvDataFormat.java     |  8 ++-
 .../dataformat/flatpack/FlatpackDataFormat.java |  8 ++-
 .../camel/component/hl7/HL7DataFormat.java      |  8 ++-
 .../camel/component/ical/ICalDataFormat.java    | 53 +++++++++++---------
 .../camel/converter/jaxb/JaxbDataFormat.java    |  9 +++-
 .../camel/dataformat/jibx/JibxDataFormat.java   |  8 ++-
 .../dataformat/protobuf/ProtobufDataFormat.java |  8 ++-
 .../camel/dataformat/rss/RssDataFormat.java     | 17 ++++---
 .../dataformat/soap/SoapJaxbDataFormat.java     |  5 ++
 .../component/syslog/SyslogDataFormat.java      |  8 ++-
 .../tagsoup/TidyMarkupDataFormat.java           | 10 +++-
 .../dataformat/tarfile/TarFileDataFormat.java   | 16 ++++--
 .../univocity/AbstractUniVocityDataFormat.java  |  3 +-
 .../univocity/UniVocityCsvDataFormat.java       |  5 ++
 .../UniVocityFixedWidthDataFormat.java          |  5 ++
 .../univocity/UniVocityTsvDataFormat.java       |  5 ++
 .../converter/xmlbeans/XmlBeansDataFormat.java  | 11 ++--
 .../dataformat/xmljson/XmlJsonDataFormat.java   |  8 ++-
 .../dataformat/xmlrpc/XmlRpcDataFormat.java     |  8 ++-
 .../xmlsecurity/XMLSecurityDataFormat.java      | 10 +++-
 .../xstream/AbstractXStreamWrapper.java         |  3 +-
 .../dataformat/xstream/JsonDataFormat.java      |  8 ++-
 .../dataformat/xstream/XStreamDataFormat.java   |  7 ++-
 .../dataformat/zipfile/ZipFileDataFormat.java   | 18 +++++--
 33 files changed, 252 insertions(+), 69 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-avro/src/main/java/org/apache/camel/dataformat/avro/AvroDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-avro/src/main/java/org/apache/camel/dataformat/avro/AvroDataFormat.java b/components/camel-avro/src/main/java/org/apache/camel/dataformat/avro/AvroDataFormat.java
index 51ee131..9a03373 100644
--- a/components/camel-avro/src/main/java/org/apache/camel/dataformat/avro/AvroDataFormat.java
+++ b/components/camel-avro/src/main/java/org/apache/camel/dataformat/avro/AvroDataFormat.java
@@ -36,10 +36,11 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.CamelException;
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
 
-public class AvroDataFormat extends ServiceSupport implements DataFormat, CamelContextAware {
+public class AvroDataFormat extends ServiceSupport implements DataFormat, DataFormatName, CamelContextAware {
 
     private static final String GENERIC_CONTAINER_CLASSNAME = GenericContainer.class.getName();
     private CamelContext camelContext;
@@ -54,6 +55,11 @@ public class AvroDataFormat extends ServiceSupport implements DataFormat, CamelC
         this.schema = schema;
     }
 
+    @Override
+    public String getDataFormatName() {
+        return "avro";
+    }
+
     public CamelContext getCamelContext() {
         return camelContext;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-barcode/src/main/java/org/apache/camel/dataformat/barcode/BarcodeDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-barcode/src/main/java/org/apache/camel/dataformat/barcode/BarcodeDataFormat.java b/components/camel-barcode/src/main/java/org/apache/camel/dataformat/barcode/BarcodeDataFormat.java
index 0f6ea37..c062aa0 100644
--- a/components/camel-barcode/src/main/java/org/apache/camel/dataformat/barcode/BarcodeDataFormat.java
+++ b/components/camel-barcode/src/main/java/org/apache/camel/dataformat/barcode/BarcodeDataFormat.java
@@ -38,6 +38,7 @@ import com.google.zxing.datamatrix.encoder.SymbolShapeHint;
 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.ExchangeHelper;
 import org.slf4j.Logger;
@@ -50,7 +51,7 @@ import org.slf4j.LoggerFactory;
  * <p/>
  * https://github.com/zxing/zxing
  */
-public class BarcodeDataFormat extends ServiceSupport implements DataFormat {
+public class BarcodeDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
 
     /**
      * Logger.
@@ -137,6 +138,11 @@ public class BarcodeDataFormat extends ServiceSupport implements DataFormat {
         this.optimizeHints();
     }
 
+    @Override
+    public String getDataFormatName() {
+        return "barcode";
+    }
+
     /**
      * Marshall a {@link String} payload to a code image.
      */

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-base64/src/main/java/org/apache/camel/dataformat/base64/Base64DataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-base64/src/main/java/org/apache/camel/dataformat/base64/Base64DataFormat.java b/components/camel-base64/src/main/java/org/apache/camel/dataformat/base64/Base64DataFormat.java
index 4b9ee75..61aefc5 100644
--- a/components/camel-base64/src/main/java/org/apache/camel/dataformat/base64/Base64DataFormat.java
+++ b/components/camel-base64/src/main/java/org/apache/camel/dataformat/base64/Base64DataFormat.java
@@ -21,6 +21,7 @@ import java.io.OutputStream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.ExchangeHelper;
 import org.apache.camel.util.IOHelper;
@@ -28,13 +29,18 @@ import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.codec.binary.Base64InputStream;
 import org.apache.commons.codec.binary.Base64OutputStream;
 
-public class Base64DataFormat extends ServiceSupport implements DataFormat {
+public class Base64DataFormat extends ServiceSupport implements DataFormat, DataFormatName {
 
     private int lineLength = Base64.MIME_CHUNK_SIZE;
     private byte[] lineSeparator = {'\r', '\n'};
     private boolean urlSafe;
 
     @Override
+    public String getDataFormatName() {
+        return "base64";
+    }
+
+    @Override
     public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception {
         if (urlSafe) {
             marshalUrlSafe(exchange, graph, stream);

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-beanio/src/main/java/org/apache/camel/dataformat/beanio/BeanIODataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-beanio/src/main/java/org/apache/camel/dataformat/beanio/BeanIODataFormat.java b/components/camel-beanio/src/main/java/org/apache/camel/dataformat/beanio/BeanIODataFormat.java
index 4b244ed..fb2ed4c 100644
--- a/components/camel-beanio/src/main/java/org/apache/camel/dataformat/beanio/BeanIODataFormat.java
+++ b/components/camel-beanio/src/main/java/org/apache/camel/dataformat/beanio/BeanIODataFormat.java
@@ -32,6 +32,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -50,7 +51,7 @@ import org.slf4j.LoggerFactory;
  * A <a href="http://camel.apache.org/data-format.html">data format</a> (
  * {@link DataFormat}) for beanio data.
  */
-public class BeanIODataFormat extends ServiceSupport implements DataFormat, CamelContextAware {
+public class BeanIODataFormat extends ServiceSupport implements DataFormat, DataFormatName, CamelContextAware {
 
     private static final String LOG_PREFIX = "BeanIO: ";
     private static final Logger LOG = LoggerFactory.getLogger(BeanIODataFormat.class);
@@ -74,6 +75,11 @@ public class BeanIODataFormat extends ServiceSupport implements DataFormat, Came
     }
 
     @Override
+    public String getDataFormatName() {
+        return "beanio";
+    }
+
+    @Override
     protected void doStart() throws Exception {
         ObjectHelper.notNull(streamName, "Stream name not configured.");
         if (factory == null) {

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java
index b01e6d7..ebaada9 100644
--- a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java
+++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java
@@ -21,9 +21,10 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 
-public abstract class BindyAbstractDataFormat extends ServiceSupport implements DataFormat {
+public abstract class BindyAbstractDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
     private String locale;
     private BindyAbstractFactory modelFactory;
     private Class<?> classType;
@@ -35,6 +36,11 @@ public abstract class BindyAbstractDataFormat extends ServiceSupport implements
         this.classType = classType;
     }
 
+    @Override
+    public String getDataFormatName() {
+        return "bindy";
+    }
+
     public Class<?> getClassType() {
         return classType;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-boon/src/main/java/org/apache/camel/component/boon/BoonDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-boon/src/main/java/org/apache/camel/component/boon/BoonDataFormat.java b/components/camel-boon/src/main/java/org/apache/camel/component/boon/BoonDataFormat.java
index 24fbc42..09a5c10 100644
--- a/components/camel-boon/src/main/java/org/apache/camel/component/boon/BoonDataFormat.java
+++ b/components/camel-boon/src/main/java/org/apache/camel/component/boon/BoonDataFormat.java
@@ -26,6 +26,7 @@ import java.util.HashMap;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ChildServiceSupport;
 import org.apache.camel.util.IOHelper;
 import org.boon.json.JsonFactory;
@@ -37,7 +38,7 @@ import org.boon.json.ObjectMapper;
  * href="http://richardhightower.github.io/site/Boon/">Boon</a> to marshal to
  * and from JSON.
  */
-public class BoonDataFormat extends ChildServiceSupport implements DataFormat {
+public class BoonDataFormat extends ChildServiceSupport implements DataFormat, DataFormatName {
 
     private final ObjectMapper objectMapper;
     private Class<?> unmarshalType;
@@ -68,6 +69,11 @@ public class BoonDataFormat extends ChildServiceSupport implements DataFormat {
     }
 
     @Override
+    public String getDataFormatName() {
+        return "boon";
+    }
+
+    @Override
     public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception {
         BufferedWriter writer = IOHelper.buffered(new OutputStreamWriter(stream, IOHelper.getCharsetName(exchange)));
         objectMapper.toJson(graph, writer);

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-castor/src/main/java/org/apache/camel/dataformat/castor/AbstractCastorDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-castor/src/main/java/org/apache/camel/dataformat/castor/AbstractCastorDataFormat.java b/components/camel-castor/src/main/java/org/apache/camel/dataformat/castor/AbstractCastorDataFormat.java
index 24cbcf2..dee44cc 100644
--- a/components/camel-castor/src/main/java/org/apache/camel/dataformat/castor/AbstractCastorDataFormat.java
+++ b/components/camel-castor/src/main/java/org/apache/camel/dataformat/castor/AbstractCastorDataFormat.java
@@ -28,6 +28,7 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.exolab.castor.mapping.Mapping;
@@ -41,7 +42,7 @@ import org.exolab.castor.xml.XMLContext;
  * interface which leverage the Castor library for XML marshaling and
  * unmarshaling
  */
-public abstract class AbstractCastorDataFormat extends ServiceSupport implements DataFormat, CamelContextAware {
+public abstract class AbstractCastorDataFormat extends ServiceSupport implements DataFormat, DataFormatName, CamelContextAware {
 
     /**
      * The default encoding used for stream access.
@@ -63,6 +64,11 @@ public abstract class AbstractCastorDataFormat extends ServiceSupport implements
         this.xmlContext = xmlContext;
     }
 
+    @Override
+    public String getDataFormatName() {
+        return "castor";
+    }
+
     public void marshal(Exchange exchange, Object body, OutputStream outputStream) throws Exception {
         Writer writer = new OutputStreamWriter(outputStream, encoding);
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/CryptoDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/CryptoDataFormat.java b/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/CryptoDataFormat.java
index dd1d2c4..e8c5178 100644
--- a/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/CryptoDataFormat.java
+++ b/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/CryptoDataFormat.java
@@ -35,6 +35,7 @@ import static javax.crypto.Cipher.ENCRYPT_MODE;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.ExchangeHelper;
 import org.apache.camel.util.IOHelper;
@@ -68,7 +69,7 @@ import org.slf4j.LoggerFactory;
  * <li>http://en.wikipedia.org/wiki/HMAC</li>
  * </ul>
  */
-public class CryptoDataFormat extends ServiceSupport implements DataFormat {
+public class CryptoDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
 
     public static final String KEY = "CamelCryptoKey";
 
@@ -97,6 +98,11 @@ public class CryptoDataFormat extends ServiceSupport implements DataFormat {
         this.cryptoProvider = cryptoProvider;
     }
 
+    @Override
+    public String getDataFormatName() {
+        return "crypto";
+    }
+
     private Cipher initializeCipher(int mode, Key key, byte[] iv) throws Exception {
         Cipher cipher = cryptoProvider == null ? Cipher.getInstance(algorithm) : Cipher.getInstance(algorithm, cryptoProvider);
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPKeyAccessDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPKeyAccessDataFormat.java b/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPKeyAccessDataFormat.java
index 0d521a8..c926a81 100644
--- a/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPKeyAccessDataFormat.java
+++ b/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPKeyAccessDataFormat.java
@@ -33,6 +33,7 @@ import java.util.List;
 import org.apache.camel.Exchange;
 import org.apache.camel.converter.stream.CachedOutputStream;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.ExchangeHelper;
 import org.apache.camel.util.IOHelper;
@@ -78,7 +79,7 @@ import org.slf4j.LoggerFactory;
  * array or file, then you should use the class {@link PGPDataFormat}.
  * 
  */
-public class PGPKeyAccessDataFormat extends ServiceSupport implements DataFormat {
+public class PGPKeyAccessDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
 
     private static final Logger log = LoggerFactory.getLogger(PGPKeyAccessDataFormat.class);
 
@@ -180,6 +181,11 @@ public class PGPKeyAccessDataFormat extends ServiceSupport implements DataFormat
     public PGPKeyAccessDataFormat() {
     }
 
+    @Override
+    public String getDataFormatName() {
+        return "pgp";
+    }
+
     protected String findKeyUserid(Exchange exchange) {
         return exchange.getIn().getHeader(KEY_USERID, getKeyUserid(), String.class);
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvDataFormat.java b/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvDataFormat.java
index 3437a3f..53476d6 100644
--- a/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvDataFormat.java
+++ b/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvDataFormat.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.QuoteMode;
@@ -35,7 +36,7 @@ import org.apache.commons.csv.QuoteMode;
  * Autogeneration can be disabled. In this case, only the fields defined in
  * csvConfig are written on the output.
  */
-public class CsvDataFormat extends ServiceSupport implements DataFormat {
+public class CsvDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
     // CSV format options
     private CSVFormat format = CSVFormat.DEFAULT;
     private boolean commentMarkerDisabled;
@@ -72,6 +73,11 @@ public class CsvDataFormat extends ServiceSupport implements DataFormat {
         setFormat(format);
     }
 
+    @Override
+    public String getDataFormatName() {
+        return "csv";
+    }
+
     public void marshal(Exchange exchange, Object object, OutputStream outputStream) throws Exception {
         marshaller.marshal(exchange, object, outputStream);
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-flatpack/src/main/java/org/apache/camel/dataformat/flatpack/FlatpackDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-flatpack/src/main/java/org/apache/camel/dataformat/flatpack/FlatpackDataFormat.java b/components/camel-flatpack/src/main/java/org/apache/camel/dataformat/flatpack/FlatpackDataFormat.java
index a2bb9bc..941f819 100644
--- a/components/camel-flatpack/src/main/java/org/apache/camel/dataformat/flatpack/FlatpackDataFormat.java
+++ b/components/camel-flatpack/src/main/java/org/apache/camel/dataformat/flatpack/FlatpackDataFormat.java
@@ -36,6 +36,7 @@ import net.sf.flatpack.writer.Writer;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.flatpack.DataSetList;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -56,7 +57,7 @@ import org.slf4j.LoggerFactory;
  *
  * @version 
  */
-public class FlatpackDataFormat extends ServiceSupport implements DataFormat {
+public class FlatpackDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
     private static final Logger LOG = LoggerFactory.getLogger(FlatpackDataFormat.class);
     private ParserFactory parserFactory = DefaultParserFactory.getInstance();
     private char delimiter = ',';
@@ -67,6 +68,11 @@ public class FlatpackDataFormat extends ServiceSupport implements DataFormat {
     private boolean ignoreExtraColumns;
     private String definition;
 
+    @Override
+    public String getDataFormatName() {
+        return "flatback";
+    }
+
     @SuppressWarnings("unchecked")
     public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception {
         ObjectHelper.notNull(graph, "The object to marshal must be provided");

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7DataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7DataFormat.java b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7DataFormat.java
index d56e7ea..378f4f6 100644
--- a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7DataFormat.java
+++ b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7DataFormat.java
@@ -29,6 +29,7 @@ import ca.uhn.hl7v2.util.Terser;
 import ca.uhn.hl7v2.validation.impl.ValidationContextFactory;
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.ExchangeHelper;
 import org.apache.camel.util.IOHelper;
@@ -70,7 +71,7 @@ import static org.apache.camel.component.hl7.HL7Constants.*;
  *
  * @see org.apache.camel.component.hl7.HL7MLLPCodec
  */
-public class HL7DataFormat extends ServiceSupport implements DataFormat {
+public class HL7DataFormat extends ServiceSupport implements DataFormat, DataFormatName {
 
     private static final Map<String, String> HEADER_MAP = new HashMap<String, String>();
 
@@ -93,6 +94,11 @@ public class HL7DataFormat extends ServiceSupport implements DataFormat {
         HEADER_MAP.put(HL7_CHARSET, "MSH-18");
     }
 
+    @Override
+    public String getDataFormatName() {
+        return "hl7";
+    }
+
     public void marshal(Exchange exchange, Object body, OutputStream outputStream) throws Exception {
         Message message = ExchangeHelper.convertToMandatoryType(exchange, Message.class, body);
         String charsetName = HL7Charset.getCharsetName(message, exchange);

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalDataFormat.java b/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalDataFormat.java
index 1db789b..eae6ff8 100644
--- a/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalDataFormat.java
+++ b/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalDataFormat.java
@@ -25,19 +25,43 @@ import net.fortuna.ical4j.model.Calendar;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 
 /**
  * Bridge ICal data format to camel world.
  */
-public class ICalDataFormat extends ServiceSupport implements DataFormat {
+public class ICalDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
 
-    /**
-     * Class responsible for writing out calendar instances.
-     */
     private CalendarOutputter outputer = new CalendarOutputter();
     private CalendarBuilder builder = new CalendarBuilder();
 
+    @Override
+    public String getDataFormatName() {
+        return "ical";
+    }
+
+    @Override
+    public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception {
+        Calendar calendar = exchange.getContext().getTypeConverter().convertTo(Calendar.class, graph);
+        outputer.output(calendar, stream);
+    }
+
+    @Override
+    public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
+        return builder.build(stream);
+    }
+
+    @Override
+    protected void doStart() throws Exception {
+        // noop
+    }
+
+    @Override
+    protected void doStop() throws Exception {
+        // noop
+    }
+
     public void setValidating(boolean validate) {
         outputer.setValidating(validate);
     }
@@ -62,25 +86,4 @@ public class ICalDataFormat extends ServiceSupport implements DataFormat {
         this.builder = builder;
     }
 
-    @Override
-    public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception {
-        Calendar calendar = exchange.getContext().getTypeConverter().convertTo(Calendar.class, graph);
-        outputer.output(calendar, stream);
-    }
-
-    @Override
-    public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
-        return builder.build(stream);
-    }
-
-    @Override
-    protected void doStart() throws Exception {
-        // noop
-    }
-
-    @Override
-    protected void doStop() throws Exception {
-        // noop
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java
index 68593eb..dc5090e 100644
--- a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java
+++ b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java
@@ -44,6 +44,8 @@ import javax.xml.transform.Source;
 import javax.xml.transform.stream.StreamSource;
 import javax.xml.validation.Schema;
 import javax.xml.validation.SchemaFactory;
+
+import org.apache.camel.spi.DataFormatName;
 import org.xml.sax.SAXException;
 
 import org.apache.camel.CamelContext;
@@ -68,7 +70,7 @@ import org.slf4j.LoggerFactory;
  *
  * @version
  */
-public class JaxbDataFormat extends ServiceSupport implements DataFormat, CamelContextAware {
+public class JaxbDataFormat extends ServiceSupport implements DataFormat, DataFormatName, CamelContextAware {
 
     private static final Logger LOG = LoggerFactory.getLogger(JaxbDataFormat.class);
     private static final BlockingQueue<SchemaFactory> SCHEMA_FACTORY_POOL = new LinkedBlockingQueue<SchemaFactory>();
@@ -109,6 +111,11 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, CamelC
         this.contextPath = contextPath;
     }
 
+    @Override
+    public String getDataFormatName() {
+        return "jaxb";
+    }
+
     public void marshal(Exchange exchange, Object graph, OutputStream stream) throws IOException, SAXException {
         try {
             // must create a new instance of marshaller as its not thread safe

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-jibx/src/main/java/org/apache/camel/dataformat/jibx/JibxDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-jibx/src/main/java/org/apache/camel/dataformat/jibx/JibxDataFormat.java b/components/camel-jibx/src/main/java/org/apache/camel/dataformat/jibx/JibxDataFormat.java
index 2727a89..6d9d519 100644
--- a/components/camel-jibx/src/main/java/org/apache/camel/dataformat/jibx/JibxDataFormat.java
+++ b/components/camel-jibx/src/main/java/org/apache/camel/dataformat/jibx/JibxDataFormat.java
@@ -21,6 +21,7 @@ import java.io.OutputStream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.jibx.runtime.BindingDirectory;
@@ -29,7 +30,7 @@ import org.jibx.runtime.IMarshallingContext;
 import org.jibx.runtime.IUnmarshallingContext;
 import org.jibx.runtime.JiBXException;
 
-public class JibxDataFormat extends ServiceSupport implements DataFormat {
+public class JibxDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
     private Class<?> unmarshallClass;
     private String bindingName;
 
@@ -45,6 +46,11 @@ public class JibxDataFormat extends ServiceSupport implements DataFormat {
         this.setBindingName(bindingName);
     }
 
+    @Override
+    public String getDataFormatName() {
+        return "jibx";
+    }
+
     public void marshal(Exchange exchange, Object body, OutputStream stream) throws Exception {
         IBindingFactory bindingFactory = createBindingFactory(body.getClass(), bindingName);
         IMarshallingContext marshallingContext = bindingFactory.createMarshallingContext();

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-protobuf/src/main/java/org/apache/camel/dataformat/protobuf/ProtobufDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-protobuf/src/main/java/org/apache/camel/dataformat/protobuf/ProtobufDataFormat.java b/components/camel-protobuf/src/main/java/org/apache/camel/dataformat/protobuf/ProtobufDataFormat.java
index 446edfc..485ad8c 100755
--- a/components/camel-protobuf/src/main/java/org/apache/camel/dataformat/protobuf/ProtobufDataFormat.java
+++ b/components/camel-protobuf/src/main/java/org/apache/camel/dataformat/protobuf/ProtobufDataFormat.java
@@ -28,10 +28,11 @@ import org.apache.camel.CamelException;
 import org.apache.camel.Exchange;
 import org.apache.camel.InvalidPayloadException;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
 
-public class ProtobufDataFormat extends ServiceSupport implements DataFormat, CamelContextAware {
+public class ProtobufDataFormat extends ServiceSupport implements DataFormat, DataFormatName, CamelContextAware {
 
     private CamelContext camelContext;
     private Message defaultInstance;
@@ -44,6 +45,11 @@ public class ProtobufDataFormat extends ServiceSupport implements DataFormat, Ca
         this.defaultInstance = defaultInstance;
     }
 
+    @Override
+    public String getDataFormatName() {
+        return "protobuf";
+    }
+
     public CamelContext getCamelContext() {
         return camelContext;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssDataFormat.java b/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssDataFormat.java
index f74666e..8808d38 100644
--- a/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssDataFormat.java
+++ b/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssDataFormat.java
@@ -22,10 +22,9 @@ import java.io.OutputStream;
 import com.sun.syndication.feed.synd.SyndFeed;
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.ExchangeHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * RSS DataFormat
@@ -39,12 +38,16 @@ import org.slf4j.LoggerFactory;
  * Uses <a href="https://rome.dev.java.net/">ROME</a> for RSS parsing.
  * <p/>
  */
-public class RssDataFormat extends ServiceSupport implements DataFormat {
-    protected static final Logger LOG = LoggerFactory.getLogger(RssDataFormat.class);
-    
+public class RssDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
+
+    @Override
+    public String getDataFormatName() {
+        return "rss";
+    }
+
     public void marshal(Exchange exchange, Object body, OutputStream out) throws Exception {
-        SyndFeed feed = ExchangeHelper.convertToMandatoryType(exchange, SyndFeed.class, body);        
-        String xml = RssConverter.feedToXml(feed);            
+        SyndFeed feed = ExchangeHelper.convertToMandatoryType(exchange, SyndFeed.class, body);
+        String xml = RssConverter.feedToXml(feed);
         out.write(xml.getBytes());
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-soap/src/main/java/org/apache/camel/dataformat/soap/SoapJaxbDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-soap/src/main/java/org/apache/camel/dataformat/soap/SoapJaxbDataFormat.java b/components/camel-soap/src/main/java/org/apache/camel/dataformat/soap/SoapJaxbDataFormat.java
index cdc3a5e..c4581d5 100644
--- a/components/camel-soap/src/main/java/org/apache/camel/dataformat/soap/SoapJaxbDataFormat.java
+++ b/components/camel-soap/src/main/java/org/apache/camel/dataformat/soap/SoapJaxbDataFormat.java
@@ -92,6 +92,11 @@ public class SoapJaxbDataFormat extends JaxbDataFormat {
     }
 
     @Override
+    public String getDataFormatName() {
+        return "soapjaxb";
+    }
+
+    @Override
     protected void doStart() throws Exception {
         if ("1.2".equals(version)) {
             LOG.debug("Using SOAP 1.2 adapter");

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogDataFormat.java b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogDataFormat.java
index 84860cb..c85275f 100644
--- a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogDataFormat.java
+++ b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogDataFormat.java
@@ -22,10 +22,16 @@ import java.util.Date;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.ExchangeHelper;
 
-public class SyslogDataFormat extends ServiceSupport implements DataFormat {
+public class SyslogDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
+
+    @Override
+    public String getDataFormatName() {
+        return "syslog";
+    }
 
     @Override
     public void marshal(Exchange exchange, Object body, OutputStream stream) throws Exception {

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-tagsoup/src/main/java/org/apache/camel/dataformat/tagsoup/TidyMarkupDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-tagsoup/src/main/java/org/apache/camel/dataformat/tagsoup/TidyMarkupDataFormat.java b/components/camel-tagsoup/src/main/java/org/apache/camel/dataformat/tagsoup/TidyMarkupDataFormat.java
index e5a8250..69eeb7d 100644
--- a/components/camel-tagsoup/src/main/java/org/apache/camel/dataformat/tagsoup/TidyMarkupDataFormat.java
+++ b/components/camel-tagsoup/src/main/java/org/apache/camel/dataformat/tagsoup/TidyMarkupDataFormat.java
@@ -28,7 +28,6 @@ import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.sax.SAXSource;
 
-import org.apache.camel.support.ServiceSupport;
 import org.w3c.dom.Node;
 
 import org.xml.sax.ContentHandler;
@@ -38,6 +37,8 @@ import org.xml.sax.XMLReader;
 import org.apache.camel.CamelException;
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
+import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.ccil.cowan.tagsoup.HTMLSchema;
 import org.ccil.cowan.tagsoup.Parser;
@@ -53,7 +54,7 @@ import org.slf4j.LoggerFactory;
  * xpath'ed on.
  * 
  */
-public class TidyMarkupDataFormat extends ServiceSupport implements DataFormat {
+public class TidyMarkupDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
 
     /*
      * Our Logger
@@ -104,6 +105,11 @@ public class TidyMarkupDataFormat extends ServiceSupport implements DataFormat {
      */
     private Map<String, Object> parserPropeties;
 
+    @Override
+    public String getDataFormatName() {
+        return "tidyMarkup";
+    }
+
     /**
      * Unsupported operation. We cannot create ugly HTML.
      */

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-tarfile/src/main/java/org/apache/camel/dataformat/tarfile/TarFileDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-tarfile/src/main/java/org/apache/camel/dataformat/tarfile/TarFileDataFormat.java b/components/camel-tarfile/src/main/java/org/apache/camel/dataformat/tarfile/TarFileDataFormat.java
index d994cf2..e195699 100644
--- a/components/camel-tarfile/src/main/java/org/apache/camel/dataformat/tarfile/TarFileDataFormat.java
+++ b/components/camel-tarfile/src/main/java/org/apache/camel/dataformat/tarfile/TarFileDataFormat.java
@@ -24,6 +24,7 @@ import java.io.OutputStream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.StringHelper;
@@ -39,11 +40,12 @@ import static org.apache.camel.Exchange.FILE_NAME;
  * Tar file data format.
  * Based on ZipFileDataFormat from camel-zipfile component
  */
-public class TarFileDataFormat extends ServiceSupport implements DataFormat {
+public class TarFileDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
     private boolean usingIterator;
 
-    public void setUsingIterator(boolean usingIterator) {
-        this.usingIterator = usingIterator;
+    @Override
+    public String getDataFormatName() {
+        return "tarfile";
     }
 
     @Override
@@ -110,6 +112,14 @@ public class TarFileDataFormat extends ServiceSupport implements DataFormat {
         }
     }
 
+    public boolean isUsingIterator() {
+        return usingIterator;
+    }
+
+    public void setUsingIterator(boolean usingIterator) {
+        this.usingIterator = usingIterator;
+    }
+
     @Override
     protected void doStart() throws Exception {
         // noop

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/AbstractUniVocityDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/AbstractUniVocityDataFormat.java b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/AbstractUniVocityDataFormat.java
index f459377..39faf37 100644
--- a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/AbstractUniVocityDataFormat.java
+++ b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/AbstractUniVocityDataFormat.java
@@ -31,6 +31,7 @@ import com.univocity.parsers.common.CommonWriterSettings;
 import com.univocity.parsers.common.Format;
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 
 import static org.apache.camel.util.IOHelper.getCharsetName;
@@ -50,7 +51,7 @@ import static org.apache.camel.util.IOHelper.getCharsetName;
  */
 public abstract class AbstractUniVocityDataFormat<F extends Format, CWS extends CommonWriterSettings<F>,
         W extends AbstractWriter<CWS>, CPS extends CommonParserSettings<F>, P extends AbstractParser<CPS>, DF extends AbstractUniVocityDataFormat<F, CWS, W, CPS, P, DF>>
-        extends ServiceSupport implements DataFormat {
+        extends ServiceSupport implements DataFormat, DataFormatName {
     protected String nullValue;
     protected Boolean skipEmptyLines;
     protected Boolean ignoreTrailingWhitespaces;

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormat.java b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormat.java
index 8e39cfb..99a8da9 100644
--- a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormat.java
+++ b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormat.java
@@ -206,4 +206,9 @@ public class UniVocityCsvDataFormat extends AbstractUniVocityDataFormat<CsvForma
             format.setDelimiter(delimiter);
         }
     }
+
+    @Override
+    public String getDataFormatName() {
+        return "univocity-csv";
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormat.java b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormat.java
index 6458849..f9b125d 100644
--- a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormat.java
+++ b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormat.java
@@ -216,4 +216,9 @@ public class UniVocityFixedWidthDataFormat extends AbstractUniVocityDataFormat<F
         }
         return new FixedWidthFieldLengths(fields);
     }
+
+    @Override
+    public String getDataFormatName() {
+        return "univocity-fixed";
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormat.java b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormat.java
index b7f8eaa..2e980fd 100644
--- a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormat.java
+++ b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormat.java
@@ -98,4 +98,9 @@ public class UniVocityTsvDataFormat extends AbstractUniVocityDataFormat<TsvForma
             format.setEscapeChar(escapeChar);
         }
     }
+
+    @Override
+    public String getDataFormatName() {
+        return "univocity-tsv";
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-xmlbeans/src/main/java/org/apache/camel/converter/xmlbeans/XmlBeansDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-xmlbeans/src/main/java/org/apache/camel/converter/xmlbeans/XmlBeansDataFormat.java b/components/camel-xmlbeans/src/main/java/org/apache/camel/converter/xmlbeans/XmlBeansDataFormat.java
index a357fc5..8e0be84 100644
--- a/components/camel-xmlbeans/src/main/java/org/apache/camel/converter/xmlbeans/XmlBeansDataFormat.java
+++ b/components/camel-xmlbeans/src/main/java/org/apache/camel/converter/xmlbeans/XmlBeansDataFormat.java
@@ -22,6 +22,7 @@ import java.util.concurrent.Callable;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.ExchangeHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -31,7 +32,12 @@ import org.apache.xmlbeans.XmlObject;
  * A <a href="http://camel.apache.org/data-format.html">data format</a>
  * ({@link DataFormat}) using XmlBeans to marshal to and from XML
  */
-public class XmlBeansDataFormat extends ServiceSupport implements DataFormat {
+public class XmlBeansDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
+
+    @Override
+    public String getDataFormatName() {
+        return "xmlBeans";
+    }
 
     public void marshal(final Exchange exchange, final Object body, final OutputStream stream) throws Exception {
         ObjectHelper.callWithTCCL(new Callable<Void>() {
@@ -42,7 +48,7 @@ public class XmlBeansDataFormat extends ServiceSupport implements DataFormat {
                 return null;
             }
         }, exchange);
-        
+
     }
 
     public Object unmarshal(final Exchange exchange, final InputStream stream) throws Exception {
@@ -63,5 +69,4 @@ public class XmlBeansDataFormat extends ServiceSupport implements DataFormat {
     protected void doStop() throws Exception {
         // noop
     }
-
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-xmljson/src/main/java/org/apache/camel/dataformat/xmljson/XmlJsonDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-xmljson/src/main/java/org/apache/camel/dataformat/xmljson/XmlJsonDataFormat.java b/components/camel-xmljson/src/main/java/org/apache/camel/dataformat/xmljson/XmlJsonDataFormat.java
index 81d9420..be34928 100644
--- a/components/camel-xmljson/src/main/java/org/apache/camel/dataformat/xmljson/XmlJsonDataFormat.java
+++ b/components/camel-xmljson/src/main/java/org/apache/camel/dataformat/xmljson/XmlJsonDataFormat.java
@@ -30,6 +30,7 @@ import net.sf.json.JSONSerializer;
 import net.sf.json.xml.XMLSerializer;
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.IOHelper;
 
@@ -38,7 +39,7 @@ import org.apache.camel.util.IOHelper;
  * <a href="http://json-lib.sourceforge.net/">json-lib</a> to convert between XML
  * and JSON directly.
  */
-public class XmlJsonDataFormat extends ServiceSupport implements DataFormat {
+public class XmlJsonDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
 
     private XMLSerializer serializer;
 
@@ -60,6 +61,11 @@ public class XmlJsonDataFormat extends ServiceSupport implements DataFormat {
     }
 
     @Override
+    public String getDataFormatName() {
+        return "xmljson";
+    }
+
+    @Override
     protected void doStart() throws Exception {
         serializer = new XMLSerializer();
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-xmlrpc/src/main/java/org/apache/camel/dataformat/xmlrpc/XmlRpcDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-xmlrpc/src/main/java/org/apache/camel/dataformat/xmlrpc/XmlRpcDataFormat.java b/components/camel-xmlrpc/src/main/java/org/apache/camel/dataformat/xmlrpc/XmlRpcDataFormat.java
index 1e2be5a..cd90a0d 100644
--- a/components/camel-xmlrpc/src/main/java/org/apache/camel/dataformat/xmlrpc/XmlRpcDataFormat.java
+++ b/components/camel-xmlrpc/src/main/java/org/apache/camel/dataformat/xmlrpc/XmlRpcDataFormat.java
@@ -23,6 +23,7 @@ import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.UnsupportedEncodingException;
 
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -46,7 +47,7 @@ import org.apache.xmlrpc.parser.XmlRpcRequestParser;
 import org.apache.xmlrpc.parser.XmlRpcResponseParser;
 import org.apache.xmlrpc.util.SAXParsers;
 
-public class XmlRpcDataFormat extends ServiceSupport implements DataFormat {
+public class XmlRpcDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
     private XmlRpcStreamRequestConfig xmlRpcStreamRequestConfig = new XmlRpcHttpRequestConfigImpl();
     private TypeFactory typeFactory = new TypeFactoryImpl(null);
     private boolean isRequest;
@@ -66,6 +67,11 @@ public class XmlRpcDataFormat extends ServiceSupport implements DataFormat {
     }
 
     @Override
+    public String getDataFormatName() {
+        return "xmlrpc";
+    }
+
+    @Override
     public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception {
         // need to check the object type
         XMLWriter control = getXMLWriter(exchange, stream);

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-xmlsecurity/src/main/java/org/apache/camel/dataformat/xmlsecurity/XMLSecurityDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-xmlsecurity/src/main/java/org/apache/camel/dataformat/xmlsecurity/XMLSecurityDataFormat.java b/components/camel-xmlsecurity/src/main/java/org/apache/camel/dataformat/xmlsecurity/XMLSecurityDataFormat.java
index b7eed69..25da8f4 100755
--- a/components/camel-xmlsecurity/src/main/java/org/apache/camel/dataformat/xmlsecurity/XMLSecurityDataFormat.java
+++ b/components/camel-xmlsecurity/src/main/java/org/apache/camel/dataformat/xmlsecurity/XMLSecurityDataFormat.java
@@ -40,6 +40,7 @@ import javax.crypto.spec.DESedeKeySpec;
 import javax.crypto.spec.SecretKeySpec;
 import javax.xml.transform.dom.DOMSource;
 
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -66,7 +67,7 @@ import org.slf4j.LoggerFactory;
 
 
 
-public class XMLSecurityDataFormat extends ServiceSupport implements DataFormat, CamelContextAware {
+public class XMLSecurityDataFormat extends ServiceSupport implements DataFormat, DataFormatName, CamelContextAware {
 
     /**
      * @deprecated  Use {@link #XMLSecurityDataFormat(String, Map, boolean, String, String, String, KeyStoreParameters)} instead.
@@ -363,7 +364,12 @@ public class XMLSecurityDataFormat extends ServiceSupport implements DataFormat,
         this.setKeyPassword(keyPassword);
         this.setDigestAlgorithm(digestAlgorithm);
     }
-    
+
+    @Override
+    public String getDataFormatName() {
+        return "secureXML";
+    }
+
     @Override
     public void setCamelContext(CamelContext camelContext) {
         this.camelContext = camelContext;

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/AbstractXStreamWrapper.java
----------------------------------------------------------------------
diff --git a/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/AbstractXStreamWrapper.java b/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/AbstractXStreamWrapper.java
index 8b51a4b..b98725e 100644
--- a/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/AbstractXStreamWrapper.java
+++ b/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/AbstractXStreamWrapper.java
@@ -38,6 +38,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.converter.jaxp.StaxConverter;
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
 
@@ -45,7 +46,7 @@ import org.apache.camel.util.ObjectHelper;
  * An abstract class which implement <a href="http://camel.apache.org/data-format.html">data format</a>
  * ({@link DataFormat}) interface which leverage the XStream library for XML or JSON's marshaling and unmarshaling
  */
-public abstract class AbstractXStreamWrapper extends ServiceSupport implements DataFormat {
+public abstract class AbstractXStreamWrapper extends ServiceSupport implements DataFormat, DataFormatName {
 
     private XStream xstream;
     private HierarchicalStreamDriver xstreamDriver;

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/JsonDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/JsonDataFormat.java b/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/JsonDataFormat.java
index bbf96b7..2819718 100644
--- a/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/JsonDataFormat.java
+++ b/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/JsonDataFormat.java
@@ -40,11 +40,10 @@ import org.codehaus.jettison.mapped.MappedXMLOutputFactory;
 
 /**
  * A <a href="http://camel.apache.org/data-format.html">data format</a>
- * ({@link DataFormat}) using XStream and Jettison to marshal to and from JSON
+ * ({@link org.apache.camel.spi.DataFormat}) using XStream and Jettison to marshal to and from JSON
  *
  * @version
  */
-
 public class JsonDataFormat extends AbstractXStreamWrapper {
     private final MappedXMLOutputFactory mof;
     private final MappedXMLInputFactory mif;
@@ -56,6 +55,11 @@ public class JsonDataFormat extends AbstractXStreamWrapper {
         mif = new MappedXMLInputFactory(nstjsons);
     }
 
+    @Override
+    public String getDataFormatName() {
+        return "json";
+    }
+
     public boolean isPrettyPrint() {
         return prettyPrint;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/XStreamDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/XStreamDataFormat.java b/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/XStreamDataFormat.java
index ca8a945..84169dc 100644
--- a/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/XStreamDataFormat.java
+++ b/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/XStreamDataFormat.java
@@ -50,7 +50,12 @@ public class XStreamDataFormat extends AbstractXStreamWrapper  {
     public XStreamDataFormat(XStream xstream) {
         super(xstream);
     }
-    
+
+    @Override
+    public String getDataFormatName() {
+        return "xstream";
+    }
+
     public void setEncoding(String encoding) {
         this.encoding = encoding;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/a8bf17ed/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormat.java b/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormat.java
index 4427650..1dd79e7 100644
--- a/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormat.java
+++ b/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormat.java
@@ -26,6 +26,7 @@ import java.util.zip.ZipOutputStream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.StringHelper;
@@ -36,11 +37,12 @@ import static org.apache.camel.Exchange.FILE_NAME;
  * Zip file data format.
  * See {@link org.apache.camel.model.dataformat.ZipDataFormat} for "deflate" compression.
  */
-public class ZipFileDataFormat extends ServiceSupport implements DataFormat {
+public class ZipFileDataFormat extends ServiceSupport implements DataFormat, DataFormatName {
     private boolean usingIterator;
-    
-    public void setUsingIterator(boolean usingIterator) {
-        this.usingIterator = usingIterator;
+
+    @Override
+    public String getDataFormatName() {
+        return "zipFile";
     }
 
     @Override
@@ -98,6 +100,14 @@ public class ZipFileDataFormat extends ServiceSupport implements DataFormat {
         }
     }
 
+    public boolean isUsingIterator() {
+        return usingIterator;
+    }
+
+    public void setUsingIterator(boolean usingIterator) {
+        this.usingIterator = usingIterator;
+    }
+
     @Override
     protected void doStart() throws Exception {
         // noop