You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by js...@apache.org on 2007/08/17 06:21:50 UTC
svn commit: r566911 - in /activemq/camel/trunk/camel-core/src:
main/java/org/apache/camel/component/bean/
main/java/org/apache/camel/model/ test/java/org/apache/camel/
test/java/org/apache/camel/processor/
Author: jstrachan
Date: Thu Aug 16 21:21:41 2007
New Revision: 566911
URL: http://svn.apache.org/viewvc?view=rev&rev=566911
Log:
added a test case and fix for CAMEL-111. Also noticed that methods of the form: cheese(String body, @Header(name="foo") String foo) were not correctly being mapped by default by the BeanProcessor, so fixed that too
Added:
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/BeanWithExceptionTest.java
- copied, changed from r566791, activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidationTest.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/BeanRef.java
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/ContextTestSupport.java
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java?view=diff&rev=566911&r1=566910&r2=566911
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java Thu Aug 16 21:21:41 2007
@@ -126,7 +126,7 @@
Expression expression = createParameterUnmarshalExpression(clazz, method, parameterType,
parameterAnnotations);
if (expression == null) {
- if (parameterTypes.length == 1 && bodyParameters.isEmpty()) {
+ if (bodyParameters.isEmpty()) {
// lets assume its the body
expression = ExpressionBuilder.bodyExpression(parameterType);
} else {
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java?view=diff&rev=566911&r1=566910&r2=566911
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java Thu Aug 16 21:21:41 2007
@@ -16,18 +16,18 @@
*/
package org.apache.camel.component.bean;
-import java.lang.reflect.Method;
-
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.camel.spi.Registry;
import org.apache.camel.util.ObjectHelper;
+import static org.apache.camel.util.ObjectHelper.isNullOrBlank;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import static org.apache.camel.util.ObjectHelper.isNullOrBlank;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
/**
* A {@link Processor} which converts the inbound exchange to a method
@@ -96,12 +96,22 @@
invocation = beanInfo.createInvocation(pojo, exchange);
}
if (invocation == null) {
- throw new IllegalStateException("No method invocation could be created");
+ throw new IllegalStateException("No method invocation could be created, no maching method could be found on: " + pojo);
}
try {
Object value = invocation.proceed();
if (value != null) {
exchange.getIn().setBody(value);
+ }
+ } catch (InvocationTargetException e) {
+ // lets unwrap the exception
+ Throwable cause = e.getTargetException();
+ if (cause instanceof Exception) {
+ throw (Exception) cause;
+ }
+ else {
+ // TODO deal with errors!
+ throw e;
}
} catch (Exception e) {
throw e;
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/BeanRef.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/BeanRef.java?view=diff&rev=566911&r1=566910&r2=566911
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/BeanRef.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/BeanRef.java Thu Aug 16 21:21:41 2007
@@ -42,8 +42,8 @@
public BeanRef() {
}
- public BeanRef(Object bean) {
- this.bean = bean;
+ public BeanRef(String ref) {
+ this.ref = ref;
}
public BeanRef(String ref, String method) {
Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/ContextTestSupport.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/ContextTestSupport.java?view=diff&rev=566911&r1=566910&r2=566911
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/ContextTestSupport.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/ContextTestSupport.java Thu Aug 16 21:21:41 2007
@@ -22,6 +22,8 @@
import org.apache.camel.spi.Language;
import org.apache.camel.util.jndi.JndiTest;
+import javax.naming.Context;
+
/**
* A useful base class which creates a {@link CamelContext} with some routes
* along with a {@link CamelTemplate} for use in the test case
@@ -89,7 +91,15 @@
}
protected CamelContext createCamelContext() throws Exception {
- return new DefaultCamelContext(new JndiRegistry(JndiTest.createInitialContext()));
+ return new DefaultCamelContext(createRegistry());
+ }
+
+ protected JndiRegistry createRegistry() throws Exception {
+ return new JndiRegistry(createJndiContext());
+ }
+
+ protected Context createJndiContext() throws Exception {
+ return JndiTest.createInitialContext();
}
protected RouteBuilder createRouteBuilder() throws Exception {
Copied: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/BeanWithExceptionTest.java (from r566791, activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidationTest.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/BeanWithExceptionTest.java?view=diff&rev=566911&p1=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidationTest.java&r1=566791&p2=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/BeanWithExceptionTest.java&r2=566911
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidationTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/BeanWithExceptionTest.java Thu Aug 16 21:21:41 2007
@@ -17,15 +17,21 @@
package org.apache.camel.processor;
import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Header;
import org.apache.camel.Processor;
import org.apache.camel.ValidationException;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.util.jndi.JndiContext;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.naming.Context;
/**
* @version $Revision: 1.1 $
*/
-public class ValidationTest extends ContextTestSupport {
+public class BeanWithExceptionTest extends ContextTestSupport {
protected Processor validator = new MyValidator();
protected MockEndpoint validEndpoint;
protected MockEndpoint invalidEndpoint;
@@ -54,15 +60,34 @@
invalidEndpoint = resolveMandatoryEndpoint("mock:invalid", MockEndpoint.class);
}
+ @Override
+ protected Context createJndiContext() throws Exception {
+ JndiContext answer = new JndiContext();
+ answer.bind("myBean", new ValidationBean());
+ return answer;
+ }
+
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
public void configure() {
+ exception(ValidationException.class).to("mock:invalid");
+
from("direct:start").
- tryBlock().
- process(validator).
- to("mock:valid").
- handle(ValidationException.class).to("mock:invalid");
- }
+ beanRef("myBean").
+ to("mock:valid"); }
};
}
-}
+
+ public static class ValidationBean {
+ private static final transient Log LOG = LogFactory.getLog(ValidationBean.class);
+
+ public void someMethod(String body, @Header(name = "foo") String header) throws ValidationException {
+ if ("bar".equals(header)) {
+ LOG.info("someMethod() called with valid header and body: " + body);
+ }
+ else {
+ throw new ValidationException(null, "Invalid header foo: " + header);
+ }
+ }
+ }
+}
\ No newline at end of file