[mule-user] Object push on the JMS queue is not a JMS message?

7 views
Skip to first unread message

Florent Georges

unread,
Mar 30, 2007, 7:22:28 AM3/30/07
to Mule User ML
Hi

I continue my discovering of Mule. I modified my sample
to get its input from a REST URI, transform it to a Java
object through RestToCustomerRequest, a custom Mule
transformer. Then routing it to a JMS queue after having
transformed it to the type the JMS receiver is expecting
for (by CustomerToLoanQuote).

When I start Mule, there is no problem. When I send the
first REST input, I got a stack trace. From what I
understand from this ST, the object push on the JMS queue is
not a JMS message.

I'm lost here. Does someone have an idea of what I did
wrong?

Here is the mule-config.xml:

<mule-configuration id="fgeorges-loan-broker" version="1.0">

<connector name="jmsConnector"
className="org.mule.providers.jms.JmsConnector">
<properties>
<property name="connectionFactoryJndiName"
value="ConnectionFactory"/>
<property name="jndiInitialFactory"

value="org.activemq.jndi.ActiveMQInitialContextFactory"/>
<property name="specification" value="1.1"/>
<map name="connectionFactoryProperties">
<property name="useEmbeddedBroker" value="true"/>
</map>
</properties>
</connector>

<endpoint-identifiers>
<endpoint-identifier
name="input-rest"
value="jetty:rest://localhost:10111/loanbroker"/>
<endpoint-identifier
name="bank-jms-out"
value="jms://test.loanbroker.request"/>
</endpoint-identifiers>

<transformers>
<transformer
name="rest-to-obj"
className="org.fgeorges.tries.mule.m02.RestToCustomerRequest"/>
<transformer
name="req-to-jms"
className="org.fgeorges.tries.mule.m02.CustomerToLoanQuote"/>
</transformers>

<model name="loan-broker">

<mule-descriptor
name="LoanBroker"
implementation="org.mule.components.simple.BridgeComponent">
<inbound-router>
<endpoint
address="servlet://localhost:10111/loanbroker"
transformers="rest-to-obj"/>
<endpoint address="input-rest"/>
</inbound-router>
<outbound-router>
<router
className="org.mule.routing.outbound.OutboundPassThroughRouter">
<endpoint address="bank-jms-out" transformers="req-to-jms"/>
</router>
</outbound-router>
</mule-descriptor>

</model>

</mule-configuration>

Here is RestToCustomerRequest.java:

package org.fgeorges.tries.mule.m02;

import org.mule.transformers.AbstractEventAwareTransformer;
import org.mule.umo.UMOEventContext;
import org.mule.umo.transformer.TransformerException;

public class RestToCustomerRequest
extends AbstractEventAwareTransformer
{
public RestToCustomerRequest()
{
setReturnClass(CustomerRequest.class);
}

public Object transform(Object src,
String encoding,
UMOEventContext context)
throws TransformerException
{
double amount;
int term;
String name;

try {
amount = Double.parseDouble(
getParam(context, "amount"));
term = Integer.parseInt(
getParam(context, "term"));
name = getParam(context, "name");
}
catch ( Exception ex ) {
throw new TransformerException(this, ex);
}

return new CustomerRequest(amount, term, name);
}

protected String getParam(UMOEventContext context,
String name)
throws IllegalArgumentException
{
String value = context.getMessage()
. getStringProperty(name, null);
if ( value == null ) {
throw new IllegalArgumentException("...");
}
return value;
}
}


Here is CustomerToLoanQuote.java:

package org.fgeorges.tries.mule.m02;

import org.mule.transformers.AbstractEventAwareTransformer;
import org.mule.umo.UMOEventContext;
import org.mule.umo.transformer.TransformerException;

public class CustomerToLoanQuote
extends AbstractEventAwareTransformer
{
public CustomerToLoanQuote()
{
setReturnClass(LoanQuoteRequestJMS.class);
}

public Object transform(Object src,
String encoding,
UMOEventContext ctxt)
throws TransformerException
{
CustomerRequest in =
(CustomerRequest) ctxt.getMessage().getPayload();
LoanQuoteRequestJMS out =
new LoanQuoteRequestJMS();
out.setAmount(in.getAmount());
out.setTerm(in.getTerm());
out.setScore(1.5);
return out;
}
}

