Repository: camel Updated Branches: refs/heads/master 5eed4d966 -> 77f3fe78b
CAMEL-7931 Supports multi-valued property in camel-jcr with thanks to Charlee Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/77f3fe78 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/77f3fe78 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/77f3fe78 Branch: refs/heads/master Commit: 77f3fe78baaddf082fb77aff2672bf47e4127c46 Parents: 5eed4d9 Author: Willem Jiang <willem.ji...@gmail.com> Authored: Mon Oct 20 15:16:52 2014 +0800 Committer: Willem Jiang <willem.ji...@gmail.com> Committed: Mon Oct 20 15:19:29 2014 +0800 ---------------------------------------------------------------------- .../apache/camel/component/jcr/JcrProducer.java | 17 ++++++-- .../camel/component/jcr/JcrGetNodeByIdTest.java | 8 ++++ .../component/jcr/JcrNodePathCreationTest.java | 46 ++++++++++++++++++-- 3 files changed, 65 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/77f3fe78/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java b/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java index 7234f30..7c2f141 100644 --- a/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java +++ b/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java @@ -53,8 +53,14 @@ public class JcrProducer extends DefaultProducer { Node node = findOrCreateNode(base, getNodeName(message)); Map<String, Object> headers = filterComponentHeaders(message.getHeaders()); for (String key : headers.keySet()) { - Value value = converter.convertTo(Value.class, exchange, message.getHeader(key)); - node.setProperty(key, value); + Object header = message.getHeader(key); + if (header != null && Object[].class.isAssignableFrom(header.getClass())) { + Value[] value = converter.convertTo(Value[].class, exchange, header); + node.setProperty(key, value); + } else { + Value value = converter.convertTo(Value.class, exchange, header); + node.setProperty(key, value); + } } node.addMixin("mix:referenceable"); exchange.getOut().setBody(node.getIdentifier()); @@ -66,7 +72,12 @@ public class JcrProducer extends DefaultProducer { while (properties.hasNext()) { Property property = properties.nextProperty(); Class<?> aClass = classForJCRType(property); - Object value = converter.convertTo(aClass, exchange, property.getValue()); + Object value; + if (property.isMultiple()) { + value = converter.convertTo(aClass, exchange, property.getValues()); + } else { + value = converter.convertTo(aClass, exchange, property.getValue()); + } message.setHeader(property.getName(), value); } } else { http://git-wip-us.apache.org/repos/asf/camel/blob/77f3fe78/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrGetNodeByIdTest.java ---------------------------------------------------------------------- diff --git a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrGetNodeByIdTest.java b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrGetNodeByIdTest.java index 3f525d6..c23c980 100644 --- a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrGetNodeByIdTest.java +++ b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrGetNodeByIdTest.java @@ -18,6 +18,8 @@ package org.apache.camel.component.jcr; import javax.jcr.Node; import javax.jcr.Session; +import javax.jcr.Value; +import javax.jcr.ValueFactory; import org.apache.camel.EndpointInject; import org.apache.camel.Exchange; @@ -43,6 +45,12 @@ public class JcrGetNodeByIdTest extends JcrRouteTestSupport { Node node = session.getRootNode().addNode("home").addNode("test"); node.setProperty("content.approved", APPROVED); node.setProperty("my.contents.property", CONTENT); + + + ValueFactory valFact = session.getValueFactory(); + Value[] vals = new Value[] {valFact.createValue("value-1"), valFact.createValue("value-2")}; + node.setProperty("my.multi.valued", vals); + identifier = node.getIdentifier(); session.save(); http://git-wip-us.apache.org/repos/asf/camel/blob/77f3fe78/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrNodePathCreationTest.java ---------------------------------------------------------------------- diff --git a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrNodePathCreationTest.java b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrNodePathCreationTest.java index ab91ff3..4ffa3c5 100644 --- a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrNodePathCreationTest.java +++ b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrNodePathCreationTest.java @@ -18,13 +18,32 @@ package org.apache.camel.component.jcr; import javax.jcr.Node; import javax.jcr.Session; +import javax.jcr.Value; +import javax.jcr.ValueFactory; import org.apache.camel.Exchange; import org.apache.camel.builder.RouteBuilder; +import org.junit.Before; import org.junit.Test; public class JcrNodePathCreationTest extends JcrRouteTestSupport { + private Value[] multiValued; + + @Override + @Before + public void setUp() throws Exception { + super.setUp(); + + Session session = openSession(); + + ValueFactory valFact = session.getValueFactory(); + multiValued = new Value[]{valFact.createValue("value-1"), + valFact.createValue("value-2")}; + + session.logout(); + } + @Test public void testJcrNodePathCreation() throws Exception { Exchange exchange = createExchangeWithBody("<body/>"); @@ -43,7 +62,28 @@ public class JcrNodePathCreationTest extends JcrRouteTestSupport { } } } - + + @Test + public void testJcrNodePathCreationMultiValued() throws Exception { + Exchange exchange = createExchangeWithBody(multiValued); + Exchange out = template.send("direct:a", exchange); + assertNotNull(out); + String uuid = out.getOut().getBody(String.class); + assertNotNull("Out body was null; expected JCR node UUID", uuid); + Session session = openSession(); + try { + Node node = session.getNodeByIdentifier(uuid); + assertNotNull(node); + assertEquals("/home/test/node/with/path", node.getPath()); + assertTrue(node.getProperty("my.contents.property").isMultiple()); + assertArrayEquals(multiValued, node.getProperty("my.contents.property").getValues()); + } finally { + if (session != null && session.isLive()) { + session.logout(); + } + } + } + @Override protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { @@ -51,10 +91,10 @@ public class JcrNodePathCreationTest extends JcrRouteTestSupport { public void configure() throws Exception { // START SNIPPET: jcr from("direct:a").setHeader(JcrConstants.JCR_NODE_NAME, constant("node/with/path")) - .setHeader("my.contents.property", body()).to("jcr://user:pass@repository/home/test"); + .setHeader("my.contents.property", body()).to("jcr://user:pass@repository/home/test"); // END SNIPPET: jcr } }; } - + }