Author: davsclaus
Date: Tue Jun 28 14:24:46 2011
New Revision: 1140636
URL: http://svn.apache.org/viewvc?rev=1140636&view=rev
Log:
CAMEL-4145: pollEnrich should set empty message body if could not poll from
resource endpoint. CAMEL-4158: The Exchange.TO_ENDPOINT is decored in enrich
and pollEnrich with the uri of the resource endpoint.
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherNoResourceTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/PollEnricherNoResourceTest.java
- copied, changed from r1140565,
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/PollEnricherTest.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Enricher.java
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/PollEnricherTest.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Enricher.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Enricher.java?rev=1140636&r1=1140635&r2=1140636&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Enricher.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Enricher.java
Tue Jun 28 14:24:46 2011
@@ -132,6 +132,13 @@ public class Enricher extends ServiceSup
}
}
+ // set header with the uri of the endpoint enriched so we can
use that for tracing etc
+ if (exchange.hasOut()) {
+ exchange.getOut().setHeader(Exchange.TO_ENDPOINT,
producer.getEndpoint().getEndpointUri());
+ } else {
+ exchange.getIn().setHeader(Exchange.TO_ENDPOINT,
producer.getEndpoint().getEndpointUri());
+ }
+
callback.done(false);
}
});
@@ -160,6 +167,13 @@ public class Enricher extends ServiceSup
}
}
+ // set header with the uri of the endpoint enriched so we can use that
for tracing etc
+ if (exchange.hasOut()) {
+ exchange.getOut().setHeader(Exchange.TO_ENDPOINT,
producer.getEndpoint().getEndpointUri());
+ } else {
+ exchange.getIn().setHeader(Exchange.TO_ENDPOINT,
producer.getEndpoint().getEndpointUri());
+ }
+
callback.done(true);
return true;
}
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java?rev=1140636&r1=1140635&r2=1140636&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/PollEnricher.java
Tue Jun 28 14:24:46 2011
@@ -150,6 +150,13 @@ public class PollEnricher extends Servic
}
}
}
+
+ // set header with the uri of the endpoint enriched so we can use that
for tracing etc
+ if (exchange.hasOut()) {
+ exchange.getOut().setHeader(Exchange.TO_ENDPOINT,
consumer.getEndpoint().getEndpointUri());
+ } else {
+ exchange.getIn().setHeader(Exchange.TO_ENDPOINT,
consumer.getEndpoint().getEndpointUri());
+ }
}
/**
@@ -192,6 +199,12 @@ public class PollEnricher extends Servic
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
if (newExchange != null) {
copyResultsPreservePattern(oldExchange, newExchange);
+ } else {
+ // if no newExchange then there was no message from the
external resource
+ // and therefore we should set an empty body to indicate this
fact
+ // but keep headers/attachments as we want to propagate those
+ oldExchange.getIn().setBody(null);
+ oldExchange.setOut(null);
}
return oldExchange;
}
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherNoResourceTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherNoResourceTest.java?rev=1140636&view=auto
==============================================================================
---
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherNoResourceTest.java
(added)
+++
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherNoResourceTest.java
Tue Jun 28 14:24:46 2011
@@ -0,0 +1,48 @@
+/**
+ * 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.processor.enricher;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+public class EnricherNoResourceTest extends ContextTestSupport {
+
+ public void testNoResourceA() throws Exception {
+ // there should be no message body
+ getMockEndpoint("mock:result").expectedMessageCount(1);
+ getMockEndpoint("mock:result").message(0).body().isNull();
+
+ template.sendBody("direct:a", "Hello World");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ public void configure() {
+ from("direct:a")
+ .enrich("direct:foo")
+ .to("mock:result");
+
+ // set an empty message
+ from("direct:foo")
+ .setBody(constant(null));
+ }
+ };
+ }
+
+}
\ No newline at end of file
Modified:
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherTest.java?rev=1140636&r1=1140635&r2=1140636&view=diff
==============================================================================
---
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherTest.java
(original)
+++
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/EnricherTest.java
Tue Jun 28 14:24:46 2011
@@ -46,6 +46,7 @@ public class EnricherTest extends Contex
public void testEnrichInOnly() throws InterruptedException {
mock.expectedBodiesReceived("test:blah");
+ mock.expectedHeaderReceived(Exchange.TO_ENDPOINT,
"direct://enricher-constant-resource");
template.sendBody("direct:enricher-test-1", "test");
mock.assertIsSatisfied();
}
@@ -61,6 +62,7 @@ public class EnricherTest extends Contex
assertEquals("test", exchange.getIn().getBody());
assertTrue(exchange.getOut() != null && exchange.getOut().isFault());
assertEquals("failed", exchange.getOut().getBody());
+ assertEquals("direct://enricher-fault-resource",
exchange.getOut().getHeader(Exchange.TO_ENDPOINT));
assertNull(exchange.getException());
}
Copied:
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/PollEnricherNoResourceTest.java
(from r1140565,
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/PollEnricherTest.java)
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/PollEnricherNoResourceTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/PollEnricherNoResourceTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/PollEnricherTest.java&r1=1140565&r2=1140636&rev=1140636&view=diff
==============================================================================
---
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/PollEnricherTest.java
(original)
+++
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/PollEnricherNoResourceTest.java
Tue Jun 28 14:24:46 2011
@@ -18,134 +18,70 @@ package org.apache.camel.processor.enric
import org.apache.camel.ContextTestSupport;
import org.apache.camel.Exchange;
-import org.apache.camel.ExchangePattern;
-import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-public class PollEnricherTest extends ContextTestSupport {
+public class PollEnricherNoResourceTest extends ContextTestSupport {
- private static SampleAggregator aggregationStrategy = new
SampleAggregator();
+ public void testNoResourceA() throws Exception {
+ // there should be no message body
+ getMockEndpoint("mock:result").expectedMessageCount(1);
+ getMockEndpoint("mock:result").message(0).body().isNull();
+
getMockEndpoint("mock:result").expectedHeaderReceived(Exchange.TO_ENDPOINT,
"seda://foo");
- protected MockEndpoint mock;
+ template.sendBody("direct:a", "Hello World");
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- mock = getMockEndpoint("mock:mock");
+ assertMockEndpointsSatisfied();
}
- @Override
- protected void tearDown() throws Exception {
- super.tearDown();
- }
+ public void testNoResourceB() throws Exception {
+ // there should be no message body
+ getMockEndpoint("mock:result").expectedMessageCount(1);
+ getMockEndpoint("mock:result").message(0).body().isNull();
+
getMockEndpoint("mock:result").expectedHeaderReceived(Exchange.TO_ENDPOINT,
"seda://bar");
- // -------------------------------------------------------------
- // InOnly routes
- // -------------------------------------------------------------
+ template.sendBody("direct:b", "Hello World");
- public void testPollEnrichInOnly() throws InterruptedException {
- template.sendBody("seda:foo1", "blah");
+ assertMockEndpointsSatisfied();
+ }
- Thread.sleep(250);
+ public void testResourceA() throws Exception {
+ template.sendBody("seda:foo", "Bye World");
- mock.expectedBodiesReceived("test:blah");
- template.sendBody("direct:enricher-test-1", "test");
- mock.assertIsSatisfied();
- }
+ Thread.sleep(250);
- public void testPollEnrichInOnlyWaitWithTimeout() throws
InterruptedException {
- // this first try there is no data so we timeout
- mock.expectedBodiesReceived("test:blah");
- template.sendBody("direct:enricher-test-2", "test");
- // not expected data so we are not happy
- mock.assertIsNotSatisfied();
-
- // now send it and try again
- mock.reset();
- template.sendBody("seda:foo2", "blah");
- template.sendBody("direct:enricher-test-2", "test");
- mock.assertIsSatisfied();
- }
+ // there should be a message body
+ getMockEndpoint("mock:result").expectedBodiesReceived("Bye World");
+
getMockEndpoint("mock:result").expectedHeaderReceived(Exchange.TO_ENDPOINT,
"seda://foo");
- public void testPollEnrichInOnlyWaitNoTimeout() throws
InterruptedException {
- // use another thread to send it a bit later
- Thread t = new Thread(new Runnable() {
- public void run() {
- try {
- Thread.sleep(250);
- } catch (InterruptedException e) {
- // ignore
- }
- template.sendBody("seda:foo3", "blah");
- }
- });
+ template.sendBody("direct:a", "Hello World");
- long start = System.currentTimeMillis();
- mock.expectedBodiesReceived("test:blah");
- t.start();
- template.sendBody("direct:enricher-test-3", "test");
- // should take approx 1 sec to complete as the other thread is sending
a bit later and we wait
- mock.assertIsSatisfied();
- long delta = System.currentTimeMillis() - start;
- assertTrue("Should take approx 0.25 sec: was " + delta, delta > 150);
+ assertMockEndpointsSatisfied();
}
- // -------------------------------------------------------------
- // InOut routes
- // -------------------------------------------------------------
-
- public void testPollEnrichInOut() throws InterruptedException {
- template.sendBody("seda:foo4", "blah");
+ public void testResourceB() throws Exception {
+ template.sendBody("seda:bar", "Bye World");
Thread.sleep(250);
- String result = (String) template.sendBody("direct:enricher-test-4",
ExchangePattern.InOut, "test");
- assertEquals("test:blah", result);
- }
-
- public void testPollEnrichInOutPlusHeader() throws InterruptedException {
- template.sendBody("seda:foo4", "blah");
+ // there should be a message body
+ getMockEndpoint("mock:result").expectedBodiesReceived("Bye World");
+
getMockEndpoint("mock:result").expectedHeaderReceived(Exchange.TO_ENDPOINT,
"seda://bar");
- Thread.sleep(250);
+ template.sendBody("direct:b", "Hello World");
- Exchange exchange = template.request("direct:enricher-test-4", new
Processor() {
- public void process(Exchange exchange) {
- exchange.getIn().setHeader("foo", "bar");
- exchange.getIn().setBody("test");
- }
- });
- assertEquals("bar", exchange.getIn().getHeader("foo"));
- assertEquals("test:blah", exchange.getIn().getBody());
- assertFalse(exchange.hasOut() && exchange.getOut().isFault());
- assertNull(exchange.getException());
+ assertMockEndpointsSatisfied();
}
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
public void configure() {
- //
-------------------------------------------------------------
- // InOnly routes
- //
-------------------------------------------------------------
-
- from("direct:enricher-test-1")
- .pollEnrich("seda:foo1", aggregationStrategy)
- .to("mock:mock");
-
- from("direct:enricher-test-2")
- .pollEnrich("seda:foo2", 1000, aggregationStrategy)
- .to("mock:mock");
-
- from("direct:enricher-test-3")
- .pollEnrich("seda:foo3", -1, aggregationStrategy)
- .to("mock:mock");
-
- //
-------------------------------------------------------------
- // InOut routes
- //
-------------------------------------------------------------
-
- from("direct:enricher-test-4")
- .pollEnrich("seda:foo4", aggregationStrategy);
+ from("direct:a")
+ .pollEnrich("seda:foo", 1000)
+ .to("mock:result");
+
+ from("direct:b")
+ .pollEnrich("seda:bar")
+ .to("mock:result");
}
};
}
Modified:
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/PollEnricherTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/PollEnricherTest.java?rev=1140636&r1=1140635&r2=1140636&view=diff
==============================================================================
---
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/PollEnricherTest.java
(original)
+++
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/enricher/PollEnricherTest.java
Tue Jun 28 14:24:46 2011
@@ -50,6 +50,7 @@ public class PollEnricherTest extends Co
Thread.sleep(250);
mock.expectedBodiesReceived("test:blah");
+ mock.expectedHeaderReceived(Exchange.TO_ENDPOINT, "seda://foo1");
template.sendBody("direct:enricher-test-1", "test");
mock.assertIsSatisfied();
}
@@ -57,6 +58,7 @@ public class PollEnricherTest extends Co
public void testPollEnrichInOnlyWaitWithTimeout() throws
InterruptedException {
// this first try there is no data so we timeout
mock.expectedBodiesReceived("test:blah");
+ mock.expectedHeaderReceived(Exchange.TO_ENDPOINT, "seda://foo2");
template.sendBody("direct:enricher-test-2", "test");
// not expected data so we are not happy
mock.assertIsNotSatisfied();
@@ -83,6 +85,7 @@ public class PollEnricherTest extends Co
long start = System.currentTimeMillis();
mock.expectedBodiesReceived("test:blah");
+ mock.expectedHeaderReceived(Exchange.TO_ENDPOINT, "seda://foo3");
t.start();
template.sendBody("direct:enricher-test-3", "test");
// should take approx 1 sec to complete as the other thread is sending
a bit later and we wait
@@ -118,6 +121,7 @@ public class PollEnricherTest extends Co
assertEquals("bar", exchange.getIn().getHeader("foo"));
assertEquals("test:blah", exchange.getIn().getBody());
assertFalse(exchange.hasOut() && exchange.getOut().isFault());
+ assertEquals("seda://foo4",
exchange.getOut().getHeader(Exchange.TO_ENDPOINT));
assertNull(exchange.getException());
}