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 2020/03/12 15:08:09 UTC

[camel] branch master updated (6662ec3 -> 8ead57d)

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git.


    from 6662ec3  CAMEL-14699: Add matchOnUriPrefix URI parameter to platform-http endpoint
     new 4508bdb  CAMEL-14702: Remove JAXB XmlAdapter from model.
     new 8ead57d  Make JAXB Api optional on camel-core-engine

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org/apache/camel/dataformat/any23/any23.json   |   1 +
 .../src/main/docs/any23-dataformat.adoc            |   3 +-
 .../any23/spring/SpringAny23DataFormatTest.xml     |   4 +-
 .../xstream/XStreamDataFormatConfigurer.java       |   2 +-
 .../apache/camel/dataformat/xstream/xstream.json   |   8 +-
 .../src/main/docs/xstream-dataformat.adoc          |   6 +-
 .../dataformat/xstream/AbstractXStreamWrapper.java |  41 +-
 .../xstream/XStreamConfigurationTest.java          |  24 +-
 .../xstream/XStreamDataFormatOmitFieldsTest.java   |   4 +-
 .../xstream/SpringMarshalOmitFieldsTest.xml        |   6 +-
 .../xstream/SpringXStreamConfigurationTest.xml     |  28 +-
 core/camel-core-engine/pom.xml                     |  19 +-
 .../org/apache/camel/model/dataformat/any23.json   |   1 +
 .../org/apache/camel/model/dataformat/jaxb.index   |   8 -
 .../org/apache/camel/model/dataformat/xstream.json |   8 +-
 .../camel/model/PropertyDescriptionsAdapter.java   |  50 ---
 .../org/apache/camel/model/TimeUnitAdapter.java    |  50 ---
 .../camel/model/dataformat/Any23DataFormat.java    |  52 ++-
 .../camel/model/dataformat/XStreamDataFormat.java  | 442 ++++-----------------
 .../reifier/dataformat/Any23DataFormatReifier.java |   2 +-
 .../dataformat/XStreamDataFormatReifier.java       |   8 +-
 .../xml/AbstractCamelThreadPoolFactoryBean.java    |  20 +-
 .../model/dataformat/Any23DataFormatTest.java      |   8 +-
 core/camel-management-api/pom.xml                  |  12 -
 core/camel-management/pom.xml                      |  12 -
 core/camel-xml-io/pom.xml                          |   7 -
 .../java/org/apache/camel/xml/in/ModelParser.java  |  99 +----
 .../java/org/apache/camel/xml/in/BaseParser.java   |  10 -
 .../modules/ROOT/pages/camel-3x-upgrade-guide.adoc |  74 ++++
 29 files changed, 281 insertions(+), 728 deletions(-)
 delete mode 100644 core/camel-core-engine/src/main/java/org/apache/camel/model/PropertyDescriptionsAdapter.java
 delete mode 100644 core/camel-core-engine/src/main/java/org/apache/camel/model/TimeUnitAdapter.java


[camel] 01/02: CAMEL-14702: Remove JAXB XmlAdapter from model.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 4508bdb502a008b31301dc1fa6c9614a2b9488bc
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Mar 12 15:46:50 2020 +0100

    CAMEL-14702: Remove JAXB XmlAdapter from model.
    
    Remove not needed glashfish jaxb-runtime from Java9+ profile for core modules
---
 .../org/apache/camel/dataformat/any23/any23.json   |   1 +
 .../src/main/docs/any23-dataformat.adoc            |   3 +-
 .../any23/spring/SpringAny23DataFormatTest.xml     |   4 +-
 .../xstream/XStreamDataFormatConfigurer.java       |   2 +-
 .../apache/camel/dataformat/xstream/xstream.json   |   8 +-
 .../src/main/docs/xstream-dataformat.adoc          |   6 +-
 .../dataformat/xstream/AbstractXStreamWrapper.java |  41 +-
 .../xstream/XStreamConfigurationTest.java          |  24 +-
 .../xstream/XStreamDataFormatOmitFieldsTest.java   |   4 +-
 .../xstream/SpringMarshalOmitFieldsTest.xml        |   6 +-
 .../xstream/SpringXStreamConfigurationTest.xml     |  28 +-
 core/camel-core-engine/pom.xml                     |  18 +-
 .../org/apache/camel/model/dataformat/any23.json   |   1 +
 .../org/apache/camel/model/dataformat/jaxb.index   |   8 -
 .../org/apache/camel/model/dataformat/xstream.json |   8 +-
 .../camel/model/PropertyDescriptionsAdapter.java   |  50 ---
 .../org/apache/camel/model/TimeUnitAdapter.java    |  50 ---
 .../camel/model/dataformat/Any23DataFormat.java    |  52 ++-
 .../camel/model/dataformat/XStreamDataFormat.java  | 442 ++++-----------------
 .../reifier/dataformat/Any23DataFormatReifier.java |   2 +-
 .../dataformat/XStreamDataFormatReifier.java       |   8 +-
 .../xml/AbstractCamelThreadPoolFactoryBean.java    |  20 +-
 .../model/dataformat/Any23DataFormatTest.java      |   8 +-
 core/camel-management-api/pom.xml                  |  12 -
 core/camel-management/pom.xml                      |  12 -
 core/camel-xml-io/pom.xml                          |   7 -
 .../java/org/apache/camel/xml/in/ModelParser.java  |  99 +----
 .../java/org/apache/camel/xml/in/BaseParser.java   |  10 -
 .../modules/ROOT/pages/camel-3x-upgrade-guide.adoc |  74 ++++
 29 files changed, 280 insertions(+), 728 deletions(-)

