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