You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2014/06/06 13:31:21 UTC

git commit: CAMEL-7484 Added an option to JaxbDataFormat to include schema location

Repository: camel
Updated Branches:
  refs/heads/master 5ebf252c2 -> ff3ecc603


CAMEL-7484 Added an option to JaxbDataFormat to include schema location


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

Branch: refs/heads/master
Commit: ff3ecc60331d6f0656d61805bca00da6042f06a7
Parents: 5ebf252
Author: Willem Jiang <wi...@gmail.com>
Authored: Fri Jun 6 19:29:20 2014 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Fri Jun 6 19:29:20 2014 +0800

----------------------------------------------------------------------
 .../camel/model/dataformat/JaxbDataFormat.java     | 13 +++++++++++++
 .../camel/converter/jaxb/JaxbDataFormat.java       | 13 +++++++++++++
 .../java/org/apache/camel/jaxb/CamelJaxbTest.java  | 17 +++++++++++++++++
 .../org/apache/camel/jaxb/CamelJaxbTest.xml        |  2 +-
 4 files changed, 44 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ff3ecc60/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 a0bc6f2..716f9c6 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
@@ -58,6 +58,8 @@ public class JaxbDataFormat extends DataFormatDefinition {
     private String namespacePrefixRef;
     @XmlAttribute
     private String xmlStreamWriterWrapper;
+    @XmlAttribute
+    private String schemaLocation;
 
     public JaxbDataFormat() {
         super("jaxb");
@@ -156,6 +158,14 @@ public class JaxbDataFormat extends DataFormatDefinition {
         this.xmlStreamWriterWrapper = xmlStreamWriterWrapperRef;
     }
 
+    public String getSchemaLocation() {
+        return schemaLocation;
+    }
+
+    public void setSchemaLocation(String schemaLocation) {
+        this.schemaLocation = schemaLocation;
+    }
+
     @Override
     protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         Boolean answer = ObjectHelper.toBoolean(getPrettyPrint());
@@ -201,5 +211,8 @@ public class JaxbDataFormat extends DataFormatDefinition {
         if (xmlStreamWriterWrapper != null) {
             setProperty(camelContext, dataFormat, "xmlStreamWriterWrapper", xmlStreamWriterWrapper);
         }
+        if (schemaLocation != null) {
+            setProperty(camelContext, dataFormat, "schemaLocation", schemaLocation);
+        }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/ff3ecc60/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 f63d91d..ae33062 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
@@ -77,6 +77,8 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, CamelC
     private JAXBContext context;
     private String contextPath;
     private String schema;
+    private String schemaLocation;
+   
     private boolean prettyPrint = true;
     private boolean ignoreJAXBElement = true;
     private boolean filterNonXmlChars;
@@ -123,6 +125,9 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, CamelC
             if (isFragment()) {
                 marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
             }
+            if (ObjectHelper.isNotEmpty(schemaLocation)) {
+                marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, schemaLocation);
+            }
             if (namespacePrefixMapper != null) {
                 marshaller.setProperty(namespacePrefixMapper.getRegistrationKey(), namespacePrefixMapper);
             }
@@ -321,6 +326,14 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, CamelC
     public void setXmlStreamWriterWrapper(JaxbXmlStreamWriterWrapper xmlStreamWriterWrapper) {
         this.xmlStreamWriterWrapper = xmlStreamWriterWrapper;
     }
+    
+    public String getSchemaLocation() {
+        return schemaLocation;
+    }
+
+    public void setSchemaLocation(String schemaLocation) {
+        this.schemaLocation = schemaLocation;
+    }
 
     @Override
     @SuppressWarnings("unchecked")

http://git-wip-us.apache.org/repos/asf/camel/blob/ff3ecc60/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbTest.java b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbTest.java
index ab1daf5..a57e389 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbTest.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbTest.java
@@ -79,6 +79,22 @@ public class CamelJaxbTest extends CamelTestSupport {
         assertTrue("Non-xml character unexpectedly did not get into marshalled contents", body
                 .contains("\u0004"));
     }
+    
+    @Test
+    public void testMarshalWithSchemaLocation() throws Exception {
+        PersonType person = new PersonType();
+        person.setFirstName("foo");
+        person.setLastName("bar");
+
+        MockEndpoint resultEndpoint = resolveMandatoryEndpoint("mock:result", MockEndpoint.class);
+        resultEndpoint.expectedMessageCount(1);
+        template.sendBody("direct:marshal", person);
+        resultEndpoint.assertIsSatisfied();
+
+        String body = resultEndpoint.getReceivedExchanges().get(0).getIn().getBody(String.class);
+        assertTrue("We should get the schemaLocation here", body
+                .contains("schemaLocation=\"person.xsd\""));
+    }
 
     @Test
     public void testCustomXmlStreamWriter() throws InterruptedException {
@@ -143,6 +159,7 @@ public class CamelJaxbTest extends CamelTestSupport {
 
             public void configure() throws Exception {
                 JaxbDataFormat dataFormat = new JaxbDataFormat("org.apache.camel.foo.bar");
+                dataFormat.setSchemaLocation("person.xsd");
                 dataFormat.setIgnoreJAXBElement(false);
 
                 JaxbDataFormat filterEnabledFormat = new JaxbDataFormat("org.apache.camel.foo.bar");

http://git-wip-us.apache.org/repos/asf/camel/blob/ff3ecc60/components/camel-jaxb/src/test/resources/org/apache/camel/jaxb/CamelJaxbTest.xml
----------------------------------------------------------------------
diff --git a/components/camel-jaxb/src/test/resources/org/apache/camel/jaxb/CamelJaxbTest.xml b/components/camel-jaxb/src/test/resources/org/apache/camel/jaxb/CamelJaxbTest.xml
index 1742ec8..b57b473 100644
--- a/components/camel-jaxb/src/test/resources/org/apache/camel/jaxb/CamelJaxbTest.xml
+++ b/components/camel-jaxb/src/test/resources/org/apache/camel/jaxb/CamelJaxbTest.xml
@@ -43,7 +43,7 @@
     <route>
       <from uri="direct:marshal"/>
       <marshal>
-        <jaxb contextPath="org.apache.camel.foo.bar"/>
+        <jaxb contextPath="org.apache.camel.foo.bar" schemaLocation="person.xsd"/>
       </marshal>          
       <to uri="mock:result"/>
     </route>