CAMEL-10219: Add support in JAXB module to use injected CharacterEscapeHandler / custom properties. This closes #1109.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/54061ed1 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/54061ed1 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/54061ed1 Branch: refs/heads/master Commit: 54061ed113536dd1cf03755b11de480164fe77cd Parents: 08983ab Author: Claus Ibsen <davscl...@apache.org> Authored: Mon Aug 8 08:18:26 2016 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Aug 8 08:18:26 2016 +0200 ---------------------------------------------------------------------- .../camel/model/dataformat/JaxbDataFormat.java | 23 +++++++++++- .../camel/component/gson/GsonDataFormat.java | 1 - .../camel/converter/jaxb/JaxbConstants.java | 10 +++--- .../camel/converter/jaxb/JaxbDataFormat.java | 37 +++++++++++--------- .../springboot/JaxbDataFormatConfiguration.java | 13 +++++++ 5 files changed, 61 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/54061ed1/camel-core/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java index c894b5d..eb10b83 100644 --- a/camel-core/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java +++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java @@ -16,6 +16,7 @@ */ package org.apache.camel.model.dataformat; +import java.util.Map; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; @@ -26,6 +27,7 @@ import org.apache.camel.CamelContext; import org.apache.camel.model.DataFormatDefinition; import org.apache.camel.spi.DataFormat; import org.apache.camel.spi.Metadata; +import org.apache.camel.util.CamelContextHelper; import org.apache.camel.util.ObjectHelper; /** @@ -68,6 +70,8 @@ public class JaxbDataFormat extends DataFormatDefinition { private String schemaLocation; @XmlAttribute private String noNamespaceSchemaLocation; + @XmlAttribute + private String jaxbProviderProperties; public JaxbDataFormat() { super("jaxb"); @@ -259,6 +263,18 @@ public class JaxbDataFormat extends DataFormatDefinition { this.noNamespaceSchemaLocation = schemaLocation; } + public String getJaxbProviderProperties() { + return jaxbProviderProperties; + } + + /** + * Refers to a custom java.util.Map to lookup in the registry containing custom JAXB provider properties + * to be used with the JAXB marshaller. + */ + public void setJaxbProviderProperties(String jaxbProviderProperties) { + this.jaxbProviderProperties = jaxbProviderProperties; + } + @Override protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) { Boolean answer = ObjectHelper.toBoolean(getPrettyPrint()); @@ -297,6 +313,8 @@ public class JaxbDataFormat extends DataFormatDefinition { } else { // the default value is false setProperty(camelContext, dataFormat, "fragment", Boolean.FALSE); } + + setProperty(camelContext, dataFormat, "contextPath", contextPath); if (partClass != null) { setProperty(camelContext, dataFormat, "partClass", partClass); } @@ -309,7 +327,6 @@ public class JaxbDataFormat extends DataFormatDefinition { if (namespacePrefixRef != null) { setProperty(camelContext, dataFormat, "namespacePrefixRef", namespacePrefixRef); } - setProperty(camelContext, dataFormat, "contextPath", contextPath); if (schema != null) { setProperty(camelContext, dataFormat, "schema", schema); } @@ -322,5 +339,9 @@ public class JaxbDataFormat extends DataFormatDefinition { if (noNamespaceSchemaLocation != null) { setProperty(camelContext, dataFormat, "noNamespaceSchemaLocation", noNamespaceSchemaLocation); } + if (jaxbProviderProperties != null) { + Map map = CamelContextHelper.mandatoryLookup(camelContext, jaxbProviderProperties, Map.class); + setProperty(camelContext, dataFormat, "jaxbProviderProperties", map); + } } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/54061ed1/components/camel-gson/src/main/java/org/apache/camel/component/gson/GsonDataFormat.java ---------------------------------------------------------------------- diff --git a/components/camel-gson/src/main/java/org/apache/camel/component/gson/GsonDataFormat.java b/components/camel-gson/src/main/java/org/apache/camel/component/gson/GsonDataFormat.java index 79ccb5e..e480c5d 100644 --- a/components/camel-gson/src/main/java/org/apache/camel/component/gson/GsonDataFormat.java +++ b/components/camel-gson/src/main/java/org/apache/camel/component/gson/GsonDataFormat.java @@ -25,7 +25,6 @@ import java.io.OutputStreamWriter; import java.lang.reflect.Type; import java.util.Arrays; import java.util.List; -import java.util.Map; import com.google.gson.ExclusionStrategy; import com.google.gson.FieldNamingPolicy; http://git-wip-us.apache.org/repos/asf/camel/blob/54061ed1/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbConstants.java ---------------------------------------------------------------------- diff --git a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbConstants.java b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbConstants.java index 4f47efb..a1183cd 100644 --- a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbConstants.java +++ b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbConstants.java @@ -18,12 +18,12 @@ package org.apache.camel.converter.jaxb; /** * Constants used by Camel Jaxb module - * - * */ public interface JaxbConstants { - - /** Key to identify marshaller properties in the exchange specific to JAX-RI implementation */ - String JAXB_PROVIDER_PROPERTIES = "CamelJaxbProviderCustomProperties"; + + /** + * Key to identify custom marshaller properties in the exchange specific to JAX-RI implementation + */ + String JAXB_PROVIDER_PROPERTIES = "CamelJaxbProviderProperties"; } http://git-wip-us.apache.org/repos/asf/camel/blob/54061ed1/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java ---------------------------------------------------------------------- diff --git a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java index b8009d5..fbd6636 100644 --- a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java +++ b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java @@ -48,6 +48,8 @@ import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; +import org.xml.sax.SAXException; + import org.apache.camel.CamelContext; import org.apache.camel.CamelContextAware; import org.apache.camel.Exchange; @@ -61,7 +63,7 @@ import org.apache.camel.util.CamelContextHelper; import org.apache.camel.util.IOHelper; import org.apache.camel.util.ObjectHelper; import org.apache.camel.util.ResourceHelper; -import org.xml.sax.SAXException; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -103,7 +105,7 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, DataFo private JaxbXmlStreamWriterWrapper xmlStreamWriterWrapper; private TypeConverter typeConverter; private Schema cachedSchema; - private Map<String, Object> jaxbProviderPropertiesMap; + private Map<String, Object> jaxbProviderProperties; public JaxbDataFormat() { } @@ -149,13 +151,16 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, DataFo if (namespacePrefixMapper != null) { marshaller.setProperty(namespacePrefixMapper.getRegistrationKey(), namespacePrefixMapper); } - // Inject any JAX-RI custom properties from the exchange or from the instance into the marshaller - Map<String, Object> jaxbProviderPropertiesMap = exchange.getProperty(JaxbConstants.JAXB_PROVIDER_PROPERTIES, Map.class); - if(jaxbProviderPropertiesMap == null) { - jaxbProviderPropertiesMap = getJaxbProviderPropertiesMap(); + // Inject any JAX-RI custom properties from the exchange or from the instance into the marshaller + Map<String, Object> customProperties = exchange.getProperty(JaxbConstants.JAXB_PROVIDER_PROPERTIES, Map.class); + if (customProperties == null) { + customProperties = getJaxbProviderProperties(); } - if(jaxbProviderPropertiesMap != null) { - for(Entry<String, Object> property : jaxbProviderPropertiesMap.entrySet()) { + if (customProperties != null) { + for (Entry<String, Object> property : customProperties.entrySet()) { + if (LOG.isDebugEnabled()) { + LOG.debug("Using JAXB Provider Property {}={}", property.getKey(), property.getValue()); + } marshaller.setProperty(property.getKey(), property.getValue()); } } @@ -425,6 +430,14 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, DataFo this.noNamespaceSchemaLocation = schemaLocation; } + public Map<String, Object> getJaxbProviderProperties() { + return jaxbProviderProperties; + } + + public void setJaxbProviderProperties(Map<String, Object> jaxbProviderProperties) { + this.jaxbProviderProperties = jaxbProviderProperties; + } + @Override @SuppressWarnings("unchecked") protected void doStart() throws Exception { @@ -549,12 +562,4 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, DataFo } } - public Map<String, Object> getJaxbProviderPropertiesMap() { - return jaxbProviderPropertiesMap; - } - - public void setJaxbProviderPropertiesMap(Map<String, Object> jaxbProviderPropertiesMap) { - this.jaxbProviderPropertiesMap = jaxbProviderPropertiesMap; - } - } http://git-wip-us.apache.org/repos/asf/camel/blob/54061ed1/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/springboot/JaxbDataFormatConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/springboot/JaxbDataFormatConfiguration.java b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/springboot/JaxbDataFormatConfiguration.java index d521c10..267bc12 100644 --- a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/springboot/JaxbDataFormatConfiguration.java +++ b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/springboot/JaxbDataFormatConfiguration.java @@ -104,6 +104,11 @@ public class JaxbDataFormatConfiguration { * To define the location of the namespaceless schema */ private String noNamespaceSchemaLocation; + /** + * Refers to a custom java.util.Map to lookup in the registry containing + * custom JAXB provider properties to be used with the JAXB marshaller. + */ + private String jaxbProviderProperties; public String getContextPath() { return contextPath; @@ -224,4 +229,12 @@ public class JaxbDataFormatConfiguration { public void setNoNamespaceSchemaLocation(String noNamespaceSchemaLocation) { this.noNamespaceSchemaLocation = noNamespaceSchemaLocation; } + + public String getJaxbProviderProperties() { + return jaxbProviderProperties; + } + + public void setJaxbProviderProperties(String jaxbProviderProperties) { + this.jaxbProviderProperties = jaxbProviderProperties; + } } \ No newline at end of file