And finally the stack trace:

INFO 2007-03-30 13:10:49,124 [SocketListener0-1]
org.mule.providers.jms.JmsMessageDispatcher: Successfully connected to:
jms://test.loanbroker.request
INFO 2007-03-30 13:10:49,194 [SocketListener0-1]
org.mule.providers.jms.JmsMessageDispatcher: Disconnected from:
jms://test.loanbroker.request
ERROR 2007-03-30 13:10:49,204 [SocketListener0-1]
org.mule.providers.http.servlet.MuleRESTReceiverServlet: message:
Failed to route event via endpoint:
MuleEndpoint{connector=org.mule.providers.http.servlet.ServletConnector@c2ee15,
endpointUri=http://localhost:10111/loanbroker?amount=12345&term=36&name=Florent,
transformer=Transformer{name='rest-to-obj', returnClass=false,
returnClass=false, sourceTypes=[class java.lang.Object]},
name='endpoint.servlet.loanbroker', type='receiver',
properties={amount=12345, term=36, name=Florent},
transactionConfig=Transaction{factory=null, action=NONE,
timeout=30000}, filter=null, deleteUnacceptedMessages=false,
initialised=true, securityFilter=null, synchronous=null,
initialState=started, createConnector=0, remoteSync=null,
remoteSyncTimeout=null, endpointEncoding=null}. Message payload is of
type: java.lang.String
org.mule.umo.routing.RoutingException: Failed to route event via
endpoint:
MuleEndpoint{connector=org.mule.providers.http.servlet.ServletConnector@c2ee15,
endpointUri=http://localhost:10111/loanbroker?amount=12345&term=36&name=Florent,
transformer=Transformer{name='rest-to-obj', returnClass=false,
returnClass=false, sourceTypes=[class java.lang.Object]},
name='endpoint.servlet.loanbroker', type='receiver',
properties={amount=12345, term=36, name=Florent},
transactionConfig=Transaction{factory=null, action=NONE,
timeout=30000}, filter=null, deleteUnacceptedMessages=false,
initialised=true, securityFilter=null, synchronous=null,
initialState=started, createConnector=0, remoteSync=null,
remoteSyncTimeout=null, endpointEncoding=null}. Message payload is of
type: java.lang.String
at
org.mule.routing.inbound.ForwardingConsumer.process(ForwardingConsumer.java:66)
at
org.mule.routing.inbound.InboundMessageRouter.route(InboundMessageRouter.java:84)
at
org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage(AbstractMessageReceiver.java:558)
at
org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:304)
at
org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:244)
at
org.mule.providers.http.servlet.MuleRESTReceiverServlet.doGet(MuleRESTReceiverServlet.java:87)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:428)
at
org.mortbay.jetty.servlet.ServletHandler.dispatch(ServletHandler.java:666)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
at org.mortbay.http.HttpServer.service(HttpServer.java:909)
at
org.mortbay.http.HttpConnection.service(HttpConnection.java:816)
at
org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:982)
at
org.mortbay.http.HttpConnection.handle(HttpConnection.java:833)
at
org.mortbay.http.SocketListener.handleConnection(SocketListener.java:244)
at
org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
at
org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
Caused by: org.mule.umo.routing.RoutingException: Failed to route event
via endpoint: null. Message payload is of type:
org.fgeorges.tries.mule.m02.CustomerRequest
at
org.mule.routing.outbound.OutboundMessageRouter.route(OutboundMessageRouter.java:85)
at
org.mule.routing.inbound.ForwardingConsumer.process(ForwardingConsumer.java:51)
... 19 more
Caused by: org.mule.umo.routing.CouldNotRouteOutboundMessageException:
Failed to route event via endpoint:
MuleEndpoint{connector=org.mule.providers.jms.JmsConnector@633d51,
endpointUri=jms://test.loanbroker.request,
transformer=Transformer{name='req-to-jms', returnClass=false,
returnClass=false, sourceTypes=[class java.lang.Object]},
name='endpoint.jms.test.loanbroker.request', type='sender',
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.fgeorges.tries.mule.m02.CustomerRequest
at
org.mule.routing.outbound.FilteringOutboundRouter.route(FilteringOutboundRouter.java:76)
at
org.mule.routing.outbound.OutboundPassThroughRouter.route(OutboundPassThroughRouter.java:81)
at
org.mule.routing.outbound.OutboundMessageRouter$1.doInTransaction(OutboundMessageRouter.java:76)
at
org.mule.transaction.TransactionTemplate.execute(TransactionTemplate.java:39)
at
org.mule.routing.outbound.OutboundMessageRouter.route(OutboundMessageRouter.java:81)
... 20 more
Caused by: org.mule.umo.provider.DispatchException: Message is not a
JMS message, it is of type
"org.fgeorges.tries.mule.m02.LoanQuoteRequestJMS". Check the
transformer for this Connector "jmsConnector". Failed to route event
via endpoint:
MuleEndpoint{connector=org.mule.providers.jms.JmsConnector@633d51,
endpointUri=jms://test.loanbroker.request,
transformer=Transformer{name='req-to-jms', returnClass=false,
returnClass=false, sourceTypes=[class java.lang.Object]},
name='endpoint.jms.test.loanbroker.request', type='sender',
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.fgeorges.tries.mule.m02.CustomerRequest
at
org.mule.providers.jms.JmsMessageDispatcher.dispatchMessage(JmsMessageDispatcher.java:168)
at
org.mule.providers.jms.JmsMessageDispatcher.doSend(JmsMessageDispatcher.java:349)
at
org.mule.providers.AbstractMessageDispatcher.send(AbstractMessageDispatcher.java:233)
at org.mule.impl.MuleSession.sendEvent(MuleSession.java:328)
at org.mule.impl.MuleSession.sendEvent(MuleSession.java:209)
at
org.mule.routing.outbound.AbstractOutboundRouter.send(AbstractOutboundRouter.java:118)
at
org.mule.routing.outbound.FilteringOutboundRouter.route(FilteringOutboundRouter.java:67)
... 24 more

Thanks in advance. Regards,

--drkm



___________________________________________________________________________
Découvrez une nouvelle façon d'obtenir des réponses à toutes vos questions !
Profitez des connaissances, des opinions et des expériences des internautes sur Yahoo! Questions/Réponses
http://fr.answers.yahoo.com

---------------------------------------------------------------------
To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Angel Gomez

unread,
Mar 30, 2007, 2:14:56 PM3/30/07
to us...@mule.codehaus.org

Check http://mule.codehaus.org/display/MULE/Jms+Provider at "Jms
Transformers".

Florent Georges wrote:

--
/* Nunca interrumpas a tu enemigo cuando está cometiendo un error. */ - Napoleón Bonaparte.

Andrew Perepelytsya

unread,
Mar 30, 2007, 10:48:25 PM3/30/07
to us...@mule.codehaus.org
Just declare a standard ObjectToJms message transformer and add it to the endpoint. Your custom object will be eventually converted to JMS ObjectMessage. Also, ensure your custom object is serializable in that case.

Andrew

>org.mule.routing.inbound.ForwardingConsumer.process (ForwardingConsumer.java:66)
>        at
>org.mule.routing.inbound.InboundMessageRouter.route(InboundMessageRouter.java:84)
>        at
>org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage (AbstractMessageReceiver.java:558)
>        at
>org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:304)
>        at
>org.mule.providers.AbstractMessageReceiver.routeMessage (AbstractMessageReceiver.java:244)

>        at
>org.mule.providers.http.servlet.MuleRESTReceiverServlet.doGet(MuleRESTReceiverServlet.java:87)
>        at javax.servlet.http.HttpServlet.service(HttpServlet.java :595)
>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
>        at
>org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:428)
>        at
>org.mortbay.jetty.servlet.ServletHandler.dispatch (ServletHandler.java:666)

