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 2021/08/26 05:22:04 UTC

[camel] branch main updated: CAMEL-16891: camel-jaxb - Prefix mapper should be created via new constructor and not dynamic loaded which can cause problems for GraalVM based systems. Also no need to extend the com.sun class as the abstract class is sufficient.

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

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


The following commit(s) were added to refs/heads/main by this push:
     new 1c4bbbc  CAMEL-16891: camel-jaxb - Prefix mapper should be created via new constructor and not dynamic loaded which can cause problems for GraalVM based systems. Also no need to extend the com.sun class as the abstract class is sufficient.
1c4bbbc is described below

commit 1c4bbbc216d83fb1c956f72a15c3712fb3b4c7ad
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Aug 26 07:17:07 2021 +0200

    CAMEL-16891: camel-jaxb - Prefix mapper should be created via new constructor and not dynamic loaded which can cause problems for GraalVM based systems. Also no need to extend the com.sun class as the abstract class is sufficient.
---
 .../converter/jaxb/NamespacePrefixMapperFactory.java | 20 +++++++-------------
 ...Mapper.java => DefaultNamespacePrefixMapper.java} |  4 ++--
 2 files changed, 9 insertions(+), 15 deletions(-)

diff --git a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/NamespacePrefixMapperFactory.java b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/NamespacePrefixMapperFactory.java
index a463c74..93745f6 100644
--- a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/NamespacePrefixMapperFactory.java
+++ b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/NamespacePrefixMapperFactory.java
@@ -19,27 +19,21 @@ package org.apache.camel.converter.jaxb;
 import java.util.Map;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
+import org.apache.camel.converter.jaxb.mapper.DefaultNamespacePrefixMapper;
 
 /**
- * Factory for creating {@link JaxbNamespacePrefixMapper} which supports various JAXB-RI implementations.
+ * Factory for creating {@link JaxbNamespacePrefixMapper}.
  */
 public final class NamespacePrefixMapperFactory {
 
-    private static final String SUN_JAXB_21_MAPPER = "org.apache.camel.converter.jaxb.mapper.SunJaxb21NamespacePrefixMapper";
-
     private NamespacePrefixMapperFactory() {
     }
 
     static JaxbNamespacePrefixMapper newNamespacePrefixMapper(CamelContext camelContext, Map<String, String> namespaces) {
-
-        // try to load the Sun JAXB 2.1 based
-        Class<?> clazz = camelContext.getClassResolver().resolveClass(SUN_JAXB_21_MAPPER);
-        if (clazz != null) {
-            JaxbNamespacePrefixMapper mapper = (JaxbNamespacePrefixMapper) camelContext.getInjector().newInstance(clazz);
-            mapper.setNamespaces(namespaces);
-            return mapper;
-        }
-
-        throw new IllegalStateException("Cannot load CamelNamespacePrefixMapper class");
+        DefaultNamespacePrefixMapper mapper = new DefaultNamespacePrefixMapper();
+        CamelContextAware.trySetCamelContext(mapper, camelContext);
+        mapper.setNamespaces(namespaces);
+        return mapper;
     }
 }
diff --git a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/mapper/SunJaxb21NamespacePrefixMapper.java b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/mapper/DefaultNamespacePrefixMapper.java
similarity index 88%
rename from components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/mapper/SunJaxb21NamespacePrefixMapper.java
rename to components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/mapper/DefaultNamespacePrefixMapper.java
index 41f9e0f..ba1d5ad 100644
--- a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/mapper/SunJaxb21NamespacePrefixMapper.java
+++ b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/mapper/DefaultNamespacePrefixMapper.java
@@ -22,9 +22,9 @@ import com.sun.xml.bind.marshaller.NamespacePrefixMapper;
 import org.apache.camel.converter.jaxb.JaxbNamespacePrefixMapper;
 
 /**
- * A namespace prefix mapper which uses JAXB-RI 2.1 or better from SUN.
+ * A namespace prefix mapper which overrides SUN JAXB-RI to allow Camel to control the prefixes
  */
-public class SunJaxb21NamespacePrefixMapper extends NamespacePrefixMapper implements JaxbNamespacePrefixMapper {
+public class DefaultNamespacePrefixMapper extends NamespacePrefixMapper implements JaxbNamespacePrefixMapper {
 
     private Map<String, String> namespaces;