diff --git a/components/camel-any23/src/generated/resources/org/apache/camel/dataformat/any23/any23.json b/components/camel-any23/src/generated/resources/org/apache/camel/dataformat/any23/any23.json
index 4e204a5..8cd40a0 100644
--- a/components/camel-any23/src/generated/resources/org/apache/camel/dataformat/any23/any23.json
+++ b/components/camel-any23/src/generated/resources/org/apache/camel/dataformat/any23/any23.json
@@ -17,6 +17,7 @@
   },
   "properties": {
     "outputFormat": { "kind": "attribute", "displayName": "Output Format", "required": false, "type": "enum", "javaType": "org.apache.camel.dataformat.any23.Any23OutputFormat", "enum": [ "JSONLD", "NQUADS", "NTRIPLES", "RDF4JMODEL", "RDFJSON", "RDFXML", "TURTLE" ], "deprecated": false, "secret": false, "defaultValue": "RDF4JMODEL", "description": "What RDF syntax to unmarshal as, can be: NTRIPLES, TURTLE, NQUADS, RDFXML, JSONLD, RDFJSON, RDF4JMODEL. It is by default: RDF4JMODEL." },
+    "configuration": { "kind": "element", "displayName": "Configuration", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": false, "secret": false, "description": "Configurations for Apache Any23 as key-value pairs in order to customize the extraction process. The list of supported parameters can be found here. If not provided, a default configuration is used." },
     "extractors": { "kind": "element", "displayName": "Extractors", "required": false, "type": "array", "javaType": "java.util.List<java.lang.String>", "deprecated": false, "secret": false, "description": "List of Any23 extractors to be used in the unmarshal operation. A list of the available extractors can be found here here. If not provided, all the available extractors are used." },
     "baseURI": { "kind": "attribute", "displayName": "Base URI", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "The URI to use as base for building RDF entities if only relative paths are provided." },
     "contentTypeHeader": { "kind": "attribute", "displayName": "Content Type Header", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Whether the data format should set the Content-Type header with the type from the data format if the data format is capable of doing so. For example application\/xml for data formats marshalling to XML, or application\/json for data formats marshalling to JS [...]
diff --git a/components/camel-any23/src/main/docs/any23-dataformat.adoc b/components/camel-any23/src/main/docs/any23-dataformat.adoc
index e1d4600..c5fae04 100644
--- a/components/camel-any23/src/main/docs/any23-dataformat.adoc
+++ b/components/camel-any23/src/main/docs/any23-dataformat.adoc
@@ -13,7 +13,7 @@ Any23 is a Data Format that is intended to convert HTML from a site (or file) in
 == Any23 Options
 
 // dataformat options: START
-The Any23 dataformat supports 4 options, which are listed below.
+The Any23 dataformat supports 5 options, which are listed below.
 
 
 
@@ -21,6 +21,7 @@ The Any23 dataformat supports 4 options, which are listed below.
 |===
 | Name | Default | Java Type | Description
 | outputFormat | RDF4JMODEL | Any23OutputFormat | What RDF syntax to unmarshal as, can be: NTRIPLES, TURTLE, NQUADS, RDFXML, JSONLD, RDFJSON, RDF4JMODEL. It is by default: RDF4JMODEL. The value can be one of: JSONLD, NQUADS, NTRIPLES, RDF4JMODEL, RDFJSON, RDFXML, TURTLE
+| configuration |  | List | Configurations for Apache Any23 as key-value pairs in order to customize the extraction process. The list of supported parameters can be found here. If not provided, a default configuration is used.
 | extractors |  | List | List of Any23 extractors to be used in the unmarshal operation. A list of the available extractors can be found here here. If not provided, all the available extractors are used.
 | baseURI |  | String | The URI to use as base for building RDF entities if only relative paths are provided.
 | contentTypeHeader | false | Boolean | Whether the data format should set the Content-Type header with the type from the data format if the data format is capable of doing so. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSon etc.
diff --git a/components/camel-any23/src/test/resources/org/apache/camel/dataformat/any23/spring/SpringAny23DataFormatTest.xml b/components/camel-any23/src/test/resources/org/apache/camel/dataformat/any23/spring/SpringAny23DataFormatTest.xml
index f9a4ff6..93c89a9 100644
--- a/components/camel-any23/src/test/resources/org/apache/camel/dataformat/any23/spring/SpringAny23DataFormatTest.xml
+++ b/components/camel-any23/src/test/resources/org/apache/camel/dataformat/any23/spring/SpringAny23DataFormatTest.xml
@@ -29,9 +29,7 @@
 
     <dataFormats>
       <any23 id="any23" baseURI ="http://mock.foo/bar" outputFormat="TURTLE" > 
-        <configuration>
-          <property key="any23.extraction.metadata.nesting" value="off" />
-        </configuration>
+        <configuration key="any23.extraction.metadata.nesting" value="off"/>
         <extractors>html-head-title</extractors>
       </any23>
     </dataFormats>
diff --git a/components/camel-xstream/src/generated/java/org/apache/camel/dataformat/xstream/XStreamDataFormatConfigurer.java b/components/camel-xstream/src/generated/java/org/apache/camel/dataformat/xstream/XStreamDataFormatConfigurer.java
index e438777..c0c5c0a 100644
--- a/components/camel-xstream/src/generated/java/org/apache/camel/dataformat/xstream/XStreamDataFormatConfigurer.java
+++ b/components/camel-xstream/src/generated/java/org/apache/camel/dataformat/xstream/XStreamDataFormatConfigurer.java
@@ -19,7 +19,7 @@ public class XStreamDataFormatConfigurer extends PropertyConfigurerSupport imple
         XStreamDataFormat dataformat = (XStreamDataFormat) target;
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "encoding": dataformat.setEncoding(property(camelContext, java.lang.String.class, value)); return true;
-        case "converters": dataformat.setConverters(property(camelContext, java.util.List.class, value)); return true;
+        case "converters": dataformat.setConverters(property(camelContext, java.util.Map.class, value)); return true;
         case "aliases": dataformat.setAliases(property(camelContext, java.util.Map.class, value)); return true;
         case "omitfields":
         case "omitFields": dataformat.setOmitFields(property(camelContext, java.util.Map.class, value)); return true;
diff --git a/components/camel-xstream/src/generated/resources/org/apache/camel/dataformat/xstream/xstream.json b/components/camel-xstream/src/generated/resources/org/apache/camel/dataformat/xstream/xstream.json
index 017ba0e..dec672e 100644
--- a/components/camel-xstream/src/generated/resources/org/apache/camel/dataformat/xstream/xstream.json
+++ b/components/camel-xstream/src/generated/resources/org/apache/camel/dataformat/xstream/xstream.json
@@ -21,10 +21,10 @@
     "driver": { "kind": "attribute", "displayName": "Driver", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "To use a custom XStream driver. The instance must be of type com.thoughtworks.xstream.io.HierarchicalStreamDriver" },
     "driverRef": { "kind": "attribute", "displayName": "Driver Ref", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "To refer to a custom XStream driver to lookup in the registry. The instance must be of type com.thoughtworks.xstream.io.HierarchicalStreamDriver" },
     "mode": { "kind": "attribute", "displayName": "Mode", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "Mode for dealing with duplicate references The possible values are: NO_REFERENCES ID_REFERENCES XPATH_RELATIVE_REFERENCES XPATH_ABSOLUTE_REFERENCES SINGLE_NODE_XPATH_RELATIVE_REFERENCES SINGLE_NODE_XPATH_ABSOLUTE_REFERENCES" },
-    "converters": { "kind": "element", "displayName": "Converters", "required": false, "type": "array", "javaType": "java.util.List<java.lang.String>", "deprecated": false, "secret": false, "description": "List of class names for using custom XStream converters. The classes must be of type com.thoughtworks.xstream.converters.Converter" },
-    "aliases": { "kind": "element", "displayName": "Aliases", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String>", "deprecated": false, "secret": false, "description": "Alias a Class to a shorter name to be used in XML elements." },
-    "omitFields": { "kind": "element", "displayName": "Omit Fields", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String[]>", "deprecated": false, "secret": false, "description": "Prevents a field from being serialized. To omit a field you must always provide the declaring type and not necessarily the type that is converted." },
-    "implicitCollections": { "kind": "element", "displayName": "Implicit Collections", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String[]>", "deprecated": false, "secret": false, "description": "Adds a default implicit collection which is used for any unmapped XML tag." },
+    "converters": { "kind": "element", "displayName": "Converters", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": false, "secret": false, "description": "List of class names for using custom XStream converters. The classes must be of type com.thoughtworks.xstream.converters.Converter" },
+    "aliases": { "kind": "element", "displayName": "Aliases", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": false, "secret": false, "description": "Alias a Class to a shorter name to be used in XML elements." },
+    "omitFields": { "kind": "element", "displayName": "Omit Fields", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": false, "secret": false, "description": "Prevents a field from being serialized. To omit a field you must always provide the declaring type and not necessarily the type that is converted. Multiple values can be separated by comma." },
+    "implicitCollections": { "kind": "element", "displayName": "Implicit Collections", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": false, "secret": false, "description": "Adds a default implicit collection which is used for any unmapped XML tag. Multiple values can be separated by comma." },
     "contentTypeHeader": { "kind": "attribute", "displayName": "Content Type Header", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Whether the data format should set the Content-Type header with the type from the data format if the data format is capable of doing so. For example application\/xml for data formats marshalling to XML, or application\/json for data formats marshalling to JS [...]
     "id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "The id of this node" }
   }
diff --git a/components/camel-xstream/src/main/docs/xstream-dataformat.adoc b/components/camel-xstream/src/main/docs/xstream-dataformat.adoc
index 93afea2..27d2ae2 100644
--- a/components/camel-xstream/src/main/docs/xstream-dataformat.adoc
+++ b/components/camel-xstream/src/main/docs/xstream-dataformat.adoc
@@ -39,9 +39,9 @@ The XStream dataformat supports 10 options, which are listed below.
 | driverRef |  | String | To refer to a custom XStream driver to lookup in the registry. The instance must be of type com.thoughtworks.xstream.io.HierarchicalStreamDriver
 | mode |  | String | Mode for dealing with duplicate references The possible values are: NO_REFERENCES ID_REFERENCES XPATH_RELATIVE_REFERENCES XPATH_ABSOLUTE_REFERENCES SINGLE_NODE_XPATH_RELATIVE_REFERENCES SINGLE_NODE_XPATH_ABSOLUTE_REFERENCES
 | converters |  | List | List of class names for using custom XStream converters. The classes must be of type com.thoughtworks.xstream.converters.Converter
-| aliases |  | Map | Alias a Class to a shorter name to be used in XML elements.
-| omitFields |  | Map | Prevents a field from being serialized. To omit a field you must always provide the declaring type and not necessarily the type that is converted.
-| implicitCollections |  | Map | Adds a default implicit collection which is used for any unmapped XML tag.
+| aliases |  | List | Alias a Class to a shorter name to be used in XML elements.
+| omitFields |  | List | Prevents a field from being serialized. To omit a field you must always provide the declaring type and not necessarily the type that is converted. Multiple values can be separated by comma.
+| implicitCollections |  | List | Adds a default implicit collection which is used for any unmapped XML tag. Multiple values can be separated by comma.
 | contentTypeHeader | false | Boolean | Whether the data format should set the Content-Type header with the type from the data format if the data format is capable of doing so. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSon etc.
 |===
 // dataformat options: END
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 bf63f19..ec2d4ec 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
@@ -56,10 +56,10 @@ public abstract class AbstractXStreamWrapper extends ServiceSupport implements C
     private CamelContext camelContext;
     private XStream xstream;
     private HierarchicalStreamDriver xstreamDriver;
-    private List<String> converters;
+    private Map<String, String> converters;
     private Map<String, String> aliases;
-    private Map<String, String[]> omitFields;
-    private Map<String, String[]> implicitCollections;
+    private Map<String, String> omitFields;
+    private Map<String, String> implicitCollections;
     private String permissions;
     private String mode;
     private boolean contentTypeHeader = true;
@@ -131,8 +131,9 @@ public abstract class AbstractXStreamWrapper extends ServiceSupport implements C
 
         try {
             if (this.implicitCollections != null) {
-                for (Entry<String, String[]> entry : this.implicitCollections.entrySet()) {
-                    for (String name : entry.getValue()) {
+                for (Entry<String, String> entry : this.implicitCollections.entrySet()) {
+                    String[] values = entry.getValue().split(",");
+                    for (String name : values) {
                         xstream.addImplicitCollection(resolver.resolveMandatoryClass(entry.getKey()), name);
                     }
                 }
@@ -147,16 +148,18 @@ public abstract class AbstractXStreamWrapper extends ServiceSupport implements C
             }
 
             if (this.omitFields != null) {
-                for (Entry<String, String[]> entry : this.omitFields.entrySet()) {
-                    for (String name : entry.getValue()) {
+                for (Entry<String, String> entry : this.omitFields.entrySet()) {
+                    String[] values = entry.getValue().split(",");
+                    for (String name : values) {
                         xstream.omitField(resolver.resolveMandatoryClass(entry.getKey()), name);
                     }
                 }
             }
 
             if (this.converters != null) {
-                for (String name : this.converters) {
-                    Class<Converter> converterClass = resolver.resolveMandatoryClass(name, Converter.class);
+                for (Entry<String, String> entry : this.converters.entrySet()) {
+                    String fqn = entry.getValue();
+                    Class<Converter> converterClass = resolver.resolveMandatoryClass(fqn, Converter.class);
                     Converter converter;
 
                     Constructor<Converter> con = null;
@@ -262,11 +265,11 @@ public abstract class AbstractXStreamWrapper extends ServiceSupport implements C
         return result;
     }
 
-    public List<String> getConverters() {
+    public Map<String, String> getConverters() {
         return converters;
     }
 
-    public void setConverters(List<String> converters) {
+    public void setConverters(Map<String, String> converters) {
         this.converters = converters;
     }
 
@@ -278,20 +281,20 @@ public abstract class AbstractXStreamWrapper extends ServiceSupport implements C
         this.aliases = aliases;
     }
 
-    public Map<String, String[]> getImplicitCollections() {
-        return implicitCollections;
+    public Map<String, String> getOmitFields() {
+        return omitFields;
     }
 
-    public void setImplicitCollections(Map<String, String[]> implicitCollections) {
-        this.implicitCollections = implicitCollections;
+    public void setOmitFields(Map<String, String> omitFields) {
+        this.omitFields = omitFields;
     }
 
-    public Map<String, String[]> getOmitFields() {
-        return omitFields;
+    public Map<String, String> getImplicitCollections() {
+        return implicitCollections;
     }
 
-    public void setOmitFields(Map<String, String[]> omitFields) {
-        this.omitFields = omitFields;
+    public void setImplicitCollections(Map<String, String> implicitCollections) {
+        this.implicitCollections = implicitCollections;
     }
 
     public HierarchicalStreamDriver getXstreamDriver() {
diff --git a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamConfigurationTest.java b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamConfigurationTest.java
index 9df44ff..ff904ec 100644
--- a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamConfigurationTest.java
+++ b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamConfigurationTest.java
@@ -42,7 +42,7 @@ public class XStreamConfigurationTest extends CamelTestSupport {
 
     private static volatile boolean constructorInjected;
     private static volatile boolean methodInjected;
-    
+
     @Override
     @Before
     public void setUp() throws Exception {
@@ -51,11 +51,6 @@ public class XStreamConfigurationTest extends CamelTestSupport {
         methodInjected = false;
     }
 
-    public void testXStreamInjection() {
-        assertTrue(constructorInjected);
-        assertTrue(methodInjected);
-    }
-
     @Test
     public void testCustomMarshalDomainObject() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
@@ -143,15 +138,15 @@ public class XStreamConfigurationTest extends CamelTestSupport {
                 xstreamDefinition.setAliases(aliases);
                 xstreamDefinition.setPermissions(PurchaseOrder.class, PurchaseHistory.class);
 
-                List<String> converters = new ArrayList<>();
-                converters.add(PurchaseOrderConverter.class.getName());
-                converters.add(CheckMethodInjection.class.getName());
-                converters.add(CheckConstructorInjection.class.getName());
+                Map<String, String> converters = new HashMap<>();
+                converters.put("1", PurchaseOrderConverter.class.getName());
+                converters.put("2", CheckMethodInjection.class.getName());
+                converters.put("3", CheckConstructorInjection.class.getName());
 
                 xstreamDefinition.setConverters(converters);
 
-                Map<String, String[]> implicits = new HashMap<>();
-                implicits.put(PurchaseHistory.class.getName(), new String[] {"history"});
+                Map<String, String> implicits = new HashMap<>();
+                implicits.put(PurchaseHistory.class.getName(), "history");
                 xstreamDefinition.setImplicitCollections(implicits);
 
                 from("direct:marshal").marshal(xstreamDefinition).to("mock:result");
@@ -164,8 +159,9 @@ public class XStreamConfigurationTest extends CamelTestSupport {
                 xstreamDefinition.setAliases(aliases);
                 xstreamDefinition.setPermissions(PurchaseOrder.class, PurchaseHistory.class);
 
-                converters = new ArrayList<>();
-                converters.add(PurchaseOrderConverter.class.getName());
+                converters = new HashMap<>();
+                converters.put("1", PurchaseOrderConverter.class.getName());
+
                 xstreamDefinition.setConverters(converters);
                 from("direct:marshal-json").marshal(xstreamDefinition).to("mock:result");
                 from("direct:unmarshal-json").unmarshal(xstreamDefinition).to("mock:result");
diff --git a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamDataFormatOmitFieldsTest.java b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamDataFormatOmitFieldsTest.java
index b9df598..a469fec 100644
--- a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamDataFormatOmitFieldsTest.java
+++ b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamDataFormatOmitFieldsTest.java
@@ -55,8 +55,8 @@ public class XStreamDataFormatOmitFieldsTest extends CamelTestSupport {
         return new RouteBuilder() {
             public void configure() {
                 XStreamDataFormat xStreamDataFormat = new XStreamDataFormat();
-                Map<String, String[]> omitFields = new HashMap<>();
-                omitFields.put(PurchaseOrder.class.getName(), new String[]{"price"});
+                Map<String, String> omitFields = new HashMap<>();
+                omitFields.put(PurchaseOrder.class.getName(), "price");
                 xStreamDataFormat.setOmitFields(omitFields);
 
                 from("direct:start").
diff --git a/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalOmitFieldsTest.xml b/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalOmitFieldsTest.xml
index bc32de6..89b9c2a 100644
--- a/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalOmitFieldsTest.xml
+++ b/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalOmitFieldsTest.xml
@@ -30,11 +30,7 @@
         <dataFormats>
             <xstream id="xstream" permissions="org.apache.camel.dataformat.stream.*">
                 <!-- omit the price file from the PurchaseOrder class -->
-                <omitFields>
-                    <omitField class="org.apache.camel.dataformat.xstream.PurchaseOrder">
-                        <field>price</field>
-                    </omitField>
-                </omitFields>
+                <omitFields key="org.apache.camel.dataformat.xstream.PurchaseOrder" value="price"/>
             </xstream>
         </dataFormats>
         <!-- END SNIPPET: e1 -->
diff --git a/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringXStreamConfigurationTest.xml b/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringXStreamConfigurationTest.xml
index 69c9194..babf6d5 100644
--- a/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringXStreamConfigurationTest.xml
+++ b/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringXStreamConfigurationTest.xml
@@ -33,31 +33,15 @@
         <dataFormats>
             <xstream id="xstream-1" mode="NO_REFERENCES"
                 permissions="-org.apache.camel.dataformat.xstream.*,org.apache.camel.dataformat.xstream.PurchaseHistory,org.apache.camel.dataformat.xstream.PurchaseOrder">
-                <converters>
-                    <converter class="org.apache.camel.dataformat.xstream.XStreamConfigurationTest$PurchaseOrderConverter" />
-                </converters>
-                <aliases>                     
-					        <alias name="purchase-order" class="org.apache.camel.dataformat.xstream.PurchaseOrder" />
-                </aliases>
-                <implicitCollections>
-                   <class name="org.apache.camel.dataformat.xstream.PurchaseHistory">
-                      <field>history</field>
-                   </class>
-                </implicitCollections>
+                <converters key="purchase-converter" value="org.apache.camel.dataformat.xstream.XStreamConfigurationTest$PurchaseOrderConverter"/>
+                <aliases key="purchase-order" value="org.apache.camel.dataformat.xstream.PurchaseOrder"/>
+                <implicitCollections key="org.apache.camel.dataformat.xstream.PurchaseHistory" value="history"/>
             </xstream>
             
            <xstream id="xstream-json" driver="json" permissions="org.apache.camel.dataformat.xstream.*">
-                <converters>
-                    <converter class="org.apache.camel.dataformat.xstream.XStreamConfigurationTest$PurchaseOrderConverter" />
-                </converters>
-                <aliases>                     
-					        <alias name="purchase-order" class="org.apache.camel.dataformat.xstream.PurchaseOrder" />
-                </aliases>
-                <implicitCollections>
-                   <class name="org.apache.camel.dataformat.xstream.PurchaseHistory">
-                      <field>history</field>
-                   </class>
-                </implicitCollections>
+               <converters key="purchase-converter" value="org.apache.camel.dataformat.xstream.XStreamConfigurationTest$PurchaseOrderConverter"/>
+               <aliases key="purchase-order" value="org.apache.camel.dataformat.xstream.PurchaseOrder"/>
+               <implicitCollections key="org.apache.camel.dataformat.xstream.PurchaseHistory" value="history"/>
             </xstream>
             
             <xstream id="xstream-driver" driverRef="myDriver" permissions="org.apache.camel.dataformat.xstream.*"/>
diff --git a/core/camel-core-engine/pom.xml b/core/camel-core-engine/pom.xml
index 351d4ae..56a2d04 100644
--- a/core/camel-core-engine/pom.xml
+++ b/core/camel-core-engine/pom.xml
@@ -51,9 +51,9 @@
         <!-- JAXB annotations are used for the EIP models -->
         <!-- but they are only used at runtime when using camel-xml-jaxb -->
         <dependency>
-            <groupId>com.sun.xml.bind</groupId>
-            <artifactId>jaxb-core</artifactId>
-            <scope>provided</scope>
+            <groupId>jakarta.xml.bind</groupId>
+            <artifactId>jakarta.xml.bind-api</artifactId>
+            <version>${jakarta-jaxb-version}</version>
         </dependency>
 
         <!-- required dependencies by camel-core -->
@@ -362,18 +362,6 @@
                                 <FOO_SERVICE_PORT>8081</FOO_SERVICE_PORT>
                             </environmentVariables>
                         </configuration>
-                        <dependencies>
-                            <dependency>
-                                <groupId>jakarta.xml.bind</groupId>
-                                <artifactId>jakarta.xml.bind-api</artifactId>
-                                <version>${jakarta-jaxb-version}</version>
-                            </dependency>
-                            <dependency>
-                                <groupId>org.glassfish.jaxb</groupId>
-                                <artifactId>jaxb-runtime</artifactId>
-                                <version>${glassfish-jaxb-runtime-version}</version>
-                            </dependency>
-                        </dependencies>
                     </plugin>
                 </plugins>
             </build>
diff --git a/core/camel-core-engine/src/generated/resources/org/apache/camel/model/dataformat/any23.json b/core/camel-core-engine/src/generated/resources/org/apache/camel/model/dataformat/any23.json
index 53361e0..d1892a1 100644
--- a/core/camel-core-engine/src/generated/resources/org/apache/camel/model/dataformat/any23.json
+++ b/core/camel-core-engine/src/generated/resources/org/apache/camel/model/dataformat/any23.json
@@ -13,6 +13,7 @@
   },
   "properties": {
     "outputFormat": { "kind": "attribute", "displayName": "Output Format", "required": false, "type": "enum", "javaType": "org.apache.camel.dataformat.any23.Any23OutputFormat", "enum": [ "JSONLD", "NQUADS", "NTRIPLES", "RDF4JMODEL", "RDFJSON", "RDFXML", "TURTLE" ], "deprecated": false, "secret": false, "defaultValue": "RDF4JMODEL", "description": "What RDF syntax to unmarshal as, can be: NTRIPLES, TURTLE, NQUADS, RDFXML, JSONLD, RDFJSON, RDF4JMODEL. It is by default: RDF4JMODEL." },
+    "configuration": { "kind": "element", "displayName": "Configuration", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": false, "secret": false, "description": "Configurations for Apache Any23 as key-value pairs in order to customize the extraction process. The list of supported parameters can be found here. If not provided, a default configuration is used." },
     "extractors": { "kind": "element", "displayName": "Extractors", "required": false, "type": "array", "javaType": "java.util.List<java.lang.String>", "deprecated": false, "secret": false, "description": "List of Any23 extractors to be used in the unmarshal operation. A list of the available extractors can be found here here. If not provided, all the available extractors are used." },
     "baseURI": { "kind": "attribute", "displayName": "Base URI", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "The URI to use as base for building RDF entities if only relative paths are provided." },
     "contentTypeHeader": { "kind": "attribute", "displayName": "Content Type Header", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Whether the data format should set the Content-Type header with the type from the data format if the data format is capable of doing so. For example application\/xml for data formats marshalling to XML, or application\/json for data formats marshalling to JS [...]
diff --git a/core/camel-core-engine/src/generated/resources/org/apache/camel/model/dataformat/jaxb.index b/core/camel-core-engine/src/generated/resources/org/apache/camel/model/dataformat/jaxb.index
index 8b92dcf..3c81a9c 100644
--- a/core/camel-core-engine/src/generated/resources/org/apache/camel/model/dataformat/jaxb.index
+++ b/core/camel-core-engine/src/generated/resources/org/apache/camel/model/dataformat/jaxb.index
@@ -41,14 +41,6 @@ UniVocityHeader
 UniVocityTsvDataFormat
 XMLSecurityDataFormat
 XStreamDataFormat
-XStreamDataFormat$AliasEntry
-XStreamDataFormat$AliasList
-XStreamDataFormat$ConverterEntry
-XStreamDataFormat$ConverterList
-XStreamDataFormat$ImplicitCollectionEntry
-XStreamDataFormat$ImplicitCollectionList
-XStreamDataFormat$OmitFieldEntry
-XStreamDataFormat$OmitFieldList
 XmlRpcDataFormat
 YAMLDataFormat
 YAMLLibrary
diff --git a/core/camel-core-engine/src/generated/resources/org/apache/camel/model/dataformat/xstream.json b/core/camel-core-engine/src/generated/resources/org/apache/camel/model/dataformat/xstream.json
index e82b80a..7dbe9b8 100644
--- a/core/camel-core-engine/src/generated/resources/org/apache/camel/model/dataformat/xstream.json
+++ b/core/camel-core-engine/src/generated/resources/org/apache/camel/model/dataformat/xstream.json
@@ -17,10 +17,10 @@
     "driver": { "kind": "attribute", "displayName": "Driver", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "To use a custom XStream driver. The instance must be of type com.thoughtworks.xstream.io.HierarchicalStreamDriver" },
     "driverRef": { "kind": "attribute", "displayName": "Driver Ref", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "To refer to a custom XStream driver to lookup in the registry. The instance must be of type com.thoughtworks.xstream.io.HierarchicalStreamDriver" },
     "mode": { "kind": "attribute", "displayName": "Mode", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "Mode for dealing with duplicate references The possible values are: NO_REFERENCES ID_REFERENCES XPATH_RELATIVE_REFERENCES XPATH_ABSOLUTE_REFERENCES SINGLE_NODE_XPATH_RELATIVE_REFERENCES SINGLE_NODE_XPATH_ABSOLUTE_REFERENCES" },
-    "converters": { "kind": "element", "displayName": "Converters", "required": false, "type": "array", "javaType": "java.util.List<java.lang.String>", "deprecated": false, "secret": false, "description": "List of class names for using custom XStream converters. The classes must be of type com.thoughtworks.xstream.converters.Converter" },
-    "aliases": { "kind": "element", "displayName": "Aliases", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String>", "deprecated": false, "secret": false, "description": "Alias a Class to a shorter name to be used in XML elements." },
-    "omitFields": { "kind": "element", "displayName": "Omit Fields", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String[]>", "deprecated": false, "secret": false, "description": "Prevents a field from being serialized. To omit a field you must always provide the declaring type and not necessarily the type that is converted." },
-    "implicitCollections": { "kind": "element", "displayName": "Implicit Collections", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String[]>", "deprecated": false, "secret": false, "description": "Adds a default implicit collection which is used for any unmapped XML tag." },
+    "converters": { "kind": "element", "displayName": "Converters", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": false, "secret": false, "description": "List of class names for using custom XStream converters. The classes must be of type com.thoughtworks.xstream.converters.Converter" },
+    "aliases": { "kind": "element", "displayName": "Aliases", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": false, "secret": false, "description": "Alias a Class to a shorter name to be used in XML elements." },
+    "omitFields": { "kind": "element", "displayName": "Omit Fields", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": false, "secret": false, "description": "Prevents a field from being serialized. To omit a field you must always provide the declaring type and not necessarily the type that is converted. Multiple values can be separated by comma." },
+    "implicitCollections": { "kind": "element", "displayName": "Implicit Collections", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.PropertyDefinition>", "deprecated": false, "secret": false, "description": "Adds a default implicit collection which is used for any unmapped XML tag. Multiple values can be separated by comma." },
     "contentTypeHeader": { "kind": "attribute", "displayName": "Content Type Header", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Whether the data format should set the Content-Type header with the type from the data format if the data format is capable of doing so. For example application\/xml for data formats marshalling to XML, or application\/json for data formats marshalling to JS [...]
     "id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "The id of this node" }
   }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/PropertyDescriptionsAdapter.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/PropertyDescriptionsAdapter.java
deleted file mode 100644
index 1042a7a..0000000
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/PropertyDescriptionsAdapter.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.model;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-
-public class PropertyDescriptionsAdapter extends XmlAdapter<PropertyDefinitions, Map<String, String>> {
-
-    @Override
-    public Map<String, String> unmarshal(PropertyDefinitions value) throws Exception {
-        Map<String, String> ret = new HashMap<>();
-
-        if (value != null) {
-            value.getProperties().forEach(p -> ret.put(p.getKey(), p.getValue()));
-        }
-
-        return ret;
-    }
-
-    @Override
-    public PropertyDefinitions marshal(Map<String, String> value) throws Exception {
-        PropertyDefinitions ret = new PropertyDefinitions();
-
-        if (value != null) {
-            final List<PropertyDefinition> properties = ret.getProperties();
-            value.forEach((k, v) -> properties.add(new PropertyDefinition(k, v)));
-        }
-
-        return ret;
-    }
-
-}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/TimeUnitAdapter.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/TimeUnitAdapter.java
deleted file mode 100644
index e22ed76..0000000
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/TimeUnitAdapter.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.model;
-
-import java.util.Locale;
-import java.util.concurrent.TimeUnit;
-
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-
-/**
- * <code>TimeUnitAdapter</code> is a simple adapter to convert between Strings
- * and instances of the {@link TimeUnit} enumeration
- */
-@XmlJavaTypeAdapter(value = TimeUnitAdapter.class)
-public class TimeUnitAdapter extends XmlAdapter<String, TimeUnit> {
-
-    @Override
-    public String marshal(TimeUnit v) throws Exception {
-        String result = null;
-        if (v != null) {
-            result = v.toString();
-        }
-        return result;
-    }
-
-    @Override
-    public TimeUnit unmarshal(String v) throws Exception {
-        TimeUnit result = null;
-        if (v != null) {
-            result = TimeUnit.valueOf(v.toUpperCase(Locale.ENGLISH));
-        }
-        return result;
-    }
-
-}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/Any23DataFormat.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/Any23DataFormat.java
index 81834b2..a834be6 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/Any23DataFormat.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/Any23DataFormat.java
@@ -16,19 +16,19 @@
  */
 package org.apache.camel.model.dataformat;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.bind.annotation.XmlTransient;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import org.apache.camel.model.DataFormatDefinition;
-import org.apache.camel.model.PropertyDescriptionsAdapter;
+import org.apache.camel.model.PropertyDefinition;
 import org.apache.camel.spi.Metadata;
 
 /**
@@ -43,8 +43,10 @@ public class Any23DataFormat extends DataFormatDefinition {
     @Metadata(defaultValue = "RDF4JMODEL", enums = "NTRIPLES,TURTLE,NQUADS,RDFXML,JSONLD,RDFJSON,RDF4JMODEL",
               javaType = "org.apache.camel.dataformat.any23.Any23OutputFormat")
     private String outputFormat;
-    @XmlJavaTypeAdapter(PropertyDescriptionsAdapter.class)
-    private Map<String, String> configuration = new HashMap<>();
+    @XmlElement(name = "configuration")
+    private List<PropertyDefinition> configuration;
+    @XmlTransient
+    private Map<String, String> configurations;
     @XmlElement
     private List<String> extractors;
     @XmlAttribute
@@ -67,13 +69,13 @@ public class Any23DataFormat extends DataFormatDefinition {
     public Any23DataFormat(String baseuri, Any23Type outputFormat, Map<String, String> configurations) {
         this(baseuri, outputFormat);
         this.outputFormat = outputFormat.name();
-        this.configuration = configurations;
+        this.configurations = configurations;
     }
 
     public Any23DataFormat(String baseuri, Any23Type outputFormat, Map<String, String> configurations, List<String> extractors) {
         this(baseuri, outputFormat, configurations);
         this.outputFormat = outputFormat.name();
-        this.configuration = configurations;
+        this.configurations = configurations;
         this.extractors = extractors;
     }
 
@@ -89,7 +91,19 @@ public class Any23DataFormat extends DataFormatDefinition {
         this.outputFormat = outputFormat;
     }
 
-    public Map<String, String> getConfiguration() {
+    public Map<String, String> getConfigurationAsMap() {
+        if (configurations == null && configuration != null) {
+            configurations = new HashMap<>();
+        }
+        if (configuration != null) {
+            for (PropertyDefinition def : configuration) {
+                configurations.put(def.getKey(), def.getValue());
+            }
+        }
+        return configurations;
+    }
+
+    public List<PropertyDefinition> getConfiguration() {
         return configuration;
     }
 
@@ -100,8 +114,20 @@ public class Any23DataFormat extends DataFormatDefinition {
      * "https://github.com/apache/any23/blob/master/api/src/main/resources/default-configuration.properties">here</a>.
      * If not provided, a default configuration is used.
      */
-    public void setConfiguration(Map<String, String> configurations) {
-        this.configuration = configurations;
+    public void setConfiguration(List<PropertyDefinition> configuration) {
+        this.configuration = configuration;
+    }
+
+    /**
+     * Configurations for Apache Any23 as key-value pairs in order to customize
+     * the extraction process. The list of supported parameters can be found
+     * <a href=
+     * "https://github.com/apache/any23/blob/master/api/src/main/resources/default-configuration.properties">here</a>.
+     * If not provided, a default configuration is used.
+     */
+    public void setConfiguration(Map<String, String> configuration) {
+        this.configuration = new ArrayList<>();
+        configuration.forEach((k, v) -> this.configuration.add(new PropertyDefinition(k, v)));
     }
 
     public List<String> getExtractors() {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java
index 50ddc8d..83b1238 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java
@@ -16,24 +16,18 @@
  */
 package org.apache.camel.model.dataformat;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlTransient;
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
 
 import org.apache.camel.model.DataFormatDefinition;
+import org.apache.camel.model.PropertyDefinition;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.util.CollectionStringBuffer;
 
@@ -56,18 +50,14 @@ public class XStreamDataFormat extends DataFormatDefinition {
     @XmlAttribute
     private String mode;
 
-    @XmlJavaTypeAdapter(ConvertersAdapter.class)
     @XmlElement(name = "converters")
-    private List<String> converters;
-    @XmlJavaTypeAdapter(AliasAdapter.class)
+    private List<PropertyDefinition> converters;
     @XmlElement(name = "aliases")
-    private Map<String, String> aliases;
-    @XmlJavaTypeAdapter(OmitFieldsAdapter.class)
+    private List<PropertyDefinition> aliases;
     @XmlElement(name = "omitFields")
-    private Map<String, String[]> omitFields;
-    @XmlJavaTypeAdapter(ImplicitCollectionsAdapter.class)
+    private List<PropertyDefinition> omitFields;
     @XmlElement(name = "implicitCollections")
-    private Map<String, String[]> implicitCollections;
+    private List<PropertyDefinition> implicitCollections;
 
     public XStreamDataFormat() {
         super("xstream");
@@ -138,54 +128,118 @@ public class XStreamDataFormat extends DataFormatDefinition {
         this.mode = mode;
     }
 
-    public List<String> getConverters() {
+    public List<PropertyDefinition> getConverters() {
         return converters;
     }
 
+    public Map<String, String> getConvertersAsMap() {
+        if (converters == null || converters.isEmpty()) {
+            return null;
+        }
+        Map<String, String> answer = new LinkedHashMap<>();
+        for (PropertyDefinition def : converters) {
+            answer.put(def.getKey(), def.getValue());
+        }
+        return answer;
+    }
+
     /**
      * List of class names for using custom XStream converters. The classes must
      * be of type com.thoughtworks.xstream.converters.Converter
      */
-    public void setConverters(List<String> converters) {
+    public void setConverters(List<PropertyDefinition> converters) {
         this.converters = converters;
     }
 
-    public Map<String, String> getAliases() {
+    public void setConverters(Map<String, String> converters) {
+        this.converters = new ArrayList<>();
+        converters.forEach((k, v) -> this.converters.add(new PropertyDefinition(k, v)));
+    }
+
+    public List<PropertyDefinition> getAliases() {
         return aliases;
     }
 
+    public Map<String, String> getAliasesAsMap() {
+        if (aliases == null || aliases.isEmpty()) {
+            return null;
+        }
+        Map<String, String> answer = new LinkedHashMap<>();
+        for (PropertyDefinition def : aliases) {
+            answer.put(def.getKey(), def.getValue());
+        }
+        return answer;
+    }
+
     /**
      * Alias a Class to a shorter name to be used in XML elements.
      */
-    public void setAliases(Map<String, String> aliases) {
+    public void setAliases(List<PropertyDefinition> aliases) {
         this.aliases = aliases;
     }
 
-    public Map<String, String[]> getOmitFields() {
+    public void setAliases(Map<String, String> aliases) {
+        this.aliases = new ArrayList<>();
+        aliases.forEach((k, v) -> this.aliases.add(new PropertyDefinition(k, v)));
+    }
+
+    public List<PropertyDefinition> getOmitFields() {
         return omitFields;
     }
 
     /**
      * Prevents a field from being serialized. To omit a field you must always
      * provide the declaring type and not necessarily the type that is
-     * converted.
+     * converted. Multiple values can be separated by comma.
      */
-    public void setOmitFields(Map<String, String[]> omitFields) {
+    public void setOmitFields(List<PropertyDefinition> omitFields) {
         this.omitFields = omitFields;
     }
 
-    public Map<String, String[]> getImplicitCollections() {
+    public void setOmitFields(Map<String, String> aliases) {
+        this.omitFields = new ArrayList<>();
+        aliases.forEach((k, v) -> this.omitFields.add(new PropertyDefinition(k, v)));
+    }
+
+    public Map<String, String> getOmitFieldsAsMap() {
+        if (omitFields == null || omitFields.isEmpty()) {
+            return null;
+        }
+        Map<String, String> answer = new LinkedHashMap<>();
+        for (PropertyDefinition def : omitFields) {
+            answer.put(def.getKey(), def.getValue());
+        }
+        return answer;
+    }
+
+    public List<PropertyDefinition> getImplicitCollections() {
         return implicitCollections;
     }
 
     /**
-     * Adds a default implicit collection which is used for any unmapped XML
-     * tag.
+     * Adds a default implicit collection which is used for any unmapped XML tag.
+     * Multiple values can be separated by comma.
      */
-    public void setImplicitCollections(Map<String, String[]> implicitCollections) {
+    public void setImplicitCollections(List<PropertyDefinition> implicitCollections) {
         this.implicitCollections = implicitCollections;
     }
 
+    public void setImplicitCollections(Map<String, String> implicitCollections) {
+        this.implicitCollections = new ArrayList<>();
+        implicitCollections.forEach((k, v) -> this.implicitCollections.add(new PropertyDefinition(k, v)));
+    }
+
+    public Map<String, String> getImplicitCollectionsAsMap() {
+        if (implicitCollections == null || implicitCollections.isEmpty()) {
+            return null;
+        }
+        Map<String, String> answer = new LinkedHashMap<>();
+        for (PropertyDefinition def : implicitCollections) {
+            answer.put(def.getKey(), def.getValue());
+        }
+        return answer;
+    }
+
     public String getPermissions() {
         return permissions;
     }
@@ -225,332 +279,4 @@ public class XStreamDataFormat extends DataFormatDefinition {
         setPermissions(csb.toString());
     }
 
-    @XmlTransient
-    public static class ConvertersAdapter extends XmlAdapter<ConverterList, List<String>> {
-        @Override
-        public ConverterList marshal(List<String> v) throws Exception {
-            if (v == null) {
-                return null;
-            }
-
-            List<ConverterEntry> list = new ArrayList<>();
-            for (String str : v) {
-                ConverterEntry entry = new ConverterEntry();
-                entry.setClsName(str);
-                list.add(entry);
-            }
-            ConverterList converterList = new ConverterList();
-            converterList.setList(list);
-            return converterList;
-        }
-
-        @Override
-        public List<String> unmarshal(ConverterList v) throws Exception {
-            if (v == null) {
-                return null;
-            }
-
-            List<String> list = new ArrayList<>();
-            for (ConverterEntry entry : v.getList()) {
-                list.add(entry.getClsName());
-            }
-            return list;
-        }
-    }
-
-    @XmlAccessorType(XmlAccessType.NONE)
-    @XmlType(name = "converterList", namespace = "http://camel.apache.org/schema/spring")
-    public static class ConverterList {
-        @XmlElement(name = "converter", namespace = "http://camel.apache.org/schema/spring")
-        private List<ConverterEntry> list;
-
-        public List<ConverterEntry> getList() {
-            return list;
-        }
-
-        public void setList(List<ConverterEntry> list) {
-            this.list = list;
-        }
-    }
-
-    @XmlAccessorType(XmlAccessType.NONE)
-    @XmlType(name = "converterEntry", namespace = "http://camel.apache.org/schema/spring")
-    public static class ConverterEntry {
-        @XmlAttribute(name = "class")
-        private String clsName;
-
-        public String getClsName() {
-            return clsName;
-        }
-
-        public void setClsName(String clsName) {
-            this.clsName = clsName;
-        }
-    }
-
-    @XmlTransient
-    public static class ImplicitCollectionsAdapter extends XmlAdapter<ImplicitCollectionList, Map<String, String[]>> {
-
-        @Override
-        public ImplicitCollectionList marshal(Map<String, String[]> v) throws Exception {
-            if (v == null || v.isEmpty()) {
-                return null;
-            }
-
-            List<ImplicitCollectionEntry> list = new ArrayList<>();
-            for (Entry<String, String[]> e : v.entrySet()) {
-                ImplicitCollectionEntry entry = new ImplicitCollectionEntry(e.getKey(), e.getValue());
-                list.add(entry);
-            }
-
-            ImplicitCollectionList collectionList = new ImplicitCollectionList();
-            collectionList.setList(list);
-
-            return collectionList;
-        }
-
-        @Override
-        public Map<String, String[]> unmarshal(ImplicitCollectionList v) throws Exception {
-            if (v == null) {
-                return null;
-            }
-
-            Map<String, String[]> map = new HashMap<>();
-            for (ImplicitCollectionEntry entry : v.getList()) {
-                map.put(entry.getClsName(), entry.getFields());
-            }
-            return map;
-        }
-    }
-
-    @XmlAccessorType(XmlAccessType.NONE)
-    @XmlType(name = "implicitCollectionList", namespace = "http://camel.apache.org/schema/spring")
-    public static class ImplicitCollectionList {
-        @XmlElement(name = "class", namespace = "http://camel.apache.org/schema/spring")
-        private List<ImplicitCollectionEntry> list;
-
-        public List<ImplicitCollectionEntry> getList() {
-            return list;
-        }
-
-        public void setList(List<ImplicitCollectionEntry> list) {
-            this.list = list;
-        }
-    }
-
-    @XmlAccessorType(XmlAccessType.NONE)
-    @XmlType(name = "implicitCollectionEntry", namespace = "http://camel.apache.org/schema/spring")
-    public static class ImplicitCollectionEntry {
-        @XmlAttribute(name = "name")
-        private String clsName;
-
-        @XmlElement(name = "field", namespace = "http://camel.apache.org/schema/spring")
-        private String[] fields;
-
-        public ImplicitCollectionEntry() {
-        }
-
-        public ImplicitCollectionEntry(String clsName, String[] fields) {
-            this.clsName = clsName;
-            this.fields = fields;
-        }
-
-        public String getClsName() {
-            return clsName;
-        }
-
-        public void setClsName(String clsName) {
-            this.clsName = clsName;
-        }
-
-        public String[] getFields() {
-            return fields;
-        }
-
-        public void setFields(String[] fields) {
-            this.fields = fields;
-        }
-
-        @Override
-        public String toString() {
-            return "Alias[ImplicitCollection=" + clsName + ", fields=" + Arrays.asList(this.fields) + "]";
-        }
-    }
-
-    @XmlTransient
-    public static class AliasAdapter extends XmlAdapter<AliasList, Map<String, String>> {
-
-        @Override
-        public AliasList marshal(Map<String, String> value) throws Exception {
-            if (value == null || value.isEmpty()) {
-                return null;
-            }
-
-            List<AliasEntry> ret = new ArrayList<>(value.size());
-            for (Map.Entry<String, String> entry : value.entrySet()) {
-                ret.add(new AliasEntry(entry.getKey(), entry.getValue()));
-            }
-            AliasList jaxbMap = new AliasList();
-            jaxbMap.setList(ret);
-            return jaxbMap;
-        }
-
-        @Override
-        public Map<String, String> unmarshal(AliasList value) throws Exception {
-            if (value == null || value.getList() == null || value.getList().isEmpty()) {
-                return null;
-            }
-
-            Map<String, String> answer = new HashMap<>();
-            for (AliasEntry alias : value.getList()) {
-                answer.put(alias.getName(), alias.getClsName());
-            }
-            return answer;
-        }
-    }
-
-    @XmlAccessorType(XmlAccessType.NONE)
-    @XmlType(name = "aliasList", namespace = "http://camel.apache.org/schema/spring")
-    public static class AliasList {
-        @XmlElement(name = "alias", namespace = "http://camel.apache.org/schema/spring")
-        private List<AliasEntry> list;
-
-        public List<AliasEntry> getList() {
-            return list;
-        }
-
-        public void setList(List<AliasEntry> list) {
-            this.list = list;
-        }
-    }
-
-    @XmlAccessorType(XmlAccessType.NONE)
-    @XmlType(name = "aliasEntry", namespace = "http://camel.apache.org/schema/spring")
-    public static class AliasEntry {
-
-        @XmlAttribute
-        private String name;
-
-        @XmlAttribute(name = "class")
-        private String clsName;
-
-        public AliasEntry() {
-        }
-
-        public AliasEntry(String key, String clsName) {
-            this.name = key;
-            this.clsName = clsName;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public String getClsName() {
-            return clsName;
-        }
-
-        public void setClsName(String clsName) {
-            this.clsName = clsName;
-        }
-
-        @Override
-        public String toString() {
-            return "Alias[name=" + name + ", class=" + clsName + "]";
-        }
-    }
-
-    @XmlTransient
-    public static class OmitFieldsAdapter extends XmlAdapter<OmitFieldList, Map<String, String[]>> {
-
-        @Override
-        public OmitFieldList marshal(Map<String, String[]> v) throws Exception {
-            if (v == null || v.isEmpty()) {
-                return null;
-            }
-
-            List<OmitFieldEntry> list = new ArrayList<>();
-            for (Entry<String, String[]> e : v.entrySet()) {
-                OmitFieldEntry entry = new OmitFieldEntry(e.getKey(), e.getValue());
-                list.add(entry);
-            }
-
-            OmitFieldList collectionList = new OmitFieldList();
-            collectionList.setList(list);
-
-            return collectionList;
-        }
-
-        @Override
-        public Map<String, String[]> unmarshal(OmitFieldList v) throws Exception {
-            if (v == null || v.getList() == null || v.getList().isEmpty()) {
-                return null;
-            }
-
-            Map<String, String[]> map = new HashMap<>();
-            for (OmitFieldEntry entry : v.getList()) {
-                map.put(entry.getClsName(), entry.getFields());
-            }
-            return map;
-        }
-    }
-
-    @XmlAccessorType(XmlAccessType.NONE)
-    @XmlType(name = "omitFieldList", namespace = "http://camel.apache.org/schema/spring")
-    public static class OmitFieldList {
-        @XmlElement(name = "omitField", namespace = "http://camel.apache.org/schema/spring")
-        private List<OmitFieldEntry> list;
-
-        public List<OmitFieldEntry> getList() {
-            return list;
-        }
-
-        public void setList(List<OmitFieldEntry> list) {
-            this.list = list;
-        }
-    }
-
-    @XmlAccessorType(XmlAccessType.NONE)
-    @XmlType(name = "omitFieldEntry", namespace = "http://camel.apache.org/schema/spring")
-    public static class OmitFieldEntry {
-
-        @XmlAttribute(name = "class")
-        private String clsName;
-
-        @XmlElement(name = "field", namespace = "http://camel.apache.org/schema/spring")
-        private String[] fields;
-
-        public OmitFieldEntry() {
-        }
-
-        public OmitFieldEntry(String clsName, String[] fields) {
-            this.clsName = clsName;
-            this.fields = fields;
-        }
-
-        public String getClsName() {
-            return clsName;
-        }
-
-        public void setClsName(String clsName) {
-            this.clsName = clsName;
-        }
-
-        public String[] getFields() {
-            return fields;
-        }
-
-        public void setFields(String[] fields) {
-            this.fields = fields;
-        }
-
-        @Override
-        public String toString() {
-            return "OmitField[" + clsName + ", fields=" + Arrays.asList(this.fields) + "]";
-        }
-    }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/Any23DataFormatReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/Any23DataFormatReifier.java
index 0ae6d4e..92e1650 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/Any23DataFormatReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/Any23DataFormatReifier.java
@@ -31,7 +31,7 @@ public class Any23DataFormatReifier extends DataFormatReifier<Any23DataFormat> {
     @Override
     protected void prepareDataFormatConfig(Map<String, Object> properties) {
         properties.put("outputFormat", definition.getOutputFormat());
-        properties.put("configurations", definition.getConfiguration());
+        properties.put("configurations", definition.getConfigurationAsMap());
         properties.put("extractors", definition.getExtractors());
         properties.put("baseURI", definition.getBaseURI());
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/XStreamDataFormatReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/XStreamDataFormatReifier.java
index 5c2ea5e..e2c7034 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/XStreamDataFormatReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/XStreamDataFormatReifier.java
@@ -33,10 +33,10 @@ public class XStreamDataFormatReifier extends DataFormatReifier<XStreamDataForma
         properties.put("xstreamDriver", asRef(definition.getDriverRef()));
         properties.put("permissions", definition.getPermissions());
         properties.put("encoding", definition.getEncoding());
-        properties.put("converters", definition.getConverters());
-        properties.put("aliases", definition.getAliases());
-        properties.put("omitFields", definition.getOmitFields());
-        properties.put("implicitCollections", definition.getImplicitCollections());
+        properties.put("converters", definition.getConvertersAsMap());
+        properties.put("aliases", definition.getAliasesAsMap());
+        properties.put("omitFields", definition.getOmitFieldsAsMap());
+        properties.put("implicitCollections", definition.getImplicitCollectionsAsMap());
         properties.put("mode", definition.getMode());
     }
 
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java
index f762496..94d9e56 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java
@@ -16,16 +16,13 @@
  */
 package org.apache.camel.core.xml;
 
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.TimeUnit;
-
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.builder.ThreadPoolProfileBuilder;
-import org.apache.camel.model.TimeUnitAdapter;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.ThreadPoolProfile;
 import org.apache.camel.support.CamelContextHelper;
@@ -47,9 +44,9 @@ public abstract class AbstractCamelThreadPoolFactoryBean extends AbstractCamelFa
     @Metadata(description = "Sets the keep alive time for inactive threads")
     private String keepAliveTime;
     @XmlAttribute
-    @XmlJavaTypeAdapter(TimeUnitAdapter.class)
-    @Metadata(description = "Sets the time unit used for keep alive time", defaultValue = "SECONDS")
-    private TimeUnit timeUnit = TimeUnit.SECONDS;
+    @Metadata(description = "Sets the time unit used for keep alive time", defaultValue = "SECONDS", javaType = "java.util.concurrent.TimeUnit",
+            enums = "NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES,HOURS,DAYS")
+    private String timeUnit = TimeUnit.SECONDS.name();
     @XmlAttribute
     @Metadata(description = "Sets the maximum number of tasks in the work queue. Use -1 for an unbounded queue")
     private String maxQueueSize;
@@ -92,11 +89,12 @@ public abstract class AbstractCamelThreadPoolFactoryBean extends AbstractCamelFa
         if (allowCoreThreadTimeOut != null) {
             allow = CamelContextHelper.parseBoolean(getCamelContext(), allowCoreThreadTimeOut);
         }
+        TimeUnit tu = CamelContextHelper.parse(getCamelContext(), TimeUnit.class, timeUnit);
 
         ThreadPoolProfile profile = new ThreadPoolProfileBuilder(getId())
                 .poolSize(size)
                 .maxPoolSize(max)
-                .keepAliveTime(keepAlive, timeUnit)
+                .keepAliveTime(keepAlive, tu)
                 .maxQueueSize(queueSize)
                 .allowCoreThreadTimeOut(allow)
                 .rejectedPolicy(rejectedPolicy)
@@ -140,11 +138,11 @@ public abstract class AbstractCamelThreadPoolFactoryBean extends AbstractCamelFa
         this.keepAliveTime = keepAliveTime;
     }
 
-    public TimeUnit getTimeUnit() {
+    public String getTimeUnit() {
         return timeUnit;
     }
 
-    public void setTimeUnit(TimeUnit timeUnit) {
+    public void setTimeUnit(String timeUnit) {
         this.timeUnit = timeUnit;
     }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/model/dataformat/Any23DataFormatTest.java b/core/camel-core/src/test/java/org/apache/camel/model/dataformat/Any23DataFormatTest.java
index 8680a1e..867290f 100644
--- a/core/camel-core/src/test/java/org/apache/camel/model/dataformat/Any23DataFormatTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/model/dataformat/Any23DataFormatTest.java
@@ -32,10 +32,8 @@ public class Any23DataFormatTest {
 
     private final String xml = "<?xml version=\"1.0\"?>"
         + "<any23 xmlns=\"http://camel.apache.org/schema/spring\">"
-        + "<configuration>"
-        + "<property key=\"k1\" value=\"v1\" />"
-        + "<property key=\"k2\" value=\"v2\" />"
-        + "</configuration>"
+        + "<configuration key=\"k1\" value=\"v1\" />"
+        + "<configuration key=\"k2\" value=\"v2\" />"
         + "</any23>";
 
     @Test
@@ -47,6 +45,6 @@ public class Any23DataFormatTest {
         final StringReader reader = new StringReader(xml);
         final Any23DataFormat any23DataFormat = (Any23DataFormat) unmarshaller.unmarshal(reader);
 
-        assertThat(any23DataFormat.getConfiguration()).containsOnly(entry("k1", "v1"), entry("k2", "v2"));
+        assertThat(any23DataFormat.getConfigurationAsMap()).containsOnly(entry("k1", "v1"), entry("k2", "v2"));
     }
 }
diff --git a/core/camel-management-api/pom.xml b/core/camel-management-api/pom.xml
index d9663fb..ebea157 100644
--- a/core/camel-management-api/pom.xml
+++ b/core/camel-management-api/pom.xml
@@ -287,18 +287,6 @@
                                 <FOO_SERVICE_PORT>8081</FOO_SERVICE_PORT>
                             </environmentVariables>
                         </configuration>
-                        <dependencies>
-                            <dependency>
-                                <groupId>jakarta.xml.bind</groupId>
-                                <artifactId>jakarta.xml.bind-api</artifactId>
-                                <version>${jakarta-jaxb-version}</version>
-                            </dependency>
-                            <dependency>
-                                <groupId>org.glassfish.jaxb</groupId>
-                                <artifactId>jaxb-runtime</artifactId>
-                                <version>${glassfish-jaxb-runtime-version}</version>
-                            </dependency>
-                        </dependencies>
                     </plugin>
                 </plugins>
             </build>
diff --git a/core/camel-management/pom.xml b/core/camel-management/pom.xml
index 4bc6aee..bc323eb 100644
--- a/core/camel-management/pom.xml
+++ b/core/camel-management/pom.xml
@@ -375,18 +375,6 @@
                                 <FOO_SERVICE_PORT>8081</FOO_SERVICE_PORT>
                             </environmentVariables>
                         </configuration>
-                        <dependencies>
-                            <dependency>
-                                <groupId>jakarta.xml.bind</groupId>
-                                <artifactId>jakarta.xml.bind-api</artifactId>
-                                <version>${jakarta-jaxb-version}</version>
-                            </dependency>
-                            <dependency>
-                                <groupId>org.glassfish.jaxb</groupId>
-                                <artifactId>jaxb-runtime</artifactId>
-                                <version>${glassfish-jaxb-runtime-version}</version>
-                            </dependency>
-                        </dependencies>
                     </plugin>
                 </plugins>
             </build>
diff --git a/core/camel-xml-io/pom.xml b/core/camel-xml-io/pom.xml
index ec6ad14..4dea30f 100644
--- a/core/camel-xml-io/pom.xml
+++ b/core/camel-xml-io/pom.xml
@@ -37,13 +37,6 @@
 
     <dependencies>
 
-        <!-- need JAXB API for @XmlAdapter -->
-        <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
-            <version>${jakarta-jaxb-version}</version>
-        </dependency>
-
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-core-engine</artifactId>
diff --git a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
index 0520c5e..0cf7eaa 100644
--- a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
+++ b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
@@ -1634,7 +1634,7 @@ public class ModelParser extends BaseParser {
             return true;
         }, (def, key) -> {
             switch (key) {
-                case "configuration": def.setConfiguration(unmarshal(new PropertyDescriptionsAdapter(), doParsePropertyDefinitions())); break;
+                case "configuration": doAdd(doParsePropertyDefinition(), def.getConfiguration(), def::setConfiguration); break;
                 case "extractors": doAdd(doParseText(), def.getExtractors(), def::setExtractors); break;
                 default: return false;
             }
@@ -2171,104 +2171,15 @@ public class ModelParser extends BaseParser {
             return true;
         }, (def, key) -> {
             switch (key) {
-                case "aliases": def.setAliases(unmarshal(new XStreamDataFormat.AliasAdapter(), doParseAliasList())); break;
-                case "converters": def.setConverters(unmarshal(new XStreamDataFormat.ConvertersAdapter(), doParseConverterList())); break;
-                case "implicitCollections": def.setImplicitCollections(unmarshal(new XStreamDataFormat.ImplicitCollectionsAdapter(), doParseImplicitCollectionList())); break;
-                case "omitFields": def.setOmitFields(unmarshal(new XStreamDataFormat.OmitFieldsAdapter(), doParseOmitFieldList())); break;
+                case "aliases": doAdd(doParsePropertyDefinition(), def.getAliases(), def::setAliases); break;
+                case "converters": doAdd(doParsePropertyDefinition(), def.getConverters(), def::setConverters); break;
+                case "implicitCollections": doAdd(doParsePropertyDefinition(), def.getImplicitCollections(), def::setImplicitCollections); break;
+                case "omitFields": doAdd(doParsePropertyDefinition(), def.getOmitFields(), def::setOmitFields); break;
                 default: return false;
             }
             return true;
         }, noValueHandler());
     }
-    protected XStreamDataFormat.ConverterList doParseConverterList() throws IOException, XmlPullParserException {
-        return doParse(new XStreamDataFormat.ConverterList(),
-            noAttributeHandler(), (def, key) -> {
-            if ("converter".equals(key)) {
-                doAdd(doParseConverterEntry(), def.getList(), def::setList);
-                return true;
-            }
-            return false;
-        }, noValueHandler());
-    }
-    protected XStreamDataFormat.AliasList doParseAliasList() throws IOException, XmlPullParserException {
-        return doParse(new XStreamDataFormat.AliasList(),
-            noAttributeHandler(), (def, key) -> {
-            if ("alias".equals(key)) {
-                doAdd(doParseAliasEntry(), def.getList(), def::setList);
-                return true;
-            }
-            return false;
-        }, noValueHandler());
-    }
-    protected XStreamDataFormat.OmitFieldList doParseOmitFieldList() throws IOException, XmlPullParserException {
-        return doParse(new XStreamDataFormat.OmitFieldList(),
-            noAttributeHandler(), (def, key) -> {
-            if ("omitField".equals(key)) {
-                doAdd(doParseOmitFieldEntry(), def.getList(), def::setList);
-                return true;
-            }
-            return false;
-        }, noValueHandler());
-    }
-    protected XStreamDataFormat.ImplicitCollectionList doParseImplicitCollectionList() throws IOException, XmlPullParserException {
-        return doParse(new XStreamDataFormat.ImplicitCollectionList(),
-            noAttributeHandler(), (def, key) -> {
-            if ("class".equals(key)) {
-                doAdd(doParseImplicitCollectionEntry(), def.getList(), def::setList);
-                return true;
-            }
-            return false;
-        }, noValueHandler());
-    }
-    protected XStreamDataFormat.AliasEntry doParseAliasEntry() throws IOException, XmlPullParserException {
-        return doParse(new XStreamDataFormat.AliasEntry(), (def, key, val) -> {
-            switch (key) {
-                case "class": def.setClsName(val); break;
-                case "name": def.setName(val); break;
-                default: return false;
-            }
-            return true;
-        }, noElementHandler(), noValueHandler());
-    }
-    protected XStreamDataFormat.ConverterEntry doParseConverterEntry() throws IOException, XmlPullParserException {
-        return doParse(new XStreamDataFormat.ConverterEntry(), (def, key, val) -> {
-            if ("class".equals(key)) {
-                def.setClsName(val);
-                return true;
-            }
-            return false;
-        }, noElementHandler(), noValueHandler());
-    }
-    protected XStreamDataFormat.ImplicitCollectionEntry doParseImplicitCollectionEntry() throws IOException, XmlPullParserException {
-        return doParse(new XStreamDataFormat.ImplicitCollectionEntry(), (def, key, val) -> {
-            if ("name".equals(key)) {
-                def.setClsName(val);
-                return true;
-            }
-            return false;
-        }, (def, key) -> {
-            if ("field".equals(key)) {
-                doAdd(doParseText(), def.getFields(), def::setFields);
-                return true;
-            }
-            return false;
-        }, noValueHandler());
-    }
-    protected XStreamDataFormat.OmitFieldEntry doParseOmitFieldEntry() throws IOException, XmlPullParserException {
-        return doParse(new XStreamDataFormat.OmitFieldEntry(), (def, key, val) -> {
-            if ("class".equals(key)) {
-                def.setClsName(val);
-                return true;
-            }
-            return false;
-        }, (def, key) -> {
-            if ("field".equals(key)) {
-                doAdd(doParseText(), def.getFields(), def::setFields);
-                return true;
-            }
-            return false;
-        }, noValueHandler());
-    }
     protected XmlRpcDataFormat doParseXmlRpcDataFormat() throws IOException, XmlPullParserException {
         return doParse(new XmlRpcDataFormat(), (def, key, val) -> {
             if ("request".equals(key)) {
diff --git a/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/BaseParser.java b/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/BaseParser.java
index 642b32e..8b166e6 100644
--- a/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/BaseParser.java
+++ b/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/BaseParser.java
@@ -29,8 +29,6 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.function.Consumer;
 
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-
 import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.xml.io.MXParser;
 import org.apache.camel.xml.io.XmlPullParser;
@@ -138,14 +136,6 @@ public class BaseParser {
         existing.add(element);
     }
 
-    protected <V, B> B unmarshal(XmlAdapter<V, B> adapter, V value) throws XmlPullParserException {
-        try {
-            return adapter.unmarshal(value);
-        } catch (Exception e) {
-            throw new XmlPullParserException("Unable to unmarshal value", parser, e);
-        }
-    }
-
     @SuppressWarnings("unchecked")
     protected <T> void doAdd(T element, T[] existing, Consumer<T[]> setter) {
         int len = existing != null ? existing.length : 0;
diff --git a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc
index 08dd296..bd1a648 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc
@@ -643,6 +643,37 @@ After:
 camel.component.activemq.broker-url=tcp://localhost:61616
 ----
 
+=== camel-any23
+
+The XML DSL has changed for the `<configuration>` element, which now
+is flattened so the key/values should be configured on it directly:
+
+Before:
+[source,mxl]
+----
+    <dataFormats>
+      <any23 id="any23" baseURI ="http://mock.foo/bar" outputFormat="TURTLE" >
+        <configuration>
+          <property key="any23.extraction.metadata.nesting" value="off" />
+          <property key="another-key" value="another-value" />
+        </configuration>
+        <extractors>html-head-title</extractors>
+      </any23>
+    </dataFormats>
+----
+
+After:
+[source,mxl]
+----
+    <dataFormats>
+      <any23 id="any23" baseURI ="http://mock.foo/bar" outputFormat="TURTLE" >
+        <configuration key="any23.extraction.metadata.nesting" value="off"/>
+        <configuration key="another-key" value="another-value"/>
+        <extractors>html-head-title</extractors>
+      </any23>
+    </dataFormats>
+----
+
 === camel-infinispan
 
 Camel now requires endpoint URIs to include context-path which means
@@ -654,6 +685,49 @@ The google-pubnub component has been improved to use a new Java library and beco
 
 Support for Apache Karaf has been removed.
 
+=== camel-xstream
+
+The XML DSL has changed for the `<converters>`, `<alias>`, `implicitCollections`, and `omitFields` elements,
+which now is flattened so the key/values should be configured on it directly.
+
+Before:
+[source,xml]
+----
+<xstream id="xstream-1" mode="NO_REFERENCES"
+    permissions="-org.apache.camel.dataformat.xstream.*,org.apache.camel.dataformat.xstream.PurchaseHistory,org.apache.camel.dataformat.xstream.PurchaseOrder">
+    <converters>
+        <converter class="org.apache.camel.dataformat.xstream.XStreamConfigurationTest$PurchaseOrderConverter" />
+    </converters>
+    <aliases>
+                <alias name="purchase-order" class="org.apache.camel.dataformat.xstream.PurchaseOrder" />
+    </aliases>
+    <implicitCollections>
+       <class name="org.apache.camel.dataformat.xstream.PurchaseHistory">
+          <field>history</field>
+       </class>
+    </implicitCollections>
+</xstream>
+----
+
+After:
+[source,xml]
+----
+<xstream id="xstream-1" mode="NO_REFERENCES"
+    permissions="-org.apache.camel.dataformat.xstream.*,org.apache.camel.dataformat.xstream.PurchaseHistory,org.apache.camel.dataformat.xstream.PurchaseOrder">
+    <converters key="purchase-converter" value="org.apache.camel.dataformat.xstream.XStreamConfigurationTest$PurchaseOrderConverter"/>
+    <aliases key="purchase-order" value="org.apache.camel.dataformat.xstream.PurchaseOrder"/>
+    <implicitCollections key="org.apache.camel.dataformat.xstream.PurchaseHistory" value="history"/>
+</xstream>
+----
+
+Multiple values for `implicitCollections` and `omitFields` can be separated by comma
+
+For example:
+[source,xml]
+----
+    <implicitCollections key="org.apache.camel.dataformat.xstream.PurchaseHistory" value="history,adress"/>
+----
+
 === Endpoint URIs without context path
 
 Previously Camel components may work by referring to their name only without a colon and context path (eg `log`)


[camel] 02/02: Make JAXB Api optional on camel-core-engine

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 8ead57d1311fd34f7c6b9d88e100bc284801ca8c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Mar 12 15:50:58 2020 +0100

    Make JAXB Api optional on camel-core-engine
---
 core/camel-core-engine/pom.xml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/core/camel-core-engine/pom.xml b/core/camel-core-engine/pom.xml
index 56a2d04..e0bf3cb 100644
--- a/core/camel-core-engine/pom.xml
+++ b/core/camel-core-engine/pom.xml
@@ -54,6 +54,7 @@
             <groupId>jakarta.xml.bind</groupId>
             <artifactId>jakarta.xml.bind-api</artifactId>
             <version>${jakarta-jaxb-version}</version>
+            <optional>true</optional>
         </dependency>
 
         <!-- required dependencies by camel-core -->