I am trying to use a BridgeComponent UMO with filtering outbound routers to route messages based on one of the message properties. The configuration file for the BridgeComponent is as follows:
<!DOCTYPE mule-configuration PUBLIC "-//MuleSource //DTD mule-configuration XML V1.0//EN" "http://mule.mulesource.org/dtds/mule-configuration.dtd"> <mule-configuration id="Router1" version="1.0"> <description> A component to route messages to the next destination in the message header. Wired to JMS queues. </description> <connector name="jmsConnector" className="org.mule.providers.jms.JmsConnector"> <properties> <property name="specification" value="1.1"/> <property name="connectionFactoryJndiName" value="ConnectionFactory"/> <property name="jndiInitialFactory" value="org.apache.activemq.jndi.ActiveMQInitialContextFactory"/> <map name="connectionFactoryProperties"> <property name="brokerURL" value="tcp://foo:61616"/> </map> </properties> </connector> <transformers> <transformer name="SetMessageRoutingProperties" className="org.oclc.mule.transformers.SetMessageRoutingProperties" returnClass="org.apache.activemq.command.ActiveMQMessage"/> </transformers> <model name="Router1"> <mule-descriptor name="Router" implementation="org.mule.components.simple.BridgeComponent"> <inbound-router> <endpoint address="jms://Q.MODS_IN" transformers="SetMessageRoutingProperties"/> </inbound-router> <outbound-router> <catch-all-strategy className="org.mule.routing.ForwardingCatchAllStrategy"> <endpoint address="jms://error.queue"/> </catch-all-strategy> <router className="org.mule.routing.outbound.FilteringOutboundRouter"> <endpoint address="jms://Q.MOD_TITLE"/> <filter className="org.mule.routing.filters.MessagePropertyFilter" expression="destination=MOD_TITLE"/> </router> <router className="org.mule.routing.outbound.FilteringOutboundRouter"> <endpoint address="jms://Q.MOD_DATE"/> <filter className="org.mule.routing.filters.MessagePropertyFilter" expression="destination=MOD_DATE"/> </router> <router className="org.mule.routing.outbound.FilteringOutboundRouter"> <endpoint address="jms://Q.MODS_OUT"/> <filter className="org.mule.routing.filters.MessagePropertyFilter" expression="destination=MODS_OUT"/> </router> <router className="org.mule.routing.outbound.FilteringOutboundRouter"> <endpoint address="smtp://[EMAIL PROTECTED]"/> <filter expectedType="java.lang.Exception" className="org.mule.routing.filters.PayloadTypeFilter"/> </router> </outbound-router> </mule-descriptor> </model> </mule-configuration> The SetMessageRoutingProperties transformer runs (produces console entries) and returns an instance of org.apache.activemq.command.ActiveMQMessage, which implements javax.jms.Message, but then something goes wrong with the outbound routing, producing the following messages: INFO 2007-01-30 17:43:31,105 [jmsConnector.jmsConnector.dispatchers.dispatcher.1] org.mule.providers.jms.JmsMessageDispatcher: Successfully connected to: jms://error.queue ERROR 2007-01-30 17:43:31,121 [jmsConnector.jmsConnector.dispatchers.dispatcher.1] org.mule.impl.DefaultExceptionStrategy: ************************************************************************ ******** Message : Message is not a JMS message, it is of type "java.lang.String". Check the transformer for this Connector "jmsConnector". Failed to route event via endpoint: [EMAIL PROTECTED], endpointUri=jms://error.queue, transformer=Transformer{name='JMSMessageToObject', returnClass=false, returnClass=false, sourceTypes=[interface javax.jms.Message, interface javax.jms.Message]}, name='jms.error.queue', type='senderAndReceiver', properties={}, transactionConfig=Transaction{factory=null, action=NONE, timeout=30000}, filter=null, deleteUnacceptedMessages=false, initialised=true, securityFilter=null, synchronous=null, initialState=started, createConnector=0, remoteSync=false, remoteSyncTimeout=null, endpointEncoding=null}. Message payload is of type: org.apache.activemq.command.ActiveMQTextMessage Type : org.mule.umo.provider.DispatchException Code : MULE_ERROR-42999 JavaDoc : http://mule.codehaus.org/docs/apidocs/org/mule/umo/provider/DispatchExce ption.html Payload : ActiveMQTextMessage {commandId = 6, responseRequired = true, messageId = ID:devapp1.dev.oclc.org-46621-1170197003418-1:0:1:1:1, originalDestination = null, originalTransactionId = null, producerId = ID:devapp1.dev.oclc.org-46621-1170197003418-1:0:1:1, destination = queue://Q.MODS_IN, transactionId = null, expiration = 0, timestamp = 1170197003853, arrival = 0, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = null, marshalledProperties = [EMAIL PROTECTED], dataStructure = null, redeliveryCounter = 0, size = 0, properties = {destinations=MOD_DATE,MODS_OUT, destination=MOD_TITLE, MULE_SESSION=SUQ9NGFjNWMwZjktYjBiMy0xMWRiLWJmNjgtZjM3ZTY1NzI1OGE2, job_id=devapp1.dev.oclc.org/cdf-mod-client_valpha/20070130-17:43:23.759- 0500, originator=cdf-mod-client_valpha, MULE_ENDPOINT=jms://Q.MODS_IN, origin=devapp1.dev.oclc.org, start_time=20070130-17:43:23.759-0500}, readOnlyProperties = true, readOnlyBody = true, droppable = false, text = [snipped]} ************************************************************************ ******** Exception stack is: 1. Message is not a JMS message, it is of type "java.lang.String". Check the transformer for this Connector "jmsConnector". Failed to route event via endpoint: [EMAIL PROTECTED], endpointUri=jms://error.queue, transformer=Transformer{name='JMSMessageToObject', returnClass=false, returnClass=false, sourceTypes=[interface javax.jms.Message, interface javax.jms.Message]}, name='jms.error.queue', type='senderAndReceiver', properties={}, transactionConfig=Transaction{factory=null, action=NONE, timeout=30000}, filter=null, deleteUnacceptedMessages=false, initialised=true, securityFilter=null, synchronous=null, initialState=started, createConnector=0, remoteSync=false, remoteSyncTimeout=null, endpointEncoding=null}. Message payload is of type: org.apache.activemq.command.ActiveMQTextMessage (org.mule.umo.provider.DispatchException) org.mule.providers.jms.JmsMessageDispatcher:168 (http://mule.codehaus.org/docs/apidocs/org/mule/umo/provider/DispatchExc eption.html) ************************************************************************ ******** Root Exception stack trace: org.mule.umo.provider.DispatchException: Message is not a JMS message, it is of type "java.lang.String". Check the transformer for this Connector "jmsConnector". Failed to route event via endpoint: [EMAIL PROTECTED], endpointUri=jms://error.queue, transformer=Transformer{name='JMSMessageToObject', returnClass=false, returnClass=false, sourceTypes=[interface javax.jms.Message, interface javax.jms.Message]}, name='jms.error.queue', type='senderAndReceiver', properties={}, transactionConfig=Transaction{factory=null, action=NONE, timeout=30000}, filter=null, deleteUnacceptedMessages=false, initialised=true, securityFilter=null, synchronous=null, initialState=started, createConnector=0, remoteSync=false, remoteSyncTimeout=null, endpointEncoding=null}. Message payload is of type: org.apache.activemq.command.ActiveMQTextMessage at org.mule.providers.jms.JmsMessageDispatcher.dispatchMessage(JmsMessageDi spatcher.java:168) at org.mule.providers.jms.JmsMessageDispatcher.doDispatch(JmsMessageDispatc her.java:69) at org.mule.providers.AbstractMessageDispatcher$Worker.run(AbstractMessageD ispatcher.java:592) at org.mule.impl.work.WorkerContext.run(WorkerContext.java:317) at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker .runTask(ThreadPoolExecutor.java:650) at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker .run(ThreadPoolExecutor.java:675) at java.lang.Thread.run(Thread.java:595) ************************************************************************ ******** I'm not connecting the dots. What have I done wrong? -Jon