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 fd7c95096e2fa..de4b8f399e56f 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 @@ -19,6 +19,9 @@ import java.io.InputStream; import java.math.BigDecimal; import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + import javax.jcr.Node; import javax.jcr.Property; import javax.jcr.PropertyIterator; @@ -28,6 +31,7 @@ import javax.jcr.Value; import org.apache.camel.Exchange; +import org.apache.camel.Message; import org.apache.camel.TypeConverter; import org.apache.camel.impl.DefaultProducer; import org.apache.jackrabbit.util.Text; @@ -41,13 +45,15 @@ public JcrProducer(JcrEndpoint jcrEndpoint) throws RepositoryException { public void process(Exchange exchange) throws Exception { TypeConverter converter = exchange.getContext().getTypeConverter(); Session session = openSession(); - String operation = determineOperation(exchange); + Message message = exchange.getIn(); + String operation = determineOperation(message); try { if (JcrConstants.JCR_INSERT.equals(operation)) { Node base = findOrCreateNode(session.getRootNode(), getJcrEndpoint().getBase()); - Node node = findOrCreateNode(base, getNodeName(exchange)); - for (String key : exchange.getProperties().keySet()) { - Value value = converter.convertTo(Value.class, exchange, exchange.getProperty(key)); + Node node = findOrCreateNode(base, getNodeName(message)); + Map headers = filterComponentHeaders(message.getHeaders()); + for (String key : headers.keySet()) { + Value value = converter.convertTo(Value.class, exchange, message.getHeader(key)); node.setProperty(key, value); } node.addMixin("mix:referenceable"); @@ -60,7 +66,7 @@ public void process(Exchange exchange) throws Exception { Property property = properties.nextProperty(); Class aClass = classForJCRType(property); Object value = converter.convertTo(aClass, exchange, property.getValue()); - exchange.setProperty(property.getName(), value); + message.setHeader(property.getName(), value); } } else { throw new RuntimeException("Unsupported operation: " + operation); @@ -74,6 +80,17 @@ public void process(Exchange exchange) throws Exception { } } + private Map filterComponentHeaders(Map properties) { + Map result = new HashMap(properties.size()); + for (Map.Entry entry : properties.entrySet()) { + String key = entry.getKey(); + if (!key.equals(JcrConstants.JCR_NODE_NAME) && !key.equals(JcrConstants.JCR_OPERATION)) { + result.put(entry.getKey(), entry.getValue()); + } + } + return result; + } + private Class classForJCRType(Property property) throws RepositoryException { switch (property.getType()) { case PropertyType.STRING: @@ -107,16 +124,14 @@ private Class classForJCRType(Property property) throws RepositoryException { } } - private String determineOperation(Exchange exchange) { - String operation = exchange.getIn().getHeader(JcrConstants.JCR_OPERATION, String.class); + private String determineOperation(Message message) { + String operation = message.getHeader(JcrConstants.JCR_OPERATION, String.class); return operation != null ? operation : JcrConstants.JCR_INSERT; } - private String getNodeName(Exchange exchange) { - if (exchange.getProperty(JcrConstants.JCR_NODE_NAME) != null) { - return exchange.getProperty(JcrConstants.JCR_NODE_NAME, String.class); - } - return exchange.getExchangeId(); + private String getNodeName(Message message) { + String nodeName = message.getHeader(JcrConstants.JCR_NODE_NAME, String.class); + return nodeName != null ? nodeName : message.getExchange().getExchangeId(); } private Node findOrCreateNode(Node parent, String path) throws RepositoryException { diff --git a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/AuthTokenLoginFailureTest.java b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/AuthTokenLoginFailureTest.java index 5cf762e573e47..406bf2c6b4222 100644 --- a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/AuthTokenLoginFailureTest.java +++ b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/AuthTokenLoginFailureTest.java @@ -54,8 +54,8 @@ protected RouteBuilder createRouteBuilder() throws Exception { @Override public void configure() throws Exception { // START SNIPPET: jcr - from("direct:a").setProperty(JcrConstants.JCR_NODE_NAME, - constant("node")).setProperty("my.contents.property", + from("direct:a").setHeader(JcrConstants.JCR_NODE_NAME, + constant("node")).setHeader("my.contents.property", body()).to( "jcr://test:quatloos@repository" + BASE_REPO_PATH); // END SNIPPET: jcr diff --git a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrAuthTokenWithLoginTest.java b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrAuthTokenWithLoginTest.java index c79c45682a3ec..e1dee1acacc46 100644 --- a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrAuthTokenWithLoginTest.java +++ b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrAuthTokenWithLoginTest.java @@ -39,8 +39,8 @@ protected RouteBuilder createRouteBuilder() throws Exception { @Override public void configure() throws Exception { // START SNIPPET: jcr - from("direct:a").setProperty(JcrConstants.JCR_NODE_NAME, - constant("node")).setProperty("my.contents.property", + from("direct:a").setHeader(JcrConstants.JCR_NODE_NAME, + constant("node")).setHeader("my.contents.property", body()).to( "jcr://not-a-user:nonexisting-password@repository" + BASE_REPO_PATH); // END SNIPPET: jcr 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 99621d0ec43bc..d0ea37ad123fe 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 @@ -53,8 +53,8 @@ public void setUp() throws Exception { @Test public void testJcrProducer() throws Exception { result.expectedMessageCount(1); - result.expectedPropertyReceived("my.contents.property", CONTENT); - result.expectedPropertyReceived("content.approved", APPROVED); + result.expectedHeaderReceived("my.contents.property", CONTENT); + result.expectedHeaderReceived("content.approved", APPROVED); Exchange exchange = createExchangeWithBody(identifier); template.send("direct:a", exchange); 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 f688faff48876..4c004b25ef126 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 @@ -65,8 +65,8 @@ protected RouteBuilder createRouteBuilder() throws Exception { @Override public void configure() throws Exception { // START SNIPPET: jcr - from("direct:a").setProperty(JcrConstants.JCR_NODE_NAME, constant("node/with/path")) - .setProperty("my.contents.property", body()).to("jcr://user:pass@repository/home/test"); + from("direct:a").setHeader(JcrConstants.JCR_NODE_NAME, constant("node/with/path")) + .setHeader("my.contents.property", body()).to("jcr://user:pass@repository/home/test"); // END SNIPPET: jcr } }; diff --git a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrProducerSubNodeTest.java b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrProducerSubNodeTest.java index 951b1dda73a18..42d4a557a168c 100644 --- a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrProducerSubNodeTest.java +++ b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrProducerSubNodeTest.java @@ -41,7 +41,7 @@ public void testCreateNodeAndSubNode() throws Exception { try { // create node Exchange exchange1 = ExchangeBuilder.anExchange(context) - .withProperty(JcrConstants.JCR_NODE_NAME, "node") + .withHeader(JcrConstants.JCR_NODE_NAME, "node") .build(); Exchange out1 = template.send("direct:a", exchange1); assertNotNull(out1); @@ -53,7 +53,7 @@ public void testCreateNodeAndSubNode() throws Exception { // create sub node Exchange exchange2 = ExchangeBuilder.anExchange(context) - .withProperty(JcrConstants.JCR_NODE_NAME, "node/subnode") + .withHeader(JcrConstants.JCR_NODE_NAME, "node/subnode") .build(); Exchange out2 = template.send("direct:a", exchange2); assertNotNull(out2); diff --git a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrProducerTest.java b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrProducerTest.java index 8c66863aa18f0..231fefaab2d21 100644 --- a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrProducerTest.java +++ b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrProducerTest.java @@ -58,8 +58,8 @@ protected RouteBuilder createRouteBuilder() throws Exception { @Override public void configure() throws Exception { // START SNIPPET: jcr-create-node - from("direct:a").setProperty(JcrConstants.JCR_NODE_NAME, constant("node")) - .setProperty("my.contents.property", body()) + from("direct:a").setHeader(JcrConstants.JCR_NODE_NAME, constant("node")) + .setHeader("my.contents.property", body()) .to("jcr://user:pass@repository/home/test"); // END SNIPPET: jcr-create-node }