>        at
>org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568)
>        at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
>        at org.mortbay.http.HttpContext.handle (HttpContext.java:1482)

>        at org.mortbay.http.HttpServer.service(HttpServer.java:909)
>        at
>org.mortbay.http.HttpConnection.service(HttpConnection.java:816)
>        at
>org.mortbay.http.HttpConnection.handleNext (HttpConnection.java:982)
>org.mule.routing.outbound.OutboundPassThroughRouter.route (OutboundPassThroughRouter.java:81)
>        at
>org.mule.routing.outbound.OutboundMessageRouter$1.doInTransaction(OutboundMessageRouter.java:76)
>        at
>org.mule.transaction.TransactionTemplate.execute (TransactionTemplate.java:39)

>        at
>org.mule.routing.outbound.OutboundMessageRouter.route(OutboundMessageRouter.java:81)
>        ... 20 more
>Caused by: org.mule.umo.provider.DispatchException : Message is not a
>JMS message, it is of type
>"org.fgeorges.tries.mule.m02.LoanQuoteRequestJMS". Check the
>transformer for this Connector "jmsConnector". Failed to route event
>via endpoint:
>MuleEndpoint{connector=org.mule.providers.jms.JmsConnector@633d51,
>endpointUri=jms://test.loanbroker.request,
>transformer=Transformer{name='req-to-jms', returnClass=false,
>returnClass=false, sourceTypes=[class java.lang.Object]},
>name='endpoint.jms.test.loanbroker.request', type='sender',
>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.fgeorges.tries.mule.m02.CustomerRequest
>        at
>org.mule.providers.jms.JmsMessageDispatcher.dispatchMessage(JmsMessageDispatcher.java:168)
>        at
>org.mule.providers.jms.JmsMessageDispatcher.doSend (JmsMessageDispatcher.java:349)

>        at
>org.mule.providers.AbstractMessageDispatcher.send(AbstractMessageDispatcher.java:233)
>        at org.mule.impl.MuleSession.sendEvent(MuleSession.java:328)
>        at org.mule.impl.MuleSession.sendEvent(MuleSession.java:209)
>        at
>org.mule.routing.outbound.AbstractOutboundRouter.send(AbstractOutboundRouter.java:118)
>        at
>org.mule.routing.outbound.FilteringOutboundRouter.route (FilteringOutboundRouter.java:67)

>        ... 24 more
>
>  Thanks in advance.  Regards,
>
>--drkm
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>___________________________________________________________________________
>D�couvrez une nouvelle fa�on d'obtenir des r�ponses � toutes vos questions !
>Profitez des connaissances, des opinions et des exp�riences des internautes sur Yahoo! Questions/R�ponses

>http://fr.answers.yahoo.com
>
>---------------------------------------------------------------------
>To unsubscribe from this list please visit:
>
>    http://xircles.codehaus.org/manage_email
>
>
>

--
/* Nunca interrumpas a tu enemigo cuando est� cometiendo un error. */ - Napole�n Bonaparte.

Florent Georges

unread,
Apr 2, 2007, 9:53:47 AM4/2/07
to us...@mule.codehaus.org
Hi

That perfectly answer my problem. Thanks to both of you!

Regards,

--drkm


Andrew Perepelytsya wrote:

> org.mortbay.http.HttpContext.handle(HttpContext.java:1482)


> > > at
> org.mortbay.http.HttpServer.service(HttpServer.java:909)
> > > at
> > >org.mortbay.http.HttpConnection.service(HttpConnection.java:816)
> > > at
> >

> >org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:982)

>org.mule.transaction.TransactionTemplate.execute(TransactionTemplate.java
> > :39)
> > > at
> > >org.mule.routing.outbound.OutboundMessageRouter.route(

> > >D�couvrez une nouvelle fa�on d'obtenir des r�ponses �
> toutes vos
> > questions !
> > >Profitez des connaissances, des opinions et des exp�riences des
> > internautes sur Yahoo! Questions/R�ponses


> > >http://fr.answers.yahoo.com
> > >
> >
>
>---------------------------------------------------------------------
> > >To unsubscribe from this list please visit:
> > >
> > > http://xircles.codehaus.org/manage_email
> > >
> > >
> > >
> >
> > --

> > /* Nunca interrumpas a tu enemigo cuando est� cometiendo un
> error. */ -
> > Napole�n Bonaparte.


> >
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe from this list please visit:
> >
> > http://xircles.codehaus.org/manage_email
> >
> >
>


___________________________________________________________________________
Découvrez une nouvelle façon d'obtenir des réponses à toutes vos questions !
Profitez des connaissances, des opinions et des expériences des internautes sur Yahoo! Questions/Réponses

Reply all
Reply to author
Forward
0 new messages