You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ge...@apache.org on 2009/05/26 17:38:26 UTC
svn commit: r778756 [1/2] - in
/servicemix/components/engines/servicemix-bean/trunk: ./
src/main/java/org/apache/servicemix/bean/
src/main/java/org/apache/servicemix/bean/pojos/
src/main/java/org/apache/servicemix/bean/support/ src/test/java/org/apache...
Author: gertv
Date: Tue May 26 15:38:25 2009
New Revision: 778756
URL: http://svn.apache.org/viewvc?rev=778756&view=rev
Log:
SMXCOMP-527: Improve test coverage for servicemix-bean
Added:
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/BeanEndpointTest.java (with props)
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/EndpointFinderTest.java (with props)
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/MethodInvocationFailedExceptionTest.java (with props)
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/ParameterAnnotationsTest.java (with props)
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/beans/ParameterAnnotationsBean.java (with props)
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/BeanInfoTest.java (with props)
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/BeanSupportTest.java (with props)
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/DefaultMethodInvocationStrategyTest.java (with props)
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/ExchangeTargetTest.java (with props)
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/HolderTest.java (with props)
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/ReflectionUtilsTest.java (with props)
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/ResolverUtilTest.java (with props)
servicemix/components/engines/servicemix-bean/trunk/src/test/resources/attachment.png (with props)
Modified:
servicemix/components/engines/servicemix-bean/trunk/pom.xml
servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java
servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/EndpointFinder.java
servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/pojos/LoggingPojo.java
servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/BeanInfo.java
servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/BeanSupport.java
servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/MethodInfo.java
servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/ReflectionUtils.java
servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/Request.java
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/AbstractBeanComponentTest.java
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/BeanEndpointInOptionalOutTest.java
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/ConsumerBeanTest.java
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/LoggingPojoTest.java
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/TransformBeanSupportSedaFlowTest.java
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/TransformBeanSupportTest.java
servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/RequestTest.java
Modified: servicemix/components/engines/servicemix-bean/trunk/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/pom.xml?rev=778756&r1=778755&r2=778756&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/pom.xml (original)
+++ servicemix/components/engines/servicemix-bean/trunk/pom.xml Tue May 26 15:38:25 2009
@@ -123,6 +123,11 @@
<version>1.2.14</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
@@ -168,6 +173,18 @@
</excludes>
</configuration>
</plugin>
+ <!-- exclude generated DefaultBootstrap class from Cobertura reports -->
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ <configuration>
+ <instrumentation>
+ <excludes>
+ <exclude>org/apache/servicemix/common/DefaultBootstrap.class</exclude>
+ </excludes>
+ </instrumentation>
+ </configuration>
+ </plugin>
</plugins>
</build>
Modified: servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java?rev=778756&r1=778755&r2=778756&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java Tue May 26 15:38:25 2009
@@ -17,6 +17,7 @@
package org.apache.servicemix.bean;
import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.MissingResourceException;
@@ -212,55 +213,58 @@
public void process(MessageExchange exchange) throws Exception {
if (exchange.getRole() == Role.CONSUMER) {
onConsumerExchange(exchange);
- // Find or create the request for this provider exchange
- } else if (exchange.getRole() == MessageExchange.Role.PROVIDER) {
- onProviderExchange(exchange);
} else {
- throw new IllegalStateException("Unknown role: " + exchange.getRole());
+ onProviderExchange(exchange);
}
}
protected void onProviderExchange(MessageExchange exchange) throws Exception {
Request req = getOrCreateCurrentRequest(exchange);
currentRequest.set(req);
- synchronized (req) {
- // If the bean implements MessageExchangeListener,
- // just call the method
- if (req.getBean() instanceof MessageExchangeListener) {
- ((MessageExchangeListener) req.getBean()).onMessageExchange(exchange);
- } else {
- // Exchange is finished
- if (exchange.getStatus() == ExchangeStatus.DONE) {
- return;
- // Exchange has been aborted with an exception
- } else if (exchange.getStatus() == ExchangeStatus.ERROR) {
- return;
- // Fault message
- } else if (exchange.getFault() != null) {
- // TODO: find a way to send it back to the bean before setting the DONE status
- done(exchange);
+ try {
+ // Find or create the request for this provider exchange
+ synchronized (req) {
+ // If the bean implements MessageExchangeListener,
+ // just call the method
+ if (req.getBean() instanceof MessageExchangeListener) {
+ ((MessageExchangeListener) req.getBean()).onMessageExchange(exchange);
} else {
- MethodInvocation invocation = getMethodInvocationStrategy().createInvocation(
- req.getBean(), getBeanInfo(), exchange, this);
- if (invocation == null) {
- throw new UnknownMessageExchangeTypeException(exchange, this);
- }
- try {
- invocation.proceed();
- } catch (Exception e) {
- throw e;
- } catch (Throwable throwable) {
- throw new MethodInvocationFailedException(req.getBean(), invocation, exchange, this, throwable);
- }
- if (exchange.getStatus() == ExchangeStatus.ERROR) {
- send(exchange);
- }
- if (exchange.getFault() == null && exchange.getMessage("out") == null) {
- // TODO: handle MEP correctly (DONE should only be sent for InOnly)
+ // Exchange is finished
+ if (exchange.getStatus() == ExchangeStatus.DONE) {
+ return;
+ // Exchange has been aborted with an exception
+ } else if (exchange.getStatus() == ExchangeStatus.ERROR) {
+ return;
+ // Fault message
+ } else if (exchange.getFault() != null) {
+ // TODO: find a way to send it back to the bean before setting the DONE status
done(exchange);
+ } else {
+ MethodInvocation invocation = getMethodInvocationStrategy().createInvocation(
+ req.getBean(), getBeanInfo(), exchange, this);
+ if (invocation == null) {
+ throw new UnknownMessageExchangeTypeException(exchange, this);
+ }
+ try {
+ invocation.proceed();
+ } catch (InvocationTargetException e) {
+ throw new MethodInvocationFailedException(req.getBean(), invocation, exchange, this, e.getCause());
+ } catch (Exception e) {
+ throw e;
+ } catch (Throwable throwable) {
+ throw new MethodInvocationFailedException(req.getBean(), invocation, exchange, this, throwable);
+ }
+ if (exchange.getStatus() == ExchangeStatus.ERROR) {
+ send(exchange);
+ }
+ if (exchange.getFault() == null && exchange.getMessage("out") == null) {
+ // TODO: handle MEP correctly (DONE should only be sent for InOnly)
+ done(exchange);
+ }
}
}
}
+ } finally {
checkEndOfRequest(req);
currentRequest.set(null);
}
@@ -326,12 +330,11 @@
if (beanName == null && beanType == null) {
throw new IllegalArgumentException("Property 'bean', 'beanName' or 'beanClassName' has not been set!");
}
+ if (beanName != null && applicationContext == null) {
+ throw new IllegalArgumentException("Property 'beanName' specified, but no BeanFactory set!");
+ }
if (beanType != null) {
return beanType.newInstance();
- } else if (beanName == null) {
- throw new IllegalArgumentException("Property 'beanName', 'beanType' or 'beanClassName' must be set!");
- } else if (applicationContext == null) {
- throw new IllegalArgumentException("Property 'beanName' specified, but no BeanFactory set!");
} else {
Object answer = applicationContext.getBean(beanName);
if (answer == null) {
Modified: servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/EndpointFinder.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/EndpointFinder.java?rev=778756&r1=778755&r2=778756&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/EndpointFinder.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/EndpointFinder.java Tue May 26 15:38:25 2009
@@ -69,17 +69,12 @@
if (shouldIgnoreBean(aClass)) {
continue;
}
- if (isClient(aClass)) {
- registerClient(aClass);
- } else if (!Modifier.isAbstract(aClass.getModifiers())) {
+ if (!isClient(aClass)) {
list.add(createBeanEndpoint(aClass));
}
}
}
- public void destroy() throws Exception {
- }
-
/**
* Should the bean be ignored?
*/
@@ -99,11 +94,6 @@
return type.isInterface() || Modifier.isAbstract(type.getModifiers());
}
- protected void registerClient(Class type) {
- /** TODO */
- }
-
-
protected BeanEndpoint createBeanEndpoint(Class serviceType) {
Endpoint endpointAnnotation = (Endpoint) serviceType.getAnnotation(Endpoint.class);
if (endpointAnnotation == null) {
Modified: servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/pojos/LoggingPojo.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/pojos/LoggingPojo.java?rev=778756&r1=778755&r2=778756&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/pojos/LoggingPojo.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/pojos/LoggingPojo.java Tue May 26 15:38:25 2009
@@ -47,7 +47,7 @@
private Log log = LogFactory.getLog(LoggingPojo.class);
- private SourceTransformer sourceTransformer = new SourceTransformer();
+ private final SourceTransformer sourceTransformer = new SourceTransformer();
private int maxMsgDisplaySize = 1500;
@@ -59,14 +59,6 @@
this.log = log;
}
- public SourceTransformer getSourceTransformer() {
- return sourceTransformer;
- }
-
- public void setSourceTransformer(SourceTransformer sourceTransformer) {
- this.sourceTransformer = sourceTransformer;
- }
-
public int getMaxMsgDisplaySize() {
return maxMsgDisplaySize;
}
Modified: servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/BeanInfo.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/BeanInfo.java?rev=778756&r1=778755&r2=778756&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/BeanInfo.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/BeanInfo.java Tue May 26 15:38:25 2009
@@ -128,7 +128,7 @@
}
}
Expression parametersExpression = createMethodParametersExpression(parameterExpressions);
- operations.put(opName, new MethodInfo(clazz, method, parametersExpression));
+ operations.put(opName, new MethodInfo(method, parametersExpression));
}
protected Expression createMethodParametersExpression(final Expression[] parameterExpressions) {
Modified: servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/BeanSupport.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/BeanSupport.java?rev=778756&r1=778755&r2=778756&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/BeanSupport.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/BeanSupport.java Tue May 26 15:38:25 2009
@@ -32,6 +32,7 @@
import javax.jbi.servicedesc.ServiceEndpoint;
import javax.management.ObjectName;
import javax.xml.namespace.QName;
+import javax.xml.transform.Source;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -174,6 +175,19 @@
exchange.setMessage(answer, "out");
getDeliveryChannel().send(exchange);
}
+
+ /**
+ * A helper method to reply to a given message exchange with a given Source
+ *
+ * @param exchange the message exchange
+ * @param answer the answer as an XML source
+ * @throws MessagingException
+ */
+ public void answer(MessageExchange exchange, Source answer) throws MessagingException {
+ NormalizedMessage message = exchange.createMessage();
+ message.setContent(answer);
+ answer(exchange, message);
+ }
/**
* A helper method which fails and completes the given exchange with the specified fault
Modified: servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/MethodInfo.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/MethodInfo.java?rev=778756&r1=778755&r2=778756&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/MethodInfo.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/MethodInfo.java Tue May 26 15:38:25 2009
@@ -30,12 +30,11 @@
* @version $Revision: $
*/
public class MethodInfo {
- private Class type;
- private Method method;
- private Expression parametersExpression;
+
+ private final Method method;
+ private final Expression parametersExpression;
- public MethodInfo(Class type, Method method, Expression parametersExpression) {
- this.type = type;
+ public MethodInfo(Method method, Expression parametersExpression) {
this.method = method;
this.parametersExpression = parametersExpression;
}
@@ -65,18 +64,6 @@
}
- public Class getType() {
- return type;
- }
-
- public Method getMethod() {
- return method;
- }
-
- public Expression getParametersExpression() {
- return parametersExpression;
- }
-
protected Object invoke(Method mth, Object pojo, Object[] arguments,
MessageExchange exchange) throws IllegalAccessException, InvocationTargetException {
return mth.invoke(pojo, arguments);
Modified: servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/ReflectionUtils.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/ReflectionUtils.java?rev=778756&r1=778755&r2=778756&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/ReflectionUtils.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/ReflectionUtils.java Tue May 26 15:38:25 2009
@@ -22,7 +22,11 @@
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
-public class ReflectionUtils extends org.springframework.util.ReflectionUtils {
+public final class ReflectionUtils extends org.springframework.util.ReflectionUtils {
+
+ private ReflectionUtils() {
+ // hide constructor to keep CheckStyle happy
+ }
public static <T extends Annotation> void callLifecycleMethod(final Object bean, final Class<T> annotation) {
ReflectionUtils.doWithMethods(bean.getClass(), new ReflectionUtils.MethodCallback() {
Modified: servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/Request.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/Request.java?rev=778756&r1=778755&r2=778756&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/Request.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/support/Request.java Tue May 26 15:38:25 2009
@@ -29,16 +29,13 @@
import org.apache.servicemix.bean.BeanEndpoint;
public class Request {
- private Object bean;
+ private final Object bean;
// Keep track of callbacks already called, so that the same callback
// can not be called twice
private Map<Method, Boolean> callbacks;
- private Object correlationId;
+ private final Object correlationId;
private final Set<MessageExchange> exchanges = new HashSet<MessageExchange>();
- public Request() {
- }
-
public Request(Object correlationId, Object bean, MessageExchange exchange) {
this.correlationId = correlationId;
this.bean = bean;
@@ -51,13 +48,6 @@
public Object getBean() {
return bean;
}
-
- /**
- * @param bean the bean to set
- */
- public void setBean(Object bean) {
- this.bean = bean;
- }
public Object getCorrelationId() {
return correlationId;
Modified: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/AbstractBeanComponentTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/AbstractBeanComponentTest.java?rev=778756&r1=778755&r2=778756&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/AbstractBeanComponentTest.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/AbstractBeanComponentTest.java Tue May 26 15:38:25 2009
@@ -55,7 +55,9 @@
container.shutDown();
}
- protected abstract void configureContainer();
+ protected void configureContainer() {
+ container.setFlowName("st");
+ }
@SuppressWarnings("unchecked")
protected void assertBeanEndpointRequestsMapEmpty(BeanEndpoint beanEndpoint) throws Exception {
Modified: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/BeanEndpointInOptionalOutTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/BeanEndpointInOptionalOutTest.java?rev=778756&r1=778755&r2=778756&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/BeanEndpointInOptionalOutTest.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/BeanEndpointInOptionalOutTest.java Tue May 26 15:38:25 2009
@@ -24,9 +24,12 @@
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessageExchange.Role;
import javax.jbi.messaging.MessagingException;
+import javax.jbi.messaging.NormalizedMessage;
import javax.xml.namespace.QName;
import javax.xml.transform.Source;
+import org.apache.servicemix.bean.support.BeanSupport;
+import org.apache.servicemix.common.util.MessageUtil;
import org.apache.servicemix.jbi.jaxp.StringSource;
import org.apache.servicemix.jbi.listener.MessageExchangeListener;
@@ -37,10 +40,6 @@
private static final QName IN_OPTIONAL_OUT_PRODUCER = new QName("urn:test", "ioo-producer");
private static final QName IN_OPTIONAL_OUT_CONSUMER = new QName("urn:test", "ioo-consumer");
-
- protected void configureContainer() {
- container.setFlowName("st");
- }
//we first have a set of tests that send an InOptionalOut exchange to the bean endpoint
public void testInOptionalOutWithBeanType() throws Exception {
@@ -57,6 +56,75 @@
assertBeanEndpointRequestsMapEmpty(endpoint);
}
+ public void testInOptionalOutWithSimplePojo() throws Exception {
+ MySimplePojo pojo = new MySimplePojo();
+ BeanEndpoint endpoint = createBeanEndpoint(pojo, IN_OPTIONAL_OUT_PRODUCER);
+ component.addEndpoint(endpoint);
+
+ MessageExchange io = client.createInOptionalOutExchange();
+ io.setService(IN_OPTIONAL_OUT_PRODUCER);
+ io.getMessage("in").setContent(new StringSource("<request status='ok'/>"));
+ client.send(io);
+
+ io = client.receive();
+ assertEquals(ExchangeStatus.DONE, io.getStatus());
+ assertBeanEndpointRequestsMapEmpty(endpoint);
+ }
+
+ public void testInOptionalOutWithPojoHandlingMessageExchange() throws Exception {
+ MyMessageExchangePojo pojo = new MyMessageExchangePojo();
+ BeanEndpoint endpoint = createBeanEndpoint(pojo, IN_OPTIONAL_OUT_PRODUCER);
+ component.addEndpoint(endpoint);
+
+ MessageExchange io = client.createInOptionalOutExchange();
+ io.setService(IN_OPTIONAL_OUT_PRODUCER);
+ io.getMessage("in").setContent(new StringSource("<request status='ok'/>"));
+ io.getMessage("in").setProperty("todo", "fault");
+ client.send(io);
+
+ io = client.receive();
+ assertEquals(ExchangeStatus.ACTIVE, io.getStatus());
+ assertNotNull(io.getFault());
+ client.done(io);
+ assertBeanEndpointRequestsMapEmpty(endpoint);
+ }
+
+ public void testInOptionalOutWithPojoHandlingMessageExchangeClientFault() throws Exception {
+ MyMessageExchangePojo pojo = new MyMessageExchangePojo();
+ BeanEndpoint endpoint = createBeanEndpoint(pojo, IN_OPTIONAL_OUT_PRODUCER);
+ component.addEndpoint(endpoint);
+
+ MessageExchange io = client.createInOptionalOutExchange();
+ io.setService(IN_OPTIONAL_OUT_PRODUCER);
+ io.getMessage("in").setContent(new StringSource("<request status='ok'/>"));
+ io.getMessage("in").setProperty("todo", "reply");
+ client.send(io);
+
+ io = client.receive();
+ assertEquals(ExchangeStatus.ACTIVE, io.getStatus());
+ io.setFault(io.createFault());
+ client.send(io);
+ assertBeanEndpointRequestsMapEmpty(endpoint);
+ }
+
+ public void testInOptionalOutWithPojoHandlingMessageExchangeClientError() throws Exception {
+ MyMessageExchangePojo pojo = new MyMessageExchangePojo();
+ BeanEndpoint endpoint = createBeanEndpoint(pojo, IN_OPTIONAL_OUT_PRODUCER);
+ component.addEndpoint(endpoint);
+
+ MessageExchange io = client.createInOptionalOutExchange();
+ io.setService(IN_OPTIONAL_OUT_PRODUCER);
+ io.getMessage("in").setContent(new StringSource("<request status='ok'/>"));
+ io.getMessage("in").setProperty("todo", "fault");
+ client.send(io);
+
+ io = client.receive();
+ assertEquals(ExchangeStatus.ACTIVE, io.getStatus());
+ assertNotNull(io.getFault());
+ client.fail(io, new RuntimeException("Abort! Abort!"));
+ assertBeanEndpointRequestsMapEmpty(endpoint);
+ }
+
public void testInOptionalOutReturnsOut() throws Exception {
MyInOptionalOutBean bean = new MyInOptionalOutBean();
bean.response = new StringSource("<goodbye/>");
@@ -110,6 +178,7 @@
assertBeanEndpointRequestsMapEmpty(endpoint);
}
+
// this is a set of tests where the bean endpoint also acts as consumer and sends InOptionalOut exchanges
public void testInOptionalOutConsumerDone() throws Exception {
BeanEndpoint provider = createBeanEndpoint(MyInOptionalOutBean.class, IN_OPTIONAL_OUT_PRODUCER);
@@ -212,14 +281,11 @@
return endpoint;
}
- public static final class MyInOptionalOutBean implements MessageExchangeListener {
+ public static final class MyInOptionalOutBean extends BeanSupport implements MessageExchangeListener {
private Source fault;
private Source response;
- @Resource
- private DeliveryChannel channel;
-
public void onMessageExchange(MessageExchange exchange) throws MessagingException {
if (exchange instanceof InOptionalOut) {
onInOptionalOut((InOptionalOut) exchange);
@@ -231,35 +297,64 @@
private void onInOptionalOut(InOptionalOut exchange) throws MessagingException {
if (exchange.getStatus() == ExchangeStatus.ACTIVE) {
if (response != null) {
- exchange.setOutMessage(exchange.createMessage());
- exchange.getOutMessage().setContent(response);
+ answer(exchange, response);
response = null;
} else if (fault != null) {
- exchange.setFault(exchange.createFault());
- exchange.getFault().setContent(fault);
+ fail(exchange, exchange.createFault());
fault = null;
} else {
- exchange.setStatus(ExchangeStatus.DONE);
+ done(exchange);
}
- channel.send(exchange);
}
}
}
- public static final class MyConsumerBean implements MessageExchangeListener {
+ public static final class MySimplePojo {
+
+ public void handle(@XPath(xpath = "/request/@status") String status) {
+ if (status.equalsIgnoreCase("ok")) {
+ // ok
+ } else {
+ // let's throw an Exception to see if we can blow things up
+ throw new RuntimeException("Expecting OK, but was " + status);
+ }
+ }
+ }
+
+ public static final class MyMessageExchangePojo {
@Resource
private DeliveryChannel channel;
+
+ public void handle(MessageExchange exchange, @Property(name = "todo") String todo) throws MessagingException {
+ if ("fault".equals(todo)) {
+ exchange.setFault(exchange.createFault());
+ exchange.getFault().setContent(new StringSource("<fault>It went astray!</fault>"));
+ channel.send(exchange);
+ } else if ("reply".equals(todo)) {
+ NormalizedMessage out = exchange.createMessage();
+ exchange.setMessage(out, "out");
+ MessageUtil.transfer(exchange.getMessage("in"), out);
+ channel.send(exchange);
+ } else {
+ // everything is OK
+ }
+ }
+ }
+
+ public static final class MyConsumerBean extends BeanSupport implements MessageExchangeListener {
+
+ @Resource
private QName target;
private MessageExchange original;
private Source fault;
public void send() throws MessagingException {
- InOptionalOut ioo = channel.createExchangeFactory().createInOptionalOutExchange();
+ InOptionalOut ioo = getExchangeFactory().createInOptionalOutExchange();
ioo.setService(target);
ioo.setInMessage(ioo.createMessage());
ioo.getMessage("in").setContent(new StringSource("<hello/>"));
- channel.send(ioo);
+ send(ioo);
}
public void onMessageExchange(MessageExchange exchange) throws MessagingException {
@@ -272,23 +367,16 @@
} else {
if (exchange.getStatus() == ExchangeStatus.ACTIVE) {
if (fault != null) {
- exchange.setFault(exchange.createFault());
- exchange.getFault().setContent(fault);
+ fail(exchange, exchange.createFault());
fault = null;
} else {
- exchange.setStatus(ExchangeStatus.DONE);
- done();
+ done(exchange);
+ done(original);
}
- channel.send(exchange);
} else {
- done();
+ done(original);
}
}
}
-
- private void done() throws MessagingException {
- original.setStatus(ExchangeStatus.DONE);
- channel.send(original);
- }
}
}
Added: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/BeanEndpointTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/BeanEndpointTest.java?rev=778756&view=auto
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/BeanEndpointTest.java (added)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/BeanEndpointTest.java Tue May 26 15:38:25 2009
@@ -0,0 +1,102 @@
+/*
+ * 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.servicemix.bean;
+
+import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.InOnly;
+import javax.xml.namespace.QName;
+
+import org.apache.servicemix.bean.beans.AnnotatedBean;
+import org.springframework.beans.BeansException;
+import org.springframework.context.support.StaticApplicationContext;
+
+/**
+ * Test cases for {@link BeanEndpoint}
+ */
+public class BeanEndpointTest extends AbstractBeanComponentTest {
+
+ private static final QName SERVICE = new QName("urn:test", "service");
+ private static final String BEAN_NAME = "MyBean";
+
+ public void testExceptionWithNothingSet() throws Exception {
+ BeanEndpoint endpoint = new BeanEndpoint();
+ try {
+ endpoint.createBean();
+ fail("Should have thrown an IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ //this is what we expected
+ }
+ }
+
+ public void testExceptionOnBeanNameWithoutApplicationContext() throws Exception {
+ BeanEndpoint endpoint = new BeanEndpoint();
+ try {
+ endpoint.setBeanName(BEAN_NAME);
+ endpoint.createBean();
+ fail("Should have thrown an IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ //this is what we expected
+ }
+ }
+
+ public void testExceptionOnNonExistingBeanInApplicationContext() throws Exception {
+ BeanEndpoint endpoint = new BeanEndpoint();
+ try {
+ endpoint.setApplicationContext(new StaticApplicationContext() {
+ @Override
+ public Object getBean(String name) throws BeansException {
+ return null;
+ }
+ });
+ endpoint.setBeanName(BEAN_NAME);
+ endpoint.createBean();
+ fail("Should have thrown a NoSuchBeanException");
+ } catch (NoSuchBeanException e) {
+ assertEquals(BEAN_NAME, e.getBeanName());
+ assertEquals(endpoint, e.getEndpoint());
+ }
+ }
+
+ public void testBeanClassName() throws Exception {
+ BeanEndpoint endpoint = new BeanEndpoint();
+ endpoint.setBeanClassName(AnnotatedBean.class.getName());
+ endpoint.setService(SERVICE);
+ endpoint.setEndpoint("endpoint");
+ component.addEndpoint(endpoint);
+
+ assertEquals("Endpoint should have found the correct bean type", AnnotatedBean.class, endpoint.getBeanType());
+ }
+
+ public void testExceptionOnInvalidOperationName() throws Exception {
+ BeanEndpoint endpoint = new BeanEndpoint();
+ endpoint.setBean(new Object());
+ endpoint.setService(SERVICE);
+ endpoint.setEndpoint("endpoint");
+ component.addEndpoint(endpoint);
+
+ InOnly exchange = client.createInOnlyExchange();
+ exchange.setService(SERVICE);
+ exchange.setOperation(new QName("urn:test", "invalid-ops"));
+ client.sendSync(exchange);
+
+ assertEquals(ExchangeStatus.ERROR, exchange.getStatus());
+ assertTrue(exchange.getError() instanceof UnknownMessageExchangeTypeException);
+ UnknownMessageExchangeTypeException umete = (UnknownMessageExchangeTypeException) exchange.getError();
+ assertEquals(endpoint, umete.getEndpoint());
+ assertEquals(exchange.getExchangeId(), umete.getMessageExchange().getExchangeId());
+ }
+}
Propchange: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/BeanEndpointTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/ConsumerBeanTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/ConsumerBeanTest.java?rev=778756&r1=778755&r2=778756&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/ConsumerBeanTest.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/ConsumerBeanTest.java Tue May 26 15:38:25 2009
@@ -46,7 +46,6 @@
jbi.shutDown();
}
- /*
public void test() throws Exception {
BeanComponent bc = new BeanComponent();
BeanEndpoint ep = new BeanEndpoint();
@@ -74,7 +73,6 @@
assertExchangeWorked(me);
client.done(me);
}
- */
protected void assertExchangeWorked(MessageExchange me) throws Exception {
if (me.getStatus() == ExchangeStatus.ERROR) {
Added: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/EndpointFinderTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/EndpointFinderTest.java?rev=778756&view=auto
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/EndpointFinderTest.java (added)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/EndpointFinderTest.java Tue May 26 15:38:25 2009
@@ -0,0 +1,67 @@
+/*
+ * 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.servicemix.bean;
+
+import javax.xml.namespace.QName;
+
+/**
+ * Test cases for {@link EndpointFinder}
+ */
+public class EndpointFinderTest extends AbstractBeanComponentTest {
+
+ private EndpointFinder finder;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ finder = new EndpointFinder(component);
+ }
+
+ public void testNameOnly() throws Exception {
+ BeanEndpoint endpoint = finder.createBeanEndpoint(MyNameEndpoint.class);
+ assertNotNull(endpoint);
+ assertEquals(component.getEPRServiceName(), endpoint.getService());
+ assertEquals("test", endpoint.getEndpoint());
+ }
+
+ public void testLocalPartOnly() throws Exception {
+ BeanEndpoint endpoint = finder.createBeanEndpoint(MyLocalPartEndpoint.class);
+ assertNotNull(endpoint);
+ assertEquals(new QName("test"), endpoint.getService());
+ }
+
+ public void testCreateBeanEndpointWithNoAnnotation() throws Exception {
+ try {
+ finder.createBeanEndpoint(String.class);
+ fail("Should have thrown an IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ //this is OK
+ }
+ }
+
+ @Endpoint(name = "test")
+ public static final class MyNameEndpoint {
+
+ }
+
+ @Endpoint(serviceName = "test")
+ public static final class MyLocalPartEndpoint {
+
+ }
+
+}
Propchange: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/EndpointFinderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/LoggingPojoTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/LoggingPojoTest.java?rev=778756&r1=778755&r2=778756&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/LoggingPojoTest.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/LoggingPojoTest.java Tue May 26 15:38:25 2009
@@ -16,21 +16,32 @@
*/
package org.apache.servicemix.bean;
-import javax.xml.namespace.QName;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.activation.DataHandler;
+import javax.activation.FileDataSource;
+import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.InOnly;
import javax.jbi.messaging.InOut;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessagingException;
+import javax.xml.namespace.QName;
-import org.apache.servicemix.jbi.container.JBIContainer;
-import org.apache.servicemix.jbi.jaxp.StringSource;
+import junit.framework.TestCase;
+
+import org.apache.commons.logging.impl.SimpleLog;
import org.apache.servicemix.bean.pojos.LoggingPojo;
import org.apache.servicemix.client.ServiceMixClient;
import org.apache.servicemix.client.ServiceMixClientFacade;
-import junit.framework.TestCase;
+import org.apache.servicemix.jbi.container.JBIContainer;
+import org.apache.servicemix.jbi.jaxp.StringSource;
public class LoggingPojoTest extends TestCase {
protected JBIContainer container;
protected BeanComponent component;
+ protected List<String> messages;
protected void setUp() throws Exception {
container = new JBIContainer();
@@ -38,9 +49,19 @@
container.init();
component = new BeanComponent();
+ messages = new LinkedList<String>();
BeanEndpoint loggingEndpoint = new BeanEndpoint();
- loggingEndpoint.setBeanClassName(LoggingPojo.class.getName());
+ LoggingPojo pojo = new LoggingPojo();
+ pojo.setMaxMsgDisplaySize(35);
+ pojo.setLog(new SimpleLog("my-logger") {
+ @Override
+ protected void log(int type, Object message, Throwable t) {
+ messages.add(message.toString());
+ }
+ });
+ loggingEndpoint.setBean(pojo);
loggingEndpoint.setService(new QName("logging"));
+ loggingEndpoint.setInterfaceName(new QName("logservice"));
loggingEndpoint.setEndpoint("endpoint");
component.addEndpoint(loggingEndpoint);
container.activateComponent(component, "servicemix-bean");
@@ -55,19 +76,56 @@
public void testInOnly() throws Exception {
ServiceMixClient client = new ServiceMixClientFacade(component.getComponentContext());
InOnly exchange = client.createInOnlyExchange();
- exchange.setService(new QName("logging"));
- exchange.getInMessage().setContent(new StringSource("<hello/>"));
- exchange.getInMessage().setProperty("key", "value");
+ fillExchange(exchange);
+ client.sendSync(exchange);
+ assertEquals(ExchangeStatus.DONE, exchange.getStatus());
+
+ assertLog();
+ }
+
+ public void testInOnlyWithWrongContent() throws Exception {
+ ServiceMixClient client = new ServiceMixClientFacade(component.getComponentContext());
+ InOnly exchange = client.createInOnlyExchange();
+ fillExchange(exchange);
+ exchange.getInMessage().setContent(new StringSource("This is not XML!"));
client.sendSync(exchange);
+ assertEquals(ExchangeStatus.DONE, exchange.getStatus());
+
+ assertLog();
+ assertTrue(messages.get(0).contains("Unable to display:"));
}
public void testInOut() throws Exception {
ServiceMixClient client = new ServiceMixClientFacade(component.getComponentContext());
InOut exchange = client.createInOutExchange();
- exchange.setService(new QName("logging"));
- exchange.getInMessage().setContent(new StringSource("<hello/>"));
- exchange.getInMessage().setProperty("key", "value");
+ fillExchange(exchange);
client.sendSync(exchange);
+ assertEquals(ExchangeStatus.ACTIVE, exchange.getStatus());
client.done(exchange);
+
+ assertLog();
+ }
+
+ private void fillExchange(MessageExchange exchange) throws MessagingException {
+ exchange.setService(new QName("logging"));
+ exchange.setInterfaceName(new QName("logservice"));
+ exchange.setOperation(new QName("log"));
+ exchange.setProperty("xml", new StringSource("<an>XML value</an>"));
+ exchange.getMessage("in").setContent(new StringSource("<hello>world</hello>"));
+ exchange.getMessage("in").setProperty("key", "value");
+ exchange.getMessage("in").setProperty("xml", new StringSource("<an>XML value</an>"));
+ exchange.getMessage("in").addAttachment("attachment", new DataHandler(new FileDataSource("src/test/resources/attachment.png")));
+ }
+
+ private void assertLog() {
+ assertEquals(1, messages.size());
+ String message = messages.get(0);
+ assertTrue(message.contains("service: logging"));
+ assertTrue(message.contains("endpoint: endpoint"));
+ assertTrue(message.contains("interface: logservice"));
+ assertTrue(message.contains("operation: log"));
+ assertTrue(message.contains("key = value"));
+ assertTrue(message.contains("xml = <an>XML value</an>"));
+ assertTrue(message.contains("attachments:"));
}
}
Added: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/MethodInvocationFailedExceptionTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/MethodInvocationFailedExceptionTest.java?rev=778756&view=auto
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/MethodInvocationFailedExceptionTest.java (added)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/MethodInvocationFailedExceptionTest.java Tue May 26 15:38:25 2009
@@ -0,0 +1,57 @@
+/*
+ * 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.servicemix.bean;
+
+import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.InOnly;
+import javax.xml.namespace.QName;
+
+/**
+ * Test cases for {@link MethodInvocationFailedException}
+ */
+public class MethodInvocationFailedExceptionTest extends AbstractBeanComponentTest {
+
+ private static final QName SERVICE = new QName("urn:test", "service");
+
+ public void testReceiveMethodInvocationFailedException() throws Exception {
+ BeanEndpoint endpoint = new BeanEndpoint();
+ MyPojo pojo = new MyPojo();
+ endpoint.setBean(pojo);
+ endpoint.setService(SERVICE);
+ endpoint.setEndpoint("endpoint");
+ component.addEndpoint(endpoint);
+
+ InOnly exchange = client.createInOnlyExchange();
+ exchange.setService(SERVICE);
+ client.sendSync(exchange);
+
+ assertEquals(ExchangeStatus.ERROR, exchange.getStatus());
+ assertTrue(exchange.getError() instanceof MethodInvocationFailedException);
+
+ MethodInvocationFailedException mife = (MethodInvocationFailedException) exchange.getError();
+ assertEquals(endpoint, mife.getEndpoint());
+ assertEquals(pojo, mife.getPojo());
+ assertTrue(mife.getCause() instanceof IllegalArgumentException);
+ }
+
+ public static final class MyPojo {
+
+ public void handle() {
+ throw new IllegalArgumentException("Hey, how can I have an IllegalArgumentException when there is no argument?");
+ }
+ }
+}
Propchange: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/MethodInvocationFailedExceptionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/ParameterAnnotationsTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/ParameterAnnotationsTest.java?rev=778756&view=auto
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/ParameterAnnotationsTest.java (added)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/ParameterAnnotationsTest.java Tue May 26 15:38:25 2009
@@ -0,0 +1,116 @@
+/*
+ * 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.servicemix.bean;
+
+import java.util.Currency;
+
+import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.InOnly;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.NormalizedMessage;
+import javax.xml.namespace.QName;
+import javax.xml.transform.Source;
+import javax.xml.transform.TransformerException;
+
+import org.apache.servicemix.bean.beans.ParameterAnnotationsBean;
+import org.apache.servicemix.jbi.jaxp.StringSource;
+
+/**
+ * Test cases for handling method parameter binding on method calls in servicemix-bean
+ */
+public class ParameterAnnotationsTest extends AbstractBeanComponentTest {
+
+ private static final QName SERVICE = new QName("urn:test", "service");
+
+ private Pojo pojo;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ pojo = new Pojo();
+ BeanEndpoint endpoint = new BeanEndpoint();
+ endpoint.setBean(pojo);
+ endpoint.setService(SERVICE);
+ endpoint.setEndpoint("endpoint");
+
+ component.addEndpoint(endpoint);
+ }
+
+ public void testDefaultParameterMapping() throws Exception {
+ InOnly exchange = client.createInOnlyExchange();
+ exchange.setService(SERVICE);
+ exchange.setOperation(new QName("handle"));
+
+ NormalizedMessage message = exchange.getInMessage();
+ Source content = new StringSource("<request xmlns='urn:test'><type>important!</type></request>");
+ message.setContent(content);
+
+ client.sendSync(exchange);
+ assertEquals(ExchangeStatus.DONE, exchange.getStatus());
+
+ assertNotNullAndType(pojo.parameters[0], MessageExchange.class);
+ assertNotNullAndType(pojo.parameters[1], NormalizedMessage.class);
+ assertSame(message, pojo.parameters[1]);
+ assertNotNullAndType(pojo.parameters[2], Source.class);
+ assertSame(content, pojo.parameters[2]);
+ }
+
+ public void testAnnotatedParameterMapping() throws Exception {
+ InOnly exchange = client.createInOnlyExchange();
+ exchange.setService(SERVICE);
+ exchange.setOperation(new QName("annotations"));
+
+ Currency value = Currency.getInstance("EUR");
+ NormalizedMessage message = exchange.getInMessage();
+ message.setProperty("key", value);
+ Source content = new StringSource("<ns:request xmlns:ns=\"urn:test\"><ns:type>important!</ns:type></ns:request>");
+ message.setContent(content);
+
+ client.sendSync(exchange);
+ assertEquals(ExchangeStatus.DONE, exchange.getStatus());
+
+ assertNotNullAndType(pojo.parameters[0], Currency.class);
+ assertSame(value, pojo.parameters[0]);
+ assertNotNullAndType(pojo.parameters[1], String.class);
+ }
+
+ private void assertNotNullAndType(Object object, Class<?> type) {
+ assertNotNull(object);
+ assertTrue(type.isAssignableFrom(object.getClass()));
+ }
+
+ public static final class Pojo extends ParameterAnnotationsBean {
+
+ private Object[] parameters;
+
+ @Override
+ public void handle(MessageExchange exchange, NormalizedMessage message, Source source) throws TransformerException {
+ saveParameters(exchange, message, source);
+ }
+
+ @Override
+ public void annotations(@Property(name = "key") Object value,
+ @XPath(uri = "urn:test", prefix = "ns", xpath = "/request/type") String type) {
+ saveParameters(value, type);
+ }
+
+ private void saveParameters(Object... parms) {
+ parameters = parms;
+ }
+ }
+}
Propchange: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/ParameterAnnotationsTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/TransformBeanSupportSedaFlowTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/TransformBeanSupportSedaFlowTest.java?rev=778756&r1=778755&r2=778756&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/TransformBeanSupportSedaFlowTest.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/TransformBeanSupportSedaFlowTest.java Tue May 26 15:38:25 2009
@@ -16,11 +16,127 @@
*/
package org.apache.servicemix.bean;
+import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.Fault;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessagingException;
+import javax.transaction.xa.XAException;
+import javax.xml.namespace.QName;
+
+import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
+import org.apache.servicemix.bean.TransformBeanSupportTest.ReturnErrorComponent;
+import org.apache.servicemix.bean.TransformBeanSupportTest.ReturnFaultComponent;
+import org.apache.servicemix.bean.support.TransformBeanSupport;
+import org.apache.servicemix.jbi.jaxp.SourceTransformer;
+import org.apache.servicemix.jbi.jaxp.StringSource;
+import org.apache.servicemix.tck.ReceiverComponent;
+import org.w3c.dom.Element;
+
public class TransformBeanSupportSedaFlowTest extends TransformBeanSupportTest {
+ private GeronimoTransactionManager txmanager;
+
+ public void testInOutWithTx() throws Exception {
+ TransformBeanSupport transformer = new MyTransformer();
+ BeanEndpoint transformEndpoint = createBeanEndpoint(transformer);
+ component.addEndpoint(transformEndpoint);
+
+ txmanager.begin();
+ MessageExchange io = client.createInOutExchange();
+ io.setService(new QName("transform"));
+ io.getMessage("in").setContent(new StringSource("<hello/>"));
+ client.sendSync(io);
+
+ assertEquals(ExchangeStatus.ACTIVE, io.getStatus());
+ Element e = new SourceTransformer().toDOMElement(io.getMessage("out"));
+ assertEquals("hello", e.getNodeName());
+
+ client.done(io);
+ assertEquals(ExchangeStatus.DONE, io.getStatus());
+ txmanager.commit();
+ assertBeanEndpointRequestsMapEmpty(transformEndpoint);
+ }
+
+ public void testInOnlyWithTx() throws Exception {
+ TransformBeanSupport transformer = createTransformer("receiver");
+ BeanEndpoint transformEndpoint = createBeanEndpoint(transformer);
+ component.addEndpoint(transformEndpoint);
+
+ ReceiverComponent receiver = new ReceiverComponent();
+ activateComponent(receiver, "receiver");
+
+ txmanager.begin();
+ MessageExchange io = client.createInOnlyExchange();
+ io.setService(new QName("transform"));
+ io.getMessage("in").setContent(new StringSource("<hello/>"));
+ client.sendSync(io);
+
+ assertEquals(ExchangeStatus.DONE, io.getStatus());
+ txmanager.commit();
+ assertBeanEndpointRequestsMapEmpty(transformEndpoint);
+
+ receiver.getMessageList().assertMessagesReceived(1);
+ }
+
+ public void testInOnlyWithErrorTx() throws Exception {
+ TransformBeanSupport transformer = createTransformer("error");
+ BeanEndpoint transformEndpoint = createBeanEndpoint(transformer);
+ component.addEndpoint(transformEndpoint);
+
+ activateComponent(new ReturnErrorComponent(), "error");
+
+ txmanager.begin();
+ MessageExchange io = client.createInOnlyExchange();
+ io.setService(new QName("transform"));
+ io.getMessage("in").setContent(new StringSource("<hello/>"));
+ client.sendSync(io);
+
+ assertEquals(ExchangeStatus.ERROR, io.getStatus());
+ txmanager.commit();
+ assertBeanEndpointRequestsMapEmpty(transformEndpoint);
+ }
+
+ public void testRobustInOnlyWithFaultTx() throws Exception {
+ TransformBeanSupport transformer = createTransformer("fault");
+ BeanEndpoint transformEndpoint = createBeanEndpoint(transformer);
+ component.addEndpoint(transformEndpoint);
+
+ activateComponent(new ReturnFaultComponent() {
+ @Override
+ public void onMessageExchange(MessageExchange exchange) throws MessagingException {
+ if (exchange.getStatus() == ExchangeStatus.ACTIVE) {
+ Fault fault = exchange.createFault();
+ fault.setContent(new StringSource("<fault/>"));
+ exchange.setFault(fault);
+ sendSync(exchange);
+ }
+ }
+ }, "fault");
+
+ txmanager.begin();
+ MessageExchange io = client.createRobustInOnlyExchange();
+ io.setService(new QName("transform"));
+ io.getMessage("in").setContent(new StringSource("<hello/>"));
+ client.sendSync(io);
+
+ assertEquals(ExchangeStatus.ACTIVE, io.getStatus());
+ assertNotNull(io.getFault());
+ client.done(io);
+ txmanager.commit();
+
+ assertBeanEndpointRequestsMapEmpty(transformEndpoint);
+ }
+
protected void configureContainer() {
- container.setFlowName("seda");
+ try {
+ txmanager = new GeronimoTransactionManager();
+ container.setTransactionManager(txmanager);
+ container.setAutoEnlistInTransaction(true);
+ container.setFlowName("seda");
+ } catch (XAException e) {
+ fail("Unable to create TransactionMaanger: " + e.getMessage());
+ }
}
}
Modified: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/TransformBeanSupportTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/TransformBeanSupportTest.java?rev=778756&r1=778755&r2=778756&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/TransformBeanSupportTest.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/TransformBeanSupportTest.java Tue May 26 15:38:25 2009
@@ -29,6 +29,8 @@
import javax.jbi.messaging.NormalizedMessage;
import javax.xml.namespace.QName;
+import org.w3c.dom.Element;
+
import org.apache.servicemix.bean.support.ExchangeTarget;
import org.apache.servicemix.bean.support.TransformBeanSupport;
import org.apache.servicemix.common.util.MessageUtil;
@@ -39,14 +41,10 @@
import org.apache.servicemix.jbi.jaxp.SourceTransformer;
import org.apache.servicemix.jbi.jaxp.StringSource;
import org.apache.servicemix.jbi.listener.MessageExchangeListener;
+import org.apache.servicemix.jbi.transformer.CopyTransformer;
import org.apache.servicemix.tck.ReceiverComponent;
-import org.w3c.dom.Element;
public class TransformBeanSupportTest extends AbstractBeanComponentTest {
-
- protected void configureContainer() {
- container.setFlowName("st");
- }
public void testInOut() throws Exception {
TransformBeanSupport transformer = new MyTransformer();
@@ -243,8 +241,28 @@
client.fail(io, new Exception("I do not like faults"));
assertBeanEndpointRequestsMapEmpty(transformEndpoint);
}
+
+ public void testSetCopyProperties() throws Exception {
+ TransformBeanSupport transformer = createTransformer("fault");
+ transformer.setCopyProperties(true);
+ assertTrue(transformer.isCopyProperties());
+ assertTrue(((CopyTransformer) transformer.getMessageTransformer()).isCopyProperties());
+ transformer.setCopyProperties(false);
+ assertFalse(transformer.isCopyProperties());
+ assertFalse(((CopyTransformer) transformer.getMessageTransformer()).isCopyProperties());
+ }
+
+ public void testSetCopyAttachements() throws Exception {
+ TransformBeanSupport transformer = createTransformer("fault");
+ transformer.setCopyAttachments(true);
+ assertTrue(transformer.isCopyAttachments());
+ assertTrue(((CopyTransformer) transformer.getMessageTransformer()).isCopyAttachments());
+ transformer.setCopyAttachments(false);
+ assertFalse(transformer.isCopyAttachments());
+ assertFalse(((CopyTransformer) transformer.getMessageTransformer()).isCopyAttachments());
+ }
- private MyTransformer createTransformer(String targetService) {
+ protected MyTransformer createTransformer(String targetService) {
MyTransformer transformer = new MyTransformer();
ExchangeTarget target = new ExchangeTarget();
target.setService(new QName(targetService));
@@ -252,7 +270,7 @@
return transformer;
}
- private BeanEndpoint createBeanEndpoint(TransformBeanSupport transformer) {
+ protected BeanEndpoint createBeanEndpoint(TransformBeanSupport transformer) {
BeanEndpoint transformEndpoint = new BeanEndpoint();
transformEndpoint.setBean(transformer);
transformEndpoint.setService(new QName("transform"));
Added: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/beans/ParameterAnnotationsBean.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/beans/ParameterAnnotationsBean.java?rev=778756&view=auto
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/beans/ParameterAnnotationsBean.java (added)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/beans/ParameterAnnotationsBean.java Tue May 26 15:38:25 2009
@@ -0,0 +1,57 @@
+/*
+ * 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.servicemix.bean.beans;
+
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.NormalizedMessage;
+import javax.xml.transform.Source;
+import javax.xml.transform.TransformerException;
+
+import org.apache.servicemix.bean.Property;
+import org.apache.servicemix.bean.XPath;
+import org.apache.servicemix.jbi.jaxp.SourceTransformer;
+
+/**
+ * Example bean to show method parameter mapping with and without annotations
+ */
+public class ParameterAnnotationsBean {
+
+ private final SourceTransformer transformer = new SourceTransformer();
+
+ /**
+ * The handle method shows the types that will be automatically recognized
+ * without having to annotate the parameters
+ *
+ * @throws TransformerException
+ */
+ public void handle(MessageExchange exchange,
+ NormalizedMessage message,
+ Source source) throws TransformerException {
+ System.out.println(String.format("Received exchange %s with content %s", exchange.toString(), transformer.toString(source)));
+ }
+
+ /**
+ * The annotations methods shows some of the options for annotating parameters
+ *
+ * @param value uses the {@link Property} annotation to extract a message property
+ * @param type use the {@link XPath} annotation to extract data from the message content using XPath
+ */
+ public void annotations(@Property(name = "key") Object value,
+ @XPath(prefix = "my", uri = "urn:test", xpath = "/my:message/@type") String type) {
+ System.out.println(String.format("Type %s has key value %s", type, value));
+ }
+}
Propchange: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/beans/ParameterAnnotationsBean.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/BeanInfoTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/BeanInfoTest.java?rev=778756&view=auto
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/BeanInfoTest.java (added)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/BeanInfoTest.java Tue May 26 15:38:25 2009
@@ -0,0 +1,65 @@
+/*
+ * 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.servicemix.bean.support;
+
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessagingException;
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+
+import org.aopalliance.intercept.MethodInvocation;
+import org.apache.servicemix.bean.Operation;
+import org.apache.servicemix.tck.mock.MockMessageExchange;
+
+/**
+ * Test cases for {@link BeanInfo}
+ */
+public class BeanInfoTest extends TestCase {
+
+ public void testIntrospect() throws Exception {
+ BeanInfo info = new BeanInfo(Pojo.class, new DefaultMethodInvocationStrategy());
+ info.introspect();
+
+ assertNotNull("Should find methods in superclass",
+ createInvocation(info, "doSomethingElse"));
+ assertNotNull("Should find methods based on the name in @Operation annotation",
+ createInvocation(info, "doSomethingMoreSophisticated"));
+ assertNull("Should not find method names that have @Operation information",
+ createInvocation(info, "doSomething"));
+ }
+
+ private MethodInvocation createInvocation(BeanInfo info, String name) throws MessagingException {
+ MessageExchange exchange = new MockMessageExchange();
+ exchange.setOperation(new QName(name));
+ return info.createInvocation(new Pojo(), exchange);
+ }
+
+ public static final class Pojo extends AbstractPojo {
+ @Operation(name = "doSomethingMoreSophisticated")
+ public void doSomething() {
+ //just an operation
+ }
+ }
+
+ public abstract static class AbstractPojo {
+
+ public void doSomethingElse() {
+ //just another operation
+ }
+ }
+}
Propchange: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/BeanInfoTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/BeanSupportTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/BeanSupportTest.java?rev=778756&view=auto
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/BeanSupportTest.java (added)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/BeanSupportTest.java Tue May 26 15:38:25 2009
@@ -0,0 +1,119 @@
+/*
+ * 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.servicemix.bean.support;
+
+import javax.jbi.messaging.MessageExchange;
+import javax.xml.namespace.QName;
+
+import org.apache.servicemix.bean.AbstractBeanComponentTest;
+import org.apache.servicemix.bean.BeanEndpoint;
+import org.apache.servicemix.common.JbiConstants;
+import org.apache.servicemix.tck.mock.MockMessageExchange;
+
+/**
+ * Test cases for {@link BeanSupport}
+ */
+public class BeanSupportTest extends AbstractBeanComponentTest {
+
+ private static final String CORRELATION_ID = "my-correlation-id";
+ private static final QName TARGET_SERVICE = new QName("urn:test", "new-service");
+ private static final QName TARGET_INTERFACE = new QName("urn:test", "new-interface");
+ private static final QName TARGET_OPERATION = new QName("urn:test", "new-operation");
+
+ private BeanSupport support;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ support = new Pojo();
+ BeanEndpoint endpoint = new BeanEndpoint();
+ endpoint.setService(new QName("urn:test", "service"));
+ endpoint.setEndpoint("endpoint");
+ endpoint.setBean(support);
+
+ component.addEndpoint(endpoint);
+ }
+
+ public void testCreateInOnlyExchange() throws Exception {
+ MessageExchange answer = support.createInOnlyExchange(TARGET_SERVICE, null, null, null);
+ assertNotNull(answer);
+ assertEquals(TARGET_SERVICE, answer.getService());
+
+ answer = support.createInOnlyExchange(null, TARGET_INTERFACE, TARGET_OPERATION, null);
+ assertNotNull(answer);
+ assertEquals(TARGET_INTERFACE, answer.getInterfaceName());
+ assertEquals(TARGET_OPERATION, answer.getOperation());
+ }
+
+ public void testCreateInOutExchange() throws Exception {
+ MessageExchange answer = support.createInOutExchange(TARGET_SERVICE, null, null, null);
+ assertNotNull(answer);
+ assertEquals(TARGET_SERVICE, answer.getService());
+
+ answer = support.createInOutExchange(null, TARGET_INTERFACE, TARGET_OPERATION, null);
+ assertNotNull(answer);
+ assertEquals(TARGET_INTERFACE, answer.getInterfaceName());
+ assertEquals(TARGET_OPERATION, answer.getOperation());
+ }
+
+ public void testCreateInOnlyExchangeFromOriginalExchange() throws Exception {
+ MessageExchange answer = support.createInOnlyExchange(createMockExchange());
+ assertNotNull(answer);
+ assertEquals(CORRELATION_ID, answer.getProperty(JbiConstants.CORRELATION_ID));
+ }
+
+ public void testCreateInOnlyExchangeFromOriginalExchangeWithCorrelationId() throws Exception {
+ MessageExchange exchange = createMockExchange();
+ exchange.setProperty(JbiConstants.CORRELATION_ID, "my-other-correlation-id");
+ MessageExchange answer = support.createInOnlyExchange(exchange);
+ assertNotNull(answer);
+ assertEquals("my-other-correlation-id", answer.getProperty(JbiConstants.CORRELATION_ID));
+ }
+
+ public void testCreateInOutExchangeFromOriginalExchange() throws Exception {
+ MessageExchange answer = support.createInOutExchange(createMockExchange());
+ assertNotNull(answer);
+ assertEquals(CORRELATION_ID, answer.getProperty(JbiConstants.CORRELATION_ID));
+ }
+
+ public void testCreateRobustInOnlyExchangeFromOriginalExchange() throws Exception {
+ MessageExchange answer = support.createRobustInOnlyExchange(createMockExchange());
+ assertNotNull(answer);
+ assertEquals(CORRELATION_ID, answer.getProperty(JbiConstants.CORRELATION_ID));
+ }
+
+ public void testCreateInOptionalOutExchangeFromOriginalExchange() throws Exception {
+ MessageExchange answer = support.createInOptionalOutExchange(createMockExchange());
+ assertNotNull(answer);
+ assertEquals(CORRELATION_ID, answer.getProperty(JbiConstants.CORRELATION_ID));
+ }
+
+ private MessageExchange createMockExchange() {
+ return new MockMessageExchange() {
+ @Override
+ public String getExchangeId() {
+ return CORRELATION_ID;
+ }
+ };
+ }
+
+ private static final class Pojo extends BeanSupport {
+
+ }
+
+}
Propchange: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/BeanSupportTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/DefaultMethodInvocationStrategyTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/DefaultMethodInvocationStrategyTest.java?rev=778756&view=auto
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/DefaultMethodInvocationStrategyTest.java (added)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/DefaultMethodInvocationStrategyTest.java Tue May 26 15:38:25 2009
@@ -0,0 +1,54 @@
+/*
+ * 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.servicemix.bean.support;
+
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.NormalizedMessage;
+import javax.xml.transform.Source;
+
+import junit.framework.TestCase;
+
+import org.apache.servicemix.jbi.jaxp.StringSource;
+import org.apache.servicemix.tck.mock.MockMessageExchange;
+
+/**
+ * Test cases for {@link DefaultMethodInvocationStrategy}
+ */
+public class DefaultMethodInvocationStrategyTest extends TestCase {
+
+ private DefaultMethodInvocationStrategy strategy;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ strategy = new DefaultMethodInvocationStrategy();
+ strategy.loadDefaultRegistry();
+ }
+
+ public void testMessageExchangeExpression() throws Exception {
+ MessageExchange exchange = new MockMessageExchange();
+ NormalizedMessage message = exchange.createMessage();
+ Source source = new StringSource("<my><content type='test'/></my>");
+ message.setContent(source);
+ exchange.setMessage(message, "in");
+
+ assertSame(exchange, strategy.getDefaultParameterTypeExpression(MessageExchange.class).evaluate(exchange, message));
+ assertSame(message, strategy.getDefaultParameterTypeExpression(NormalizedMessage.class).evaluate(exchange, message));
+ assertSame(source, strategy.getDefaultParameterTypeExpression(Source.class).evaluate(exchange, message));
+ }
+
+}
Propchange: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/DefaultMethodInvocationStrategyTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/ExchangeTargetTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/ExchangeTargetTest.java?rev=778756&view=auto
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/ExchangeTargetTest.java (added)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/ExchangeTargetTest.java Tue May 26 15:38:25 2009
@@ -0,0 +1,99 @@
+/*
+ * 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.servicemix.bean.support;
+
+import javax.jbi.component.ComponentContext;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessagingException;
+import javax.jbi.servicedesc.ServiceEndpoint;
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+
+import org.apache.servicemix.tck.mock.MockMessageExchange;
+import org.easymock.EasyMock;
+
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+
+/**
+ * Test cases for {@link ExchangeTarget}
+ */
+public class ExchangeTargetTest extends TestCase {
+
+ private static final String ENDPOINT = "endpoint";
+ private static final QName INTERFACE = new QName("urn:test", "interface");
+ private static final QName OPERATION = new QName("urn:test", "operation");
+ private static final QName SERVICE = new QName("urn:test", "service");
+
+ private ExchangeTarget target;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ target = new ExchangeTarget();
+ }
+
+ public void testMessagingExceptionWhenNoTargetSet() throws Exception {
+ try {
+ target.afterPropertiesSet();
+ fail("Should have thrown a MessagingException");
+ } catch (MessagingException e) {
+ //this is OK
+ }
+ try {
+ target.configureTarget(null, null);
+ fail("Should have thrown a MessagingException");
+ } catch (MessagingException e) {
+ //this is OK
+ }
+ }
+
+ public void testInterfaceAndOperation() throws Exception {
+ target.setInterface(INTERFACE);
+ target.setOperation(OPERATION);
+
+ MessageExchange exchange = new MockMessageExchange();
+ target.configureTarget(exchange, null);
+ assertEquals(INTERFACE, exchange.getInterfaceName());
+ assertEquals(OPERATION, exchange.getOperation());
+ }
+
+ public void testServiceAndEndpoint() throws Exception {
+ target.setService(SERVICE);
+ target.setEndpoint(ENDPOINT);
+
+ ComponentContext context = EasyMock.createMock(ComponentContext.class);
+ ServiceEndpoint endpoint = EasyMock.createMock(ServiceEndpoint.class);
+ expect(context.getEndpoint(SERVICE, ENDPOINT)).andReturn(endpoint);
+ replay(context);
+
+ MessageExchange exchange = new MockMessageExchange();
+ target.configureTarget(exchange, context);
+ assertEquals(SERVICE, exchange.getService());
+ assertEquals(endpoint, exchange.getEndpoint());
+ }
+
+ public void testUri() throws Exception {
+ target.setUri("interface:urn:test:interface");
+ target.afterPropertiesSet();
+
+ MessageExchange exchange = new MockMessageExchange();
+ target.configureTarget(exchange, EasyMock.createMock(ComponentContext.class));
+ assertEquals(INTERFACE, exchange.getInterfaceName());
+ }
+}
Propchange: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/support/ExchangeTargetTest.java
------------------------------------------------------------------------------
svn:eol-style = native