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 2017/04/27 08:39:59 UTC

[1/3] camel git commit: CAMEL-5723 - naming fix

Repository: camel
Updated Branches:
  refs/heads/master 7cd7f480a -> c00d95352


CAMEL-5723 - naming fix


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

Branch: refs/heads/master
Commit: c00d953527b9bee0ebf4f46a75bb5a368a2449d3
Parents: 39d960b
Author: onders86 <on...@gmail.com>
Authored: Thu Apr 27 11:27:57 2017 +0300
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Apr 27 10:36:29 2017 +0200

----------------------------------------------------------------------
 .../java/org/apache/camel/converter/jaxb/JaxbDataFormat.java   | 6 +++---
 .../converter/jaxb/JaxbDataFormatPartClassHeaderTest.java      | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/c00d9535/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 4950950..b78d516 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
@@ -183,9 +183,9 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, DataFo
         throws XMLStreamException, JAXBException, NoTypeConversionAvailableException, IOException, InvalidPayloadException {
 
         Object element = graph;
-        QName  partNamespaceOnDataFormat = getPartNamespace();
-        String partClassFromHeader = (String)exchange.getIn().getHeader(JaxbConstants.JAXB_PART_CLASS);
-        String partNamespaceFromHeader = (String)exchange.getIn().getHeader(JaxbConstants.JAXB_PART_NAMESPACE);
+        QName partNamespaceOnDataFormat = getPartNamespace();
+        String partClassFromHeader = exchange.getIn().getHeader(JaxbConstants.JAXB_PART_CLASS, String.class);
+        String partNamespaceFromHeader = exchange.getIn().getHeader(JaxbConstants.JAXB_PART_NAMESPACE, String.class);
         if ((partialClass != null || partClassFromHeader != null)
                 && (partNamespaceOnDataFormat != null || partNamespaceFromHeader != null)) {
             if (partClassFromHeader != null) {

http://git-wip-us.apache.org/repos/asf/camel/blob/c00d9535/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatPartClassHeaderTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatPartClassHeaderTest.java b/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatPartClassHeaderTest.java
index 8391fb3..f7ec07d 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatPartClassHeaderTest.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatPartClassHeaderTest.java
@@ -31,7 +31,7 @@ public class JaxbDataFormatPartClassHeaderTest extends CamelTestSupport {
     private MockEndpoint mockMarshall;
 
     @Test
-    public void testMarshallMultipleNamespaces() throws Exception {
+    public void testMarshallIfPartClassSetInHeaders() throws Exception {
         mockMarshall.expectedMessageCount(1);
 
         Address address = new Address();


[2/3] camel git commit: CAMEL-5723 - update adoc

Posted by da...@apache.org.
CAMEL-5723 - update adoc


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

Branch: refs/heads/master
Commit: 39d960be54e2b0d1779388d7ca26b0a8ddb81ab4
Parents: 0351918
Author: onders86 <on...@gmail.com>
Authored: Thu Apr 27 09:16:56 2017 +0300
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Apr 27 10:36:29 2017 +0200

----------------------------------------------------------------------
 .../camel-jaxb/src/main/docs/jaxb-dataformat.adoc | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/39d960be/components/camel-jaxb/src/main/docs/jaxb-dataformat.adoc
----------------------------------------------------------------------
diff --git a/components/camel-jaxb/src/main/docs/jaxb-dataformat.adoc b/components/camel-jaxb/src/main/docs/jaxb-dataformat.adoc
index 861381d..84b8584 100644
--- a/components/camel-jaxb/src/main/docs/jaxb-dataformat.adoc
+++ b/components/camel-jaxb/src/main/docs/jaxb-dataformat.adoc
@@ -88,10 +88,24 @@ generated code does not have @XmlRootElement annotation, sometimes you
 need unmarshall only part of tree. +
  In that case you can use partial unmarshalling. To enable this
 behaviours you need set property `partClass`. Camel will pass this class
-to JAXB's unmarshaler.
+to JAXB's unmarshaler. If `JaxbConstants.JAXB_PART_CLASS` is set as
+one of headers, (even if partClass property is set on DataFormat), the property
+on DataFormat is surpassed and the one set in the headers is used.
 
 For marshalling you have to add `partNamespace` attribute with QName of
-destination namespace. Example of Spring DSL you can find above.
+destination namespace. Example of Spring DSL you can find above. 
+If `JaxbConstants.JAXB_PART_NAMESPACE` is set as
+one of headers, (even if partNamespace property is set on DataFormat), the property
+on DataFormat is surpassed and the one set in the headers is used. While setting 
+`partNamespace` through `JaxbConstants.JAXB_PART_NAMESPACE`, please 
+note that you need to specify its value {[namespaceUri]}[localPart]
+
+[source,java]
+--------------------------------------------------------------------------------------
+   ...
+   .setHeader(JaxbConstants.JAXB_PART_NAMESPACE, simple("{http://www.camel.apache.org/jaxb/example/address/1}address"));
+   ...
+--------------------------------------------------------------------------------------
 
 ### Fragment
 


[3/3] camel git commit: CAMEL-5723 - set headers while setting partClass and partNamespace properties

Posted by da...@apache.org.
CAMEL-5723 - set headers while setting partClass and partNamespace properties


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

Branch: refs/heads/master
Commit: 03519184b36a998a5197383f8e37c6c0d8221e21
Parents: 7cd7f48
Author: onders86 <on...@gmail.com>
Authored: Thu Apr 27 09:16:24 2017 +0300
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Apr 27 10:36:29 2017 +0200

----------------------------------------------------------------------
 .../camel/converter/jaxb/JaxbConstants.java     |  3 +
 .../camel/converter/jaxb/JaxbDataFormat.java    | 28 ++++++-
 .../jaxb/JaxbDataFormatPartClassHeaderTest.java | 80 ++++++++++++++++++++
 3 files changed, 108 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/03519184/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 a1183cd..f9e7115 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
@@ -25,5 +25,8 @@ public interface JaxbConstants {
      * Key to identify custom marshaller properties in the exchange specific to JAX-RI implementation
      */
     String JAXB_PROVIDER_PROPERTIES = "CamelJaxbProviderProperties";
+    
+    String JAXB_PART_CLASS = "CamelJaxbPartClass";
+    String JAXB_PART_NAMESPACE = "CamelJaxbPartNamespace";
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/03519184/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 9506b5e..4950950 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
@@ -183,8 +183,22 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, DataFo
         throws XMLStreamException, JAXBException, NoTypeConversionAvailableException, IOException, InvalidPayloadException {
 
         Object element = graph;
-        if (partialClass != null && getPartNamespace() != null) {
-            element = new JAXBElement<Object>(getPartNamespace(), partialClass, graph);
+        QName  partNamespaceOnDataFormat = getPartNamespace();
+        String partClassFromHeader = (String)exchange.getIn().getHeader(JaxbConstants.JAXB_PART_CLASS);
+        String partNamespaceFromHeader = (String)exchange.getIn().getHeader(JaxbConstants.JAXB_PART_NAMESPACE);
+        if ((partialClass != null || partClassFromHeader != null)
+                && (partNamespaceOnDataFormat != null || partNamespaceFromHeader != null)) {
+            if (partClassFromHeader != null) {
+                try {
+                    partialClass = camelContext.getClassResolver().resolveMandatoryClass(partClassFromHeader, Object.class);
+                } catch (ClassNotFoundException e) {
+                    throw new JAXBException(e);
+                }
+            }
+            if (partNamespaceFromHeader != null) {
+                partNamespaceOnDataFormat = QName.valueOf(partNamespaceFromHeader);
+            }
+            element = new JAXBElement<Object>(partNamespaceOnDataFormat, partialClass, graph);
         }
 
         // only marshal if its possible
@@ -256,8 +270,16 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, DataFo
             } else {
                 xmlReader = typeConverter.convertTo(XMLStreamReader.class, stream);
             }
-            if (partialClass != null) {
+            String partClassFromHeader = (String)exchange.getIn().getHeader(JaxbConstants.JAXB_PART_CLASS);
+            if (partialClass != null || partClassFromHeader != null) {
                 // partial unmarshalling
+                if (partClassFromHeader != null) {
+                    try {
+                        partialClass = camelContext.getClassResolver().resolveMandatoryClass(partClassFromHeader, Object.class);
+                    } catch (ClassNotFoundException e) {
+                        throw new JAXBException(e);
+                    }
+                }
                 answer = createUnmarshaller().unmarshal(xmlReader, partialClass);
             } else {
                 answer = createUnmarshaller().unmarshal(xmlReader);

http://git-wip-us.apache.org/repos/asf/camel/blob/03519184/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatPartClassHeaderTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatPartClassHeaderTest.java b/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatPartClassHeaderTest.java
new file mode 100644
index 0000000..8391fb3
--- /dev/null
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatPartClassHeaderTest.java
@@ -0,0 +1,80 @@
+/**
+ * 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.converter.jaxb;
+
+import javax.xml.namespace.QName;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.example.Address;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class JaxbDataFormatPartClassHeaderTest extends CamelTestSupport {
+
+    @EndpointInject(uri = "mock:marshall")
+    private MockEndpoint mockMarshall;
+
+    @Test
+    public void testMarshallMultipleNamespaces() throws Exception {
+        mockMarshall.expectedMessageCount(1);
+
+        Address address = new Address();
+        address.setStreet("Main Street");
+        address.setStreetNumber("3a");
+        address.setZip("65843");
+        address.setCity("Sulzbach");
+        template.sendBody("direct:marshall", address);
+
+        assertMockEndpointsSatisfied();
+
+        String payload = mockMarshall.getExchanges().get(0).getIn().getBody(String.class);
+        log.info(payload);
+
+        assertTrue(payload.startsWith("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"));
+        assertTrue(payload.contains("<address:address"));
+        assertTrue(payload.contains("<address:street>Main Street</address:street>"));
+        assertTrue(payload.contains("<address:streetNumber>3a</address:streetNumber>"));
+        assertTrue(payload.contains("<address:zip>65843</address:zip>"));
+        assertTrue(payload.contains("<address:city>Sulzbach</address:city>"));
+        assertTrue(payload.contains("</address:address>"));
+
+        // the namespaces
+        assertTrue(payload.contains("xmlns:address=\"http://www.camel.apache.org/jaxb/example/address/1\""));
+        assertTrue(payload.contains("xmlns:order=\"http://www.camel.apache.org/jaxb/example/order/1\""));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                JaxbDataFormat jaxbDataFormat = new JaxbDataFormat();
+                jaxbDataFormat.setContextPath(Address.class.getPackage().getName());
+                jaxbDataFormat.setPartNamespace(new QName("http://www.camel.apache.org/jaxb/example/address/123", "addressToBeOverriden"));
+                jaxbDataFormat.setPrettyPrint(true);
+
+                from("direct:marshall")
+                        .setHeader(JaxbConstants.JAXB_PART_CLASS, simple("org.apache.camel.example.Address"))
+                        .setHeader(JaxbConstants.JAXB_PART_NAMESPACE, simple("{http://www.camel.apache.org/jaxb/example/address/1}address"))
+                        .marshal(jaxbDataFormat)
+                        .to("mock:marshall");
+            }
+        };
+    }
+}