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 2019/08/06 14:25:07 UTC
[camel] 01/04: CAMEL-10910: A route with a single output should
also use a pipeline so its the same behaviour as if the route has 2+
outputs.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 8ae074c51f2ce43141a9fc5fe40ca7bd88e24426
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Aug 6 13:12:28 2019 +0200
CAMEL-10910: A route with a single output should also use a pipeline so its the same behaviour as if the route has 2+ outputs.
---
.../cxf/jaxrs/CxfRsSpringConsumerTest.java | 2 +-
.../camel/impl/engine/DefaultRouteContext.java | 4 +-
.../impl/cloud/ServiceCallConfigurationTest.java | 6 ++
.../test/java/org/apache/camel/TestSupport.java | 4 +
.../camel/language/XPathOutFunctionTest.java | 114 ---------------------
.../RandomLoadBalanceJavaDSLBuilderTest.java | 4 +
.../camel/processor/SagaPropagationTest.java | 4 +-
.../processor/SimpleSingleOutputMockTest.java | 51 +++++++++
8 files changed, 71 insertions(+), 118 deletions(-)
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringConsumerTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringConsumerTest.java
index b52b221..9748268 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringConsumerTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringConsumerTest.java
@@ -49,7 +49,7 @@ public class CxfRsSpringConsumerTest extends CamelSpringTestSupport {
public void process(Exchange exchange) throws Exception {
// do something else with the request properties as usual
// do something else with the response
- exchange.getOut().getBody(Customer.class).setId(246);
+ exchange.getMessage().getBody(Customer.class).setId(246);
}
};
return new RouteBuilder() {
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteContext.java
index be269db..282fbd5 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteContext.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteContext.java
@@ -171,7 +171,9 @@ public class DefaultRouteContext implements RouteContext {
public Route commit() {
// now lets turn all of the event driven consumer processors into a single route
if (!eventDrivenProcessors.isEmpty()) {
- Processor target = Pipeline.newInstance(getCamelContext(), eventDrivenProcessors);
+ // always use an pipeline even if there are only 1 processor as the pipeline
+ // handles preparing the response from the exchange in regard to IN vs OUT messages etc
+ Processor target = new Pipeline(getCamelContext(), eventDrivenProcessors);
// and wrap it in a unit of work so the UoW is on the top, so the entire route will be in the same UoW
CamelInternalProcessor internal = new CamelInternalProcessor(target);
diff --git a/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/ServiceCallConfigurationTest.java b/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/ServiceCallConfigurationTest.java
index ecd8832..8644bb9 100644
--- a/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/ServiceCallConfigurationTest.java
+++ b/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/ServiceCallConfigurationTest.java
@@ -30,6 +30,8 @@ import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition;
import org.apache.camel.model.cloud.ServiceCallDefinitionConstants;
import org.apache.camel.model.cloud.ServiceCallExpressionConfiguration;
import org.apache.camel.model.language.SimpleExpression;
+import org.apache.camel.processor.Pipeline;
+import org.apache.camel.processor.channel.DefaultChannel;
import org.junit.Assert;
import org.junit.Test;
@@ -441,7 +443,11 @@ public class ServiceCallConfigurationTest {
// **********************************************
private DefaultServiceCallProcessor findServiceCallProcessor(Route route) {
+
for (Processor processor : route.navigate().next()) {
+ if (processor instanceof DefaultChannel) {
+ processor = ((DefaultChannel) processor).getNextProcessor();
+ }
if (processor instanceof DefaultServiceCallProcessor) {
return (DefaultServiceCallProcessor)processor;
}
diff --git a/core/camel-core/src/test/java/org/apache/camel/TestSupport.java b/core/camel-core/src/test/java/org/apache/camel/TestSupport.java
index 2ec15e3..d2dd5b4 100644
--- a/core/camel-core/src/test/java/org/apache/camel/TestSupport.java
+++ b/core/camel-core/src/test/java/org/apache/camel/TestSupport.java
@@ -25,6 +25,7 @@ import org.apache.camel.builder.Builder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.builder.ValueBuilder;
import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.processor.Pipeline;
import org.apache.camel.processor.errorhandler.ErrorHandlerSupport;
import org.apache.camel.support.DefaultExchange;
import org.apache.camel.support.PredicateAssertHelper;
@@ -378,6 +379,9 @@ public abstract class TestSupport extends Assert {
*/
public static Channel unwrapChannel(Processor processor) {
while (true) {
+ if (processor instanceof Pipeline) {
+ processor = ((Pipeline) processor).getProcessors().get(0);
+ }
if (processor instanceof Channel) {
return (Channel) processor;
} else if (processor instanceof DelegateProcessor) {
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/XPathOutFunctionTest.java b/core/camel-core/src/test/java/org/apache/camel/language/XPathOutFunctionTest.java
deleted file mode 100644
index 35b4692..0000000
--- a/core/camel-core/src/test/java/org/apache/camel/language/XPathOutFunctionTest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * 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.language;
-import org.w3c.dom.NodeList;
-
-import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.apache.camel.component.mock.MockEndpoint.expectsMessageCount;
-
-public class XPathOutFunctionTest extends ContextTestSupport {
-
- protected MockEndpoint x;
- protected MockEndpoint y;
- protected MockEndpoint z;
- protected MockEndpoint end;
-
- @Test
- public void testCheckHeader() throws Exception {
- String body = "<one/>";
- x.expectedBodiesReceived(body);
- expectsMessageCount(0, y, z);
-
- sendMessage("bar", body);
-
- assertMockEndpointsSatisfied();
- }
-
- @Test
- public void testCheckBody() throws Exception {
- String body = "<two/>";
- y.expectedBodiesReceived(body);
- expectsMessageCount(0, x, z);
-
- sendMessage("cheese", body);
-
- assertMockEndpointsSatisfied();
- }
-
- @Test
- public void testSetXpathProperty() throws Exception {
- String body = "<soapenv:Body xmlns:ns=\"http://myNamesapce\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">"
- + "<ns:Addresses> <Address>address1</Address>"
- + " <Address>address2</Address> <Address>address3</Address>"
- + " <Address>address4</Address> </ns:Addresses> </soapenv:Body>";
- end.reset();
- end.expectedMessageCount(1);
- template.sendBody("direct:setProperty", body);
- assertMockEndpointsSatisfied();
- Exchange exchange = end.getExchanges().get(0);
- NodeList nodeList = exchange.getProperty("Addresses", NodeList.class);
- assertNotNull("The node list should not be null", nodeList);
- }
-
- protected void sendMessage(final Object headerValue, final Object body) throws Exception {
- template.send("direct:start", new Processor() {
- public void process(Exchange exchange) throws Exception {
- // use OUT to test the OUT namespaces
- exchange.getOut().setBody(body);
- exchange.getOut().setHeader("foo", headerValue);
- }
- });
- }
-
- @Override
- @Before
- public void setUp() throws Exception {
- super.setUp();
-
- x = getMockEndpoint("mock:x");
- y = getMockEndpoint("mock:y");
- z = getMockEndpoint("mock:z");
- end = getMockEndpoint("mock:end");
- }
-
- @Override
- protected RouteBuilder createRouteBuilder() {
- return new RouteBuilder() {
- public void configure() {
-
- // START SNIPPET: ex
- from("direct:start").choice()
- .when().xpath("out:header('foo') = 'bar'").to("mock:foo").to("mock:x")
- .when().xpath("out:body() = '<two/>'").to("mock:foo").to("mock:y")
- .otherwise().to("mock:foo").to("mock:z");
- // END SNIPPET: ex
-
- from("direct:setProperty")
- .setProperty("Addresses").xpath("//Address", NodeList.class)
- .to("mock:end");
- }
- };
- }
-
-}
\ No newline at end of file
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/RandomLoadBalanceJavaDSLBuilderTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/RandomLoadBalanceJavaDSLBuilderTest.java
index c3bd4b1..d0e2426 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/RandomLoadBalanceJavaDSLBuilderTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/RandomLoadBalanceJavaDSLBuilderTest.java
@@ -73,6 +73,10 @@ public class RandomLoadBalanceJavaDSLBuilderTest extends RandomLoadBalanceTest {
}
private void navigateRoute(Navigate<Processor> nav, StringBuilder sb) {
+ if (nav instanceof Pipeline) {
+ nav = (Navigate<Processor>) ((Pipeline) nav).getProcessors().get(0);
+ }
+
if (!nav.hasNext()) {
return;
}
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SagaPropagationTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SagaPropagationTest.java
index 333d987..122fd58 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/SagaPropagationTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/SagaPropagationTest.java
@@ -67,7 +67,7 @@ public class SagaPropagationTest extends ContextTestSupport {
context.createFluentProducerTemplate().to("direct:supports").request();
assertListSize(sagaIds, 2);
- assertNonNullSagaIds(1);
+ assertNonNullSagaIds(2);
}
@Test
@@ -184,7 +184,7 @@ public class SagaPropagationTest extends ContextTestSupport {
}
private Processor addSagaIdToList() {
- return ex -> sagaIds.add(ex.getIn().getHeader(Exchange.SAGA_LONG_RUNNING_ACTION, String.class));
+ return ex -> sagaIds.add(ex.getMessage().getHeader(Exchange.SAGA_LONG_RUNNING_ACTION, String.class));
}
private void assertUniqueNonNullSagaIds(int num) {
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SimpleSingleOutputMockTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SimpleSingleOutputMockTest.java
new file mode 100644
index 0000000..6323e43
--- /dev/null
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/SimpleSingleOutputMockTest.java
@@ -0,0 +1,51 @@
+/*
+ * 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;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.Test;
+
+public class SimpleSingleOutputMockTest extends ContextTestSupport {
+
+ @Test
+ public void testSimple() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedBodiesReceived("Hello World");
+
+ Exchange out = template.request("direct:start", e -> e.getMessage().setBody("Hello World"));
+ assertNotNull(out);
+ assertEquals(ExchangePattern.InOut, out.getPattern());
+ assertTrue(out.hasOut());
+
+ assertMockEndpointsSatisfied();
+ }
+
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start").to("mock:result");
+ }
+ };
+ }
+}