CAMEL-9649: Allow to turn off object factory with jaxb data format
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/72141c6d Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/72141c6d Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/72141c6d Branch: refs/heads/master Commit: 72141c6d61ca8337be13fc19ef5d84ef20d3d413 Parents: f158076 Author: Claus Ibsen <davscl...@apache.org> Authored: Tue Mar 8 09:38:29 2016 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Tue Mar 8 09:38:29 2016 +0100 ---------------------------------------------------------------------- .../camel/model/dataformat/JaxbDataFormat.java | 20 ++++++++++++++++++++ .../camel/converter/jaxb/JaxbDataFormat.java | 13 ++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/72141c6d/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 ca933ed..c894b5d 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 @@ -44,6 +44,8 @@ public class JaxbDataFormat extends DataFormatDefinition { @XmlAttribute private Boolean prettyPrint; @XmlAttribute + private Boolean objectFactory; + @XmlAttribute private Boolean ignoreJAXBElement; @XmlAttribute private Boolean mustBeJAXBElement; @@ -113,6 +115,18 @@ public class JaxbDataFormat extends DataFormatDefinition { this.prettyPrint = prettyPrint; } + public Boolean getObjectFactory() { + return objectFactory; + } + + /** + * Whether to allow using ObjectFactory classes to create the POJO classes during marshalling. + * This only applies to POJO classes that has not been annotated with JAXB and providing jaxb.index descriptor files. + */ + public void setObjectFactory(Boolean objectFactory) { + this.objectFactory = objectFactory; + } + public Boolean getIgnoreJAXBElement() { return ignoreJAXBElement; } @@ -253,6 +267,12 @@ public class JaxbDataFormat extends DataFormatDefinition { } else { // the default value is true setProperty(camelContext, dataFormat, "prettyPrint", Boolean.TRUE); } + answer = ObjectHelper.toBoolean(getObjectFactory()); + if (answer != null && !answer) { + setProperty(camelContext, dataFormat, "objectFactory", Boolean.FALSE); + } else { // the default value is true + setProperty(camelContext, dataFormat, "objectFactory", Boolean.TRUE); + } answer = ObjectHelper.toBoolean(getIgnoreJAXBElement()); if (answer != null && !answer) { setProperty(camelContext, dataFormat, "ignoreJAXBElement", Boolean.FALSE); http://git-wip-us.apache.org/repos/asf/camel/blob/72141c6d/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 95389ee..9fbd1bc 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 @@ -85,6 +85,7 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, DataFo private String noNamespaceSchemaLocation; private boolean prettyPrint = true; + private boolean objectFactory = true; private boolean ignoreJAXBElement = true; private boolean mustBeJAXBElement = true; private boolean filterNonXmlChars; @@ -176,7 +177,7 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, DataFo marshaller.marshal(element, stream); } return; - } else if (element != null) { + } else if (objectFactory && element != null) { Method objectFactoryMethod = JaxbHelper.getJaxbElementFactoryMethod(camelContext, element.getClass()); if (objectFactoryMethod != null) { try { @@ -316,6 +317,14 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, DataFo this.prettyPrint = prettyPrint; } + public boolean isObjectFactory() { + return objectFactory; + } + + public void setObjectFactory(boolean objectFactory) { + this.objectFactory = objectFactory; + } + public boolean isFragment() { return fragment; } @@ -428,6 +437,8 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, DataFo if (schema != null) { cachedSchema = createSchema(getSources()); } + + LOG.debug("JaxbDataFormat [prettyPrint={}, objectFactory={}]", prettyPrint, objectFactory); } @Override