Author: davsclaus
Date: Fri Jul 11 02:25:30 2008
New Revision: 675881
URL: http://svn.apache.org/viewvc?rev=675881&view=rev
Log:
CAMEL-695: XQuery doesn't propogate headers
Added:
activemq/camel/trunk/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryPropogateHeadersTest.java
Modified:
activemq/camel/trunk/components/camel-saxon/src/main/java/org/apache/camel/component/xquery/XQueryBuilder.java
Modified:
activemq/camel/trunk/components/camel-saxon/src/main/java/org/apache/camel/component/xquery/XQueryBuilder.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-saxon/src/main/java/org/apache/camel/component/xquery/XQueryBuilder.java?rev=675881&r1=675880&r2=675881&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-saxon/src/main/java/org/apache/camel/component/xquery/XQueryBuilder.java
(original)
+++
activemq/camel/trunk/components/camel-saxon/src/main/java/org/apache/camel/component/xquery/XQueryBuilder.java
Fri Jul 11 02:25:30 2008
@@ -88,6 +88,9 @@
public void process(Exchange exchange) throws Exception {
Object body = evaluate(exchange);
exchange.getOut(true).setBody(body);
+
+ // propogate headers
+ exchange.getOut().getHeaders().putAll(exchange.getIn().getHeaders());
}
public Object evaluate(Exchange exchange) {
@@ -405,8 +408,9 @@
addParameters(dynamicQueryContext, getParameters());
dynamicQueryContext.setParameter("exchange", exchange);
- dynamicQueryContext.setParameter("in", exchange.getIn());
- dynamicQueryContext.setParameter("out", exchange.getOut());
+ if (exchange.getPattern().isOutCapable()) {
+ dynamicQueryContext.setParameter("out", exchange.getOut());
+ }
}
protected void addParameters(DynamicQueryContext dynamicQueryContext,
Map<String, Object> map) {
Added:
activemq/camel/trunk/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryPropogateHeadersTest.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryPropogateHeadersTest.java?rev=675881&view=auto
==============================================================================
---
activemq/camel/trunk/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryPropogateHeadersTest.java
(added)
+++
activemq/camel/trunk/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryPropogateHeadersTest.java
Fri Jul 11 02:25:30 2008
@@ -0,0 +1,84 @@
+/**
+ * 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.component.xquery;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.model.ProcessorType;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+
+/**
+ * Unit test to verify that headers can be propogated through this component.
+ */
+public class XQueryPropogateHeadersTest extends ContextTestSupport {
+
+ public void testPropogateHeadersTest() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+ mock.expectedBodiesReceived("<transformed
subject=\"Hey\"><mail><subject>Hey</subject>"
+ + "<body>Hello world!</body></mail></transformed>");
+ mock.expectedHeaderReceived("foo", "bar");
+
+ template.sendBodyAndHeader("direct:one",
+ "<mail><subject>Hey</subject><body>Hello world!</body></mail>",
"foo", "bar");
+
+ assertMockEndpointsSatisifed();
+ }
+
+ public void testPropogateHeadersUsingTransform() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+ mock.expectedBodiesReceived("London");
+ mock.expectedHeaderReceived("foo", "bar");
+
+ template.sendBodyAndHeader("direct:two",
+ "<person name='James' city='London'/>", "foo", "bar");
+
+ assertMockEndpointsSatisifed();
+ }
+
+ public void testPropogateHeadersUsingSetBody() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+ mock.expectedBodiesReceived("London");
+ mock.expectedHeaderReceived("foo", "bar");
+
+ template.sendBodyAndHeader("direct:three",
+ "<person name='James' city='London'/>", "foo", "bar");
+
+ assertMockEndpointsSatisifed();
+ }
+
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() throws Exception {
+ from("direct:one")
+
.to("xquery:org/apache/camel/component/xquery/transform.xquery")
+ .to("mock:result");
+
+ from("direct:two")
+ .transform().xquery("/person/@city", String.class)
+ .to("mock:result");
+
+ from("direct:three")
+ .setBody().xquery("/person/@city", String.class)
+ .to("mock:result");
+ }
+ };
+ }
+}