You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2009/07/01 09:37:59 UTC
svn commit: r790052 - in /camel/trunk/camel-core/src:
main/java/org/apache/camel/component/bean/BeanProcessor.java
test/java/org/apache/camel/component/bean/BeanWithMethodHeaderTest.java
Author: ningjiang
Date: Wed Jul 1 07:37:58 2009
New Revision: 790052
URL: http://svn.apache.org/viewvc?rev=790052&view=rev
Log:
CAMEL-1777 Fixed the issue of resetting Exchange.Bean_METHOD_NAME header after the bean invocation
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanWithMethodHeaderTest.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java?rev=790052&r1=790051&r2=790052&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java Wed Jul 1 07:37:58 2009
@@ -107,31 +107,15 @@
throw new IllegalStateException(
"No method invocation could be created, no maching method could be found on: " + bean);
} else {
- // set method name if not explict given
+ // set method name if not explicit given
if (method == null) {
method = invocation.getMethod().getName();
}
}
-
+
+ Object value = null;
try {
- Object value = invocation.proceed();
- if (value != null) {
- if (exchange.getPattern().isOutCapable()) {
- // force out creating if not already created (as its lazy)
- if (LOG.isDebugEnabled()) {
- LOG.debug("Setting bean invocation result on the OUT message: " + value);
- }
- exchange.getOut().setBody(value);
- // propagate headers
- exchange.getOut().getHeaders().putAll(exchange.getIn().getHeaders());
- } else {
- // if not out then set it on the in
- if (LOG.isDebugEnabled()) {
- LOG.debug("Setting bean invocation result on the IN message: " + value);
- }
- exchange.getIn().setBody(value);
- }
- }
+ value = invocation.proceed();
} catch (InvocationTargetException e) {
// lets unwrap the exception
Throwable throwable = e.getCause();
@@ -147,6 +131,24 @@
in.setHeader(Exchange.BEAN_METHOD_NAME, prevMethod);
}
}
+
+ if (value != null) {
+ if (exchange.getPattern().isOutCapable()) {
+ // force out creating if not already created (as its lazy)
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Setting bean invocation result on the OUT message: " + value);
+ }
+ exchange.getOut().setBody(value);
+ // propagate headers
+ exchange.getOut().getHeaders().putAll(exchange.getIn().getHeaders());
+ } else {
+ // if not out then set it on the in
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Setting bean invocation result on the IN message: " + value);
+ }
+ exchange.getIn().setBody(value);
+ }
+ }
}
protected Processor getProcessor() {
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanWithMethodHeaderTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanWithMethodHeaderTest.java?rev=790052&r1=790051&r2=790052&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanWithMethodHeaderTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanWithMethodHeaderTest.java Wed Jul 1 07:37:58 2009
@@ -20,6 +20,8 @@
import org.apache.camel.CamelExecutionException;
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.apache.camel.util.jndi.JndiContext;
@@ -34,10 +36,32 @@
public void testEcho() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedBodiesReceived("echo Hello World");
-
+
template.sendBody("direct:echo", "Hello World");
assertMockEndpointsSatisfied();
+ assertNull("There should no Bean_METHOD_NAME header",
+ mock.getExchanges().get(0).getIn().getHeader(Exchange.BEAN_METHOD_NAME));
+ }
+
+ public void testEchoWithMethodHeaderHi() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedBodiesReceived("echo Hello World");
+ mock.expectedHeaderReceived(Exchange.BEAN_METHOD_NAME, "hi");
+
+ template.sendBodyAndHeader("direct:echo", ExchangePattern.InOut, "Hello World", Exchange.BEAN_METHOD_NAME, "hi");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ public void testMixedBeanEndpoints() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedBodiesReceived("hi echo Hello World");
+ mock.expectedHeaderReceived(Exchange.BEAN_METHOD_NAME, "hi");
+
+ template.sendBodyAndHeader("direct:mixed", ExchangePattern.InOut, "Hello World", Exchange.BEAN_METHOD_NAME, "hi");
+
+ assertMockEndpointsSatisfied();
}
public void testHi() throws Exception {
@@ -87,6 +111,8 @@
from("direct:echo").beanRef("myBean", "echo").to("mock:result");
from("direct:hi").beanRef("myBean", "hi").to("mock:result");
+
+ from("direct:mixed").beanRef("myBean", "echo").beanRef("myBean", "hi").to("mock:result");
from("direct:fail").beanRef("myBean").to("mock:result");