You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Jackey Ding <no...@gmail.com> on 2008/11/20 09:11:54 UTC

Meet a problem when using recipientlist

Hi,

I want to wirte a bean dynamically determine what endpoints will be invoked
when a service is called. It seems that dynamic recipientlist can meet my
demand. I wrote a simple method just return a string as endpoint name, and
got the error message as below:

info: Outbound Message
---------------------------
Encoding: UTF-8
Headers:
Messages:
Payload: <soap:Envelope xmlns:soap="
http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:getBillingCountResponse
xmlns:ns1="http://mm.service.integration.symphony
"><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
--------------------------------------
2008-11-20 15:36:36 org.apache.camel.processor.Logger log
error: Failed delivery for exchangeId: ID-mycomputer/3353-1227166593020/0-0.
On delivery attempt: 0 caught:
org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
invoke method: route on router due to:
org.apache.camel.NoTypeConversionAvailableException: No type converter
available to convert from type: class [Ljava.lang.String; to the required
type: javax.xml.transform.Source with value [Ljava.lang.String;@1f3329a
org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
invoke method: route on router due to:
org.apache.camel.NoTypeConversionAvailableException: No type converter
available to convert from type: class [Ljava.lang.String; to the required
type: javax.xml.transform.Source with value [Ljava.lang.String;@1f3329a
    at
org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
    at
org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
    at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
    at
org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
    at
org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
    at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
    at
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
    at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
    at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
    at
org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
    at
org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
    at
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
    at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
    at
org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
    at
org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
    at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
    at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
    at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
    at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
    at java.lang.Thread.run(Thread.java:595)
Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
converter available to convert from type: class [Ljava.lang.String; to the
required type: javax.xml.transform.Source with value
[Ljava.lang.String;@1f3329a
    at
org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
    at
org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
    at
org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
    at org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
    at
org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
    at
org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
    ... 21 more


my configuration is
<bean id="router"
        class="symphony.integration.service.mm.BillingServiceRouter" />

    <camelContext id="camelContext" useJmx="true"
        xmlns="http://activemq.apache.org/camel/schema/spring">
        <route>
            <from
                uri="jbi:endpoint:
http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort"
/>
            <recipientList>
                <methodCall bean="router" method="route"/>
            </recipientList>
        </route>
    </camelContext>

my bean, just return a string.
@RecipientList
    public String[] route(String body) {
        return new String[]{"jbi:endpoint:
http://mm.service.integration.symphony/BillingService/BillingServicePort"};
    }

It's weird, when change config to point-to-point mode it works fine.
        <route>
            <from
                uri="jbi:endpoint:
http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort"
/>
            <to
                uri="jbi:endpoint:
http://mm.service.integration.symphony/BillingService/BillingServicePort" />
        </route>

Thanks & best regards

Re: Meet a problem when using recipientlist

Posted by Jackey Ding <no...@gmail.com>.
Hi William,

It works when I changed code as you suggested.
Thanks a lot.

Jackey

2008/11/21 Willem Jiang <wi...@gmail.com>

> Hi
>
> Oh, here is a thing when you invoke the bean method, the method's return
> value will be set into the exchange's out message,
> So you got the converter not found exception.
> That is a side effect of your get the <recipientList> with a bean
> invocation.
>
> You may change to use a processor to set message header for the
> recipienList to walk around this issue.
>
> <camelContext id="camelContext" useJmx="true"
>         xmlns="http://activemq.apache.org/camel/schema/spring">
>         <route>
>             <from
>                 uri="jbi:endpoint:
>
> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
> " />
>             <processor ref="myProcessor"/>
>             <recipientList>
>                 <header>MyRecipientList</header>
>             </recipientList>
>         </route>
>     </camelContext>
>
> public class MyProcessor implements Processor {
>
>    public void process(Exchange exchange) throws Exception {
>        Message message = exchange.getIn();
>        message.setHeader("MyRecipientList", YOULIST);
>     }
>
> }
>
> Willem
>
>
> Jackey Ding wrote:
> > Hi william,
> >
> > Yes, I changed route method as Claus said. The error still happen.
> >
> > Claus,
> >
> > I am using camel 1.5.0.
> >
> >
> > 2008/11/21 Claus Ibsen <cl...@gmail.com>
> >
> >> Hi
> >>
> >> /Claus Ibsen
> >> Apache Camel Committer
> >> Blog: http://davsclaus.blogspot.com/
> >>
> >>
> >>
> >> On Thu, Nov 20, 2008 at 3:25 PM, Willem Jiang <wi...@gmail.com>
> >> wrote:
> >>> Did you change your bean's route method as Claus suggested ?
> >>> @RecipientList
> >>> public String[] route(Exchange exchange) {
> >>>       System.out.println(exchange.getIn().getBody());
> >>>       return new String[]{"jbi:endpoint:
> >>>
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> >>> "};
> >>> }
> >>>
> >>> Willem
> >> Hi
> >>
> >> Gert V. fixed something with this missing type converter within the
> >> last month or so. What version of Camel are you using? Might be
> >> worthwile to check the commit logs or give gertv a ping as he might
> >> remeber what it was.
> >>
> >> It was something with using servicemix and camel together.
> >>
> >>
> >>> Jackey Ding wrote:
> >>>> Hi,
> >>>>
> >>>> Here is my servicemix.xml, and I have pasted my router bean in
> >> preciously
> >>>> post.
> >>>>
> >>>> <beans xmlns="http://www.springframework.org/schema/beans"
> >>>>     xmlns:sm="http://servicemix.apache.org/config/1.0"
> >>>>     xmlns:cxfse="http://servicemix.apache.org/cxfse/1.0"
> >>>>     xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
> >>>>     xmlns:bean="http://servicemix.apache.org/bean/1.0"
> >>>>     xmlns:camel="http://activemq.apache.org/camel/schema/spring"
> >>>>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >>>>     xmlns:bill="http://mm.service.integration.symphony"
> >>>>     xsi:schemaLocation="
> >>
> http://www.springframework.org/schema/beansclasspath:xmlschema/spring-beans-2.5.xsd
> >>>>
> >>
> http://servicemix.apache.org/config/1.0classpath:xmlschema/servicemix.xsd
> >>>>
> >>
> http://servicemix.apache.org/cxfse/1.0classpath:xmlschema/servicemix-cxf-se.xsd
> >>>>
> >>
> http://servicemix.apache.org/cxfbc/1.0classpath:xmlschema/servicemix-cxf-bc.xsd
> >>>>
> >>
> http://servicemix.apache.org/bean/1.0classpath:xmlschema/servicemix-bean.xsd
> >>>>
> >>
> http://activemq.apache.org/camel/schema/springclasspath:xmlschema/camel-spring.xsd
> >> ">
> >>>>     <sm:container id="jbiContainer" embedded="true">
> >>>>         <sm:activationSpecs>
> >>>>             <sm:activationSpec id="servicemix-camel"
> >>>>                 service="bill:BillingServiceCamelRouter"
> >>>>                 endpoint="BillingServicePort">
> >>>>                 <sm:component>
> >>>>                     <ref bean="jbi" />
> >>>>                 </sm:component>
> >>>>             </sm:activationSpec>
> >>>>         </sm:activationSpecs>
> >>>>         <sm:endpoints>
> >>>>             <cxfse:endpoint id="BillingService" useJBIWrapper="false">
> >>>>                 <cxfse:inFaultInterceptors>
> >>>>                     <bean
> >>>>
> >>>> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
> >>>>                 </cxfse:inFaultInterceptors>
> >>>>                 <cxfse:inInterceptors>
> >>>>                     <bean
> >>>>
> >>>> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
> >>>>                 </cxfse:inInterceptors>
> >>>>                 <cxfse:outFaultInterceptors>
> >>>>                     <bean
> >>>>
> >>>> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
> >>>>                 </cxfse:outFaultInterceptors>
> >>>>                 <cxfse:outInterceptors>
> >>>>                     <bean
> >>>>
> >>>> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
> >>>>                 </cxfse:outInterceptors>
> >>>>                 <cxfse:pojo>
> >>>>                     <bean
> >>>>
> >>>> class="symphony.integration.service.mm.LppBillingServiceImpl" />
> >>>>                 </cxfse:pojo>
> >>>>             </cxfse:endpoint>
> >>>>             <cxfbc:consumer
> >>>>
> >>>> wsdl="classpath:symphony/integration/service/mm/BillingService.wsdl"
> >>>>
> >>>> interfaceName="symphony.integration.service.mm.BillingService"
> >>>>                 targetEndpoint="BillingServicePort"
> >>>>                 targetService="bill:BillingServiceCamelRouter"
> >>>>                 useJBIWrapper="false">
> >>>>                 <cxfbc:inFaultInterceptors>
> >>>>                     <bean
> >>>>
> >>>> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
> >>>>                 </cxfbc:inFaultInterceptors>
> >>>>                 <cxfbc:inInterceptors>
> >>>>                     <bean
> >>>>
> >>>> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
> >>>>                 </cxfbc:inInterceptors>
> >>>>                 <cxfbc:outFaultInterceptors>
> >>>>                     <bean
> >>>>
> >>>> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
> >>>>                 </cxfbc:outFaultInterceptors>
> >>>>                 <cxfbc:outInterceptors>
> >>>>                     <bean
> >>>>
> >>>> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
> >>>>                 </cxfbc:outInterceptors>
> >>>>             </cxfbc:consumer>
> >>>>         </sm:endpoints>
> >>>>     </sm:container>
> >>>>
> >>>>     <bean id="jbi"
> >>>>         class="org.apache.servicemix.camel.CamelJbiComponent" />
> >>>>
> >>>>     <bean id="router"
> >>>>         class="symphony.integration.service.mm.BillingServiceRouter"
> />
> >>>>
> >>>>     <camelContext id="camelContext" useJmx="true"
> >>>>         xmlns="http://activemq.apache.org/camel/schema/spring">
> >>>>         <route>
> >>>>             <from
> >>>>                 uri="jbi:endpoint:
> >>>>
> >>
> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
> >> "
> >>>> />
> >>>>             <recipientList>
> >>>>                 <methodCall bean="router" method="route"/>
> >>>>             </recipientList>
> >>>>         </route>
> >>>>     </camelContext>
> >>>> </beans>
> >>>>
> >>>> Jackey
> >>>>
> >>>> 2008/11/20 Willem Jiang <wi...@gmail.com>
> >>>>
> >>>>> Can you show us your DSL ?
> >>>>> I can't image how this string can be turned into a Source Object, may
> >> be
> >>>>> you just put the recipientlist into the message body instead of
> setting
> >>>>> it into the message header.
> >>>>>
> >>>>> Willem
> >>>>>
> >>>>> Jackey Ding wrote:
> >>>>>> Hi,
> >>>>>>
> >>>>>> I traced error, the real serivce provider is return the correct
> >> message
> >>>>> to
> >>>>>> camel, but camel not pass the message to the client.
> >>>>>> The exception is thrown at method
> >> DefaultTypeConverter.convertTo(Class<T>
> >>>>>> type, Exchange exchange, Object value); because it could not find
> >>>>> suitable
> >>>>>> conversion. Here is the paramter value:
> >>>>>>
> >>>>>> type    Class<T> (javax.xml.transform.Source) (id=90)
> >>>>>>
> >>>>>> exchange    JbiExchange  (id=91)
> >>>>>>     binding    JbiBinding  (id=97)
> >>>>>>     context    SpringCamelContext  (id=100)
> >>>>>>     exception    null
> >>>>>>     exchangeId    null
> >>>>>>     fault    null
> >>>>>>     in    JbiMessage  (id=113)
> >>>>>>     messageExchange    InOutImpl  (id=114)
> >>>>>>     out    JbiMessage  (id=99)
> >>>>>>     pattern    ExchangePattern  (id=116)
> >>>>>>     properties    ConcurrentHashMap<K,V>  (id=118)
> >>>>>>     unitOfWork    DefaultUnitOfWork  (id=121)
> >>>>>>
> >>>>>> value    [0]    "jbi:endpoint:
> >>>>>>
> >>
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> >>>>> "
> >>>>>> jackey
> >>>>>>
> >>>>>> 2008/11/20 Jackey Ding <no...@gmail.com>
> >>>>>>
> >>>>>>> BTW, I find the route method was executed 6 times.
> >>>>>>>
> >>>>>>> Jackey
> >>>>>>>
> >>>>>>> 2008/11/20 Jackey Ding <no...@gmail.com>
> >>>>>>>
> >>>>>>> Hi,
> >>>>>>>> I tried code you pasted, here is the message.
> >>>>>>>>
> >>>>>>>> 2008-11-20 19:53:48
> org.apache.cxf.interceptor.LoggingInInterceptor
> >>>>>>>> logging
> >>>>>>>> infor: Inbound Message
> >>>>>>>> ----------------------------
> >>>>>>>> Encoding:
> >>>>>>>> Headers:
> >>>>>>>> Messages:
> >>>>>>>> Message:
> >>>>>>>>
> >>>>>>>> Payload: <?xml version="1.0" encoding="UTF-8"?><soap:Envelope
> >>>>> xmlns:soap="
> >>>>>>>> http://schemas.xmlsoap.org/soap/envelope/
> >>>>> "><soap:Body><ns1:getBillingCount
> >>>>>>>> xmlns:ns1="http://mm.service.integration.symphony"><arg0
> >>>>>>>> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><entityPage
> >>>>>>>> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><rowSize
> >>>>>>>> xmlns="">10</rowSize></entityPage><rowSize
> >>>>> xmlns="">10</rowSize><billingNo
> >>>>>
> >>
> xmlns="">KP0000000005</billingNo></arg0></ns1:getBillingCount></soap:Body></soap:Envelope>
> >>>>>>>> --------------------------------------
> >>>>>>>> 2008-11-20 19:53:48
> >>>>>>>> org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback
> >>>>> onClose
> >>>>>>>> info: Outbound Message
> >>>>>>>> ---------------------------
> >>>>>>>> Encoding: UTF-8
> >>>>>>>> Headers:
> >>>>>>>> Messages:
> >>>>>>>> Payload: <soap:Envelope xmlns:soap="
> >>>>>>>> http://schemas.xmlsoap.org/soap/envelope/
> >>>>> "><soap:Body><ns1:getBillingCountResponse
> >>>>>>>> xmlns:ns1="http://mm.service.integration.symphony
> >>>>>>>>
> >>
> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
> >>>>>>>> --------------------------------------
> >>>>>>>> 2008-11-20 19:53:48 org.apache.camel.processor.Logger log
> >>>>>>>> error: Failed delivery for exchangeId:
> >>>>>>>> ID-mycomputer/1988-1227182024906/0-0. On delivery attempt: 0
> caught:
> >>>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
> >> Failed
> >>>>> to
> >>>>>>>> invoke method: route on router due to:
> >>>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
> >> converter
> >>>>>>>> available to convert from type: class [Ljava.lang.String; to the
> >>>>> required
> >>>>>>>> type: javax.xml.transform.Source with value
> >> [Ljava.lang.String;@e8709d
> >>>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
> >> Failed
> >>>>> to
> >>>>>>>> invoke method: route on router due to:
> >>>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
> >> converter
> >>>>>>>> available to convert from type: class [Ljava.lang.String; to the
> >>>>> required
> >>>>>>>> type: javax.xml.transform.Source with value
> >> [Ljava.lang.String;@e8709d
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
> >>>>>>>>     at
> >>>>>>>>
> >> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
> >>>>>>>>     at
> >>>>>>>>
> >>
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> >>>>>>>>     at
> >>>>>>>>
> >>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> >>>>>>>>     at java.lang.Thread.run(Thread.java:595)
> >>>>>>>> Caused by: org.apache.camel.NoTypeConversionAvailableException: No
> >> type
> >>>>>>>> converter available to convert from type: class
> [Ljava.lang.String;
> >> to
> >>>>> the
> >>>>>>>> required type: javax.xml.transform.Source with value
> >>>>>>>> [Ljava.lang.String;@e8709d
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
> >>>>>>>>     at
> >>>>> org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
> >>>>>>>>     at
> >>>>>>>>
> >>
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
> >>>>>>>>     ... 21 more
> >>>>>>>> javax.xml.transform.dom.DOMSource@f2e328
> >>>>>>>>
> >>>>>>>> The message in red is system printout.
> >>>>>>>>
> >>>>>>>> BTW, I am using camel 1.5.0.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Jackey
> >>>>>>>>
> >>>>>>>> 2008/11/20 Claus Ibsen <cl...@gmail.com>
> >>>>>>>>
> >>>>>>>>> Hi Try with this
> >>>>>>>>>
> >>>>>>>>>>    @RecipientList
> >>>>>>>>>>    public String[] route(Exchange exchange) {
> >>>>>>>>>>        System.out.println(exchange.getIn().getBody());
> >>>>>>>>>>        return new String[]{"jbi:endpoint:
> >>>>>>>>>>
> >>
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> >>>>>>>>> "};
> >>>>>>>>>>    }
> >>>>>>>>> /Claus Ibsen
> >>>>>>>>> Apache Camel Committer
> >>>>>>>>> Blog: http://davsclaus.blogspot.com/
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> On Thu, Nov 20, 2008 at 9:34 AM, Jackey Ding <
> >> novthirteen@gmail.com>
> >>>>>>>>> wrote:
> >>>>>>>>>> Hi,
> >>>>>>>>>>
> >>>>>>>>>> Here is my bean.
> >>>>>>>>>>
> >>>>>>>>>> public class BillingServiceRouter{
> >>>>>>>>>>
> >>>>>>>>>>    @RecipientList
> >>>>>>>>>>    public String[] route(String body) {
> >>>>>>>>>>        System.out.println(body);
> >>>>>>>>>>        return new String[]{"jbi:endpoint:
> >>>>>>>>>>
> >>
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> >>>>>>>>> "};
> >>>>>>>>>>    }
> >>>>>>>>>> }
> >>>>>>>>>>
> >>>>>>>>>> Jackey
> >>>>>>>>>>
> >>>>>>>>>> 2008/11/20 Claus Ibsen <cl...@gmail.com>
> >>>>>>>>>>
> >>>>>>>>>>> Hi
> >>>>>>>>>>>
> >>>>>>>>>>> What does your bean look like?
> >>>>>>>>>>>>                <methodCall bean="router" method="route"/>
> >>>>>>>>>>> I think the issue is that the payload from servicemix is XML
> and
> >>>>> Camel
> >>>>>>>>>>> will try to find coerce the payload to the type you have
> defined
> >> in
> >>>>>>>>>>> your bean.
> >>>>>>>>>>>
> >>>>>>>>>>> So you can change the signature to use Exchange as type then
> >> there
> >>>>>>>>>>> shouldn't take any type conventions place.
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> /Claus Ibsen
> >>>>>>>>>>> Apache Camel Committer
> >>>>>>>>>>> Blog: http://davsclaus.blogspot.com/
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> On Thu, Nov 20, 2008 at 9:11 AM, Jackey Ding <
> >> novthirteen@gmail.com
> >>>>>>>>>>> wrote:
> >>>>>>>>>>>> Hi,
> >>>>>>>>>>>>
> >>>>>>>>>>>> I want to wirte a bean dynamically determine what endpoints
> will
> >> be
> >>>>>>>>>>> invoked
> >>>>>>>>>>>> when a service is called. It seems that dynamic recipientlist
> >> can
> >>>>>>>>> meet my
> >>>>>>>>>>>> demand. I wrote a simple method just return a string as
> endpoint
> >>>>>>>>> name,
> >>>>>>>>>>> and
> >>>>>>>>>>>> got the error message as below:
> >>>>>>>>>>>>
> >>>>>>>>>>>> info: Outbound Message
> >>>>>>>>>>>> ---------------------------
> >>>>>>>>>>>> Encoding: UTF-8
> >>>>>>>>>>>> Headers:
> >>>>>>>>>>>> Messages:
> >>>>>>>>>>>> Payload: <soap:Envelope xmlns:soap="
> >>>>>>>>>>>> http://schemas.xmlsoap.org/soap/envelope/
> >>>>>>>>>>> "><soap:Body><ns1:getBillingCountResponse
> >>>>>>>>>>>> xmlns:ns1="http://mm.service.integration.symphony
> >>>>>>>>>>>>
> >>
> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
> >>>>>>>>>>>> --------------------------------------
> >>>>>>>>>>>> 2008-11-20 15:36:36 org.apache.camel.processor.Logger log
> >>>>>>>>>>>> error: Failed delivery for exchangeId:
> >>>>>>>>>>> ID-mycomputer/3353-1227166593020/0-0.
> >>>>>>>>>>>> On delivery attempt: 0 caught:
> >>>>>>>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
> >>>>>>>>> Failed to
> >>>>>>>>>>>> invoke method: route on router due to:
> >>>>>>>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
> >>>>>>>>> converter
> >>>>>>>>>>>> available to convert from type: class [Ljava.lang.String; to
> the
> >>>>>>>>> required
> >>>>>>>>>>>> type: javax.xml.transform.Source with value
> >>>>>>>>> [Ljava.lang.String;@1f3329a
> >>>>>>>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
> >>>>>>>>> Failed to
> >>>>>>>>>>>> invoke method: route on router due to:
> >>>>>>>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
> >>>>>>>>> converter
> >>>>>>>>>>>> available to convert from type: class [Ljava.lang.String; to
> the
> >>>>>>>>> required
> >>>>>>>>>>>> type: javax.xml.transform.Source with value
> >>>>>>>>> [Ljava.lang.String;@1f3329a
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>>>>
> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> >>>>>>>>>>>>    at java.lang.Thread.run(Thread.java:595)
> >>>>>>>>>>>> Caused by:
> org.apache.camel.NoTypeConversionAvailableException:
> >> No
> >>>>>>>>> type
> >>>>>>>>>>>> converter available to convert from type: class
> >> [Ljava.lang.String;
> >>>>>>>>> to
> >>>>>>>>>>> the
> >>>>>>>>>>>> required type: javax.xml.transform.Source with value
> >>>>>>>>>>>> [Ljava.lang.String;@1f3329a
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
> >>>>>>>>>>>>    at
> >>>>>>>>>
> org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
> >>>>>>>>>>>>    at
> >>>>>>>>>>>>
> >>
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
> >>>>>>>>>>>>    ... 21 more
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> my configuration is
> >>>>>>>>>>>> <bean id="router"
> >>>>>>>>>>>>
> >>  class="symphony.integration.service.mm.BillingServiceRouter"
> >>>>>>>>> />
> >>>>>>>>>>>>    <camelContext id="camelContext" useJmx="true"
> >>>>>>>>>>>>        xmlns="http://activemq.apache.org/camel/schema/spring
> ">
> >>>>>>>>>>>>        <route>
> >>>>>>>>>>>>            <from
> >>>>>>>>>>>>                uri="jbi:endpoint:
> >>>>>>>>>>>>
> >>
> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
> >>>>>>>>>>> "
> >>>>>>>>>>>> />
> >>>>>>>>>>>>            <recipientList>
> >>>>>>>>>>>>                <methodCall bean="router" method="route"/>
> >>>>>>>>>>>>            </recipientList>
> >>>>>>>>>>>>        </route>
> >>>>>>>>>>>>    </camelContext>
> >>>>>>>>>>>>
> >>>>>>>>>>>> my bean, just return a string.
> >>>>>>>>>>>> @RecipientList
> >>>>>>>>>>>>    public String[] route(String body) {
> >>>>>>>>>>>>        return new String[]{"jbi:endpoint:
> >>>>>>>>>>>>
> >>
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> >>>>>>>>>>> "};
> >>>>>>>>>>>>    }
> >>>>>>>>>>>>
> >>>>>>>>>>>> It's weird, when change config to point-to-point mode it works
> >>>>> fine.
> >>>>>>>>>>>>        <route>
> >>>>>>>>>>>>            <from
> >>>>>>>>>>>>                uri="jbi:endpoint:
> >>>>>>>>>>>>
> >>
> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
> >>>>>>>>>>> "
> >>>>>>>>>>>> />
> >>>>>>>>>>>>            <to
> >>>>>>>>>>>>                uri="jbi:endpoint:
> >>>>>>>>>>>>
> >>
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> >>>>>>>>> "
> >>>>>>>>>>> />
> >>>>>>>>>>>>        </route>
> >>>>>>>>>>>>
> >>>>>>>>>>>> Thanks & best regards
> >>>>>>>>>>>>
> >>>
> >
>
>

Re: Meet a problem when using recipientlist

Posted by Willem Jiang <wi...@gmail.com>.
Hi

Oh, here is a thing when you invoke the bean method, the method's return
value will be set into the exchange's out message,
So you got the converter not found exception.
That is a side effect of your get the <recipientList> with a bean
invocation.

You may change to use a processor to set message header for the
recipienList to walk around this issue.

<camelContext id="camelContext" useJmx="true"
         xmlns="http://activemq.apache.org/camel/schema/spring">
         <route>
             <from
                 uri="jbi:endpoint:
http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
" />
            <processor ref="myProcessor"/>
             <recipientList>
                 <header>MyRecipientList</header>
             </recipientList>
         </route>
     </camelContext>

public class MyProcessor implements Processor {

    public void process(Exchange exchange) throws Exception {
        Message message = exchange.getIn();
        message.setHeader("MyRecipientList", YOULIST);
    }

}

Willem


Jackey Ding wrote:
> Hi william,
> 
> Yes, I changed route method as Claus said. The error still happen.
> 
> Claus,
> 
> I am using camel 1.5.0.
> 
> 
> 2008/11/21 Claus Ibsen <cl...@gmail.com>
> 
>> Hi
>>
>> /Claus Ibsen
>> Apache Camel Committer
>> Blog: http://davsclaus.blogspot.com/
>>
>>
>>
>> On Thu, Nov 20, 2008 at 3:25 PM, Willem Jiang <wi...@gmail.com>
>> wrote:
>>> Did you change your bean's route method as Claus suggested ?
>>> @RecipientList
>>> public String[] route(Exchange exchange) {
>>>       System.out.println(exchange.getIn().getBody());
>>>       return new String[]{"jbi:endpoint:
>>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>> "};
>>> }
>>>
>>> Willem
>> Hi
>>
>> Gert V. fixed something with this missing type converter within the
>> last month or so. What version of Camel are you using? Might be
>> worthwile to check the commit logs or give gertv a ping as he might
>> remeber what it was.
>>
>> It was something with using servicemix and camel together.
>>
>>
>>> Jackey Ding wrote:
>>>> Hi,
>>>>
>>>> Here is my servicemix.xml, and I have pasted my router bean in
>> preciously
>>>> post.
>>>>
>>>> <beans xmlns="http://www.springframework.org/schema/beans"
>>>>     xmlns:sm="http://servicemix.apache.org/config/1.0"
>>>>     xmlns:cxfse="http://servicemix.apache.org/cxfse/1.0"
>>>>     xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
>>>>     xmlns:bean="http://servicemix.apache.org/bean/1.0"
>>>>     xmlns:camel="http://activemq.apache.org/camel/schema/spring"
>>>>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>     xmlns:bill="http://mm.service.integration.symphony"
>>>>     xsi:schemaLocation="
>> http://www.springframework.org/schema/beansclasspath:xmlschema/spring-beans-2.5.xsd
>>>>
>> http://servicemix.apache.org/config/1.0classpath:xmlschema/servicemix.xsd
>>>>
>> http://servicemix.apache.org/cxfse/1.0classpath:xmlschema/servicemix-cxf-se.xsd
>>>>
>> http://servicemix.apache.org/cxfbc/1.0classpath:xmlschema/servicemix-cxf-bc.xsd
>>>>
>> http://servicemix.apache.org/bean/1.0classpath:xmlschema/servicemix-bean.xsd
>>>>
>> http://activemq.apache.org/camel/schema/springclasspath:xmlschema/camel-spring.xsd
>> ">
>>>>     <sm:container id="jbiContainer" embedded="true">
>>>>         <sm:activationSpecs>
>>>>             <sm:activationSpec id="servicemix-camel"
>>>>                 service="bill:BillingServiceCamelRouter"
>>>>                 endpoint="BillingServicePort">
>>>>                 <sm:component>
>>>>                     <ref bean="jbi" />
>>>>                 </sm:component>
>>>>             </sm:activationSpec>
>>>>         </sm:activationSpecs>
>>>>         <sm:endpoints>
>>>>             <cxfse:endpoint id="BillingService" useJBIWrapper="false">
>>>>                 <cxfse:inFaultInterceptors>
>>>>                     <bean
>>>>
>>>> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
>>>>                 </cxfse:inFaultInterceptors>
>>>>                 <cxfse:inInterceptors>
>>>>                     <bean
>>>>
>>>> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
>>>>                 </cxfse:inInterceptors>
>>>>                 <cxfse:outFaultInterceptors>
>>>>                     <bean
>>>>
>>>> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
>>>>                 </cxfse:outFaultInterceptors>
>>>>                 <cxfse:outInterceptors>
>>>>                     <bean
>>>>
>>>> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
>>>>                 </cxfse:outInterceptors>
>>>>                 <cxfse:pojo>
>>>>                     <bean
>>>>
>>>> class="symphony.integration.service.mm.LppBillingServiceImpl" />
>>>>                 </cxfse:pojo>
>>>>             </cxfse:endpoint>
>>>>             <cxfbc:consumer
>>>>
>>>> wsdl="classpath:symphony/integration/service/mm/BillingService.wsdl"
>>>>
>>>> interfaceName="symphony.integration.service.mm.BillingService"
>>>>                 targetEndpoint="BillingServicePort"
>>>>                 targetService="bill:BillingServiceCamelRouter"
>>>>                 useJBIWrapper="false">
>>>>                 <cxfbc:inFaultInterceptors>
>>>>                     <bean
>>>>
>>>> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
>>>>                 </cxfbc:inFaultInterceptors>
>>>>                 <cxfbc:inInterceptors>
>>>>                     <bean
>>>>
>>>> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
>>>>                 </cxfbc:inInterceptors>
>>>>                 <cxfbc:outFaultInterceptors>
>>>>                     <bean
>>>>
>>>> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
>>>>                 </cxfbc:outFaultInterceptors>
>>>>                 <cxfbc:outInterceptors>
>>>>                     <bean
>>>>
>>>> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
>>>>                 </cxfbc:outInterceptors>
>>>>             </cxfbc:consumer>
>>>>         </sm:endpoints>
>>>>     </sm:container>
>>>>
>>>>     <bean id="jbi"
>>>>         class="org.apache.servicemix.camel.CamelJbiComponent" />
>>>>
>>>>     <bean id="router"
>>>>         class="symphony.integration.service.mm.BillingServiceRouter" />
>>>>
>>>>     <camelContext id="camelContext" useJmx="true"
>>>>         xmlns="http://activemq.apache.org/camel/schema/spring">
>>>>         <route>
>>>>             <from
>>>>                 uri="jbi:endpoint:
>>>>
>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
>> "
>>>> />
>>>>             <recipientList>
>>>>                 <methodCall bean="router" method="route"/>
>>>>             </recipientList>
>>>>         </route>
>>>>     </camelContext>
>>>> </beans>
>>>>
>>>> Jackey
>>>>
>>>> 2008/11/20 Willem Jiang <wi...@gmail.com>
>>>>
>>>>> Can you show us your DSL ?
>>>>> I can't image how this string can be turned into a Source Object, may
>> be
>>>>> you just put the recipientlist into the message body instead of setting
>>>>> it into the message header.
>>>>>
>>>>> Willem
>>>>>
>>>>> Jackey Ding wrote:
>>>>>> Hi,
>>>>>>
>>>>>> I traced error, the real serivce provider is return the correct
>> message
>>>>> to
>>>>>> camel, but camel not pass the message to the client.
>>>>>> The exception is thrown at method
>> DefaultTypeConverter.convertTo(Class<T>
>>>>>> type, Exchange exchange, Object value); because it could not find
>>>>> suitable
>>>>>> conversion. Here is the paramter value:
>>>>>>
>>>>>> type    Class<T> (javax.xml.transform.Source) (id=90)
>>>>>>
>>>>>> exchange    JbiExchange  (id=91)
>>>>>>     binding    JbiBinding  (id=97)
>>>>>>     context    SpringCamelContext  (id=100)
>>>>>>     exception    null
>>>>>>     exchangeId    null
>>>>>>     fault    null
>>>>>>     in    JbiMessage  (id=113)
>>>>>>     messageExchange    InOutImpl  (id=114)
>>>>>>     out    JbiMessage  (id=99)
>>>>>>     pattern    ExchangePattern  (id=116)
>>>>>>     properties    ConcurrentHashMap<K,V>  (id=118)
>>>>>>     unitOfWork    DefaultUnitOfWork  (id=121)
>>>>>>
>>>>>> value    [0]    "jbi:endpoint:
>>>>>>
>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>>> "
>>>>>> jackey
>>>>>>
>>>>>> 2008/11/20 Jackey Ding <no...@gmail.com>
>>>>>>
>>>>>>> BTW, I find the route method was executed 6 times.
>>>>>>>
>>>>>>> Jackey
>>>>>>>
>>>>>>> 2008/11/20 Jackey Ding <no...@gmail.com>
>>>>>>>
>>>>>>> Hi,
>>>>>>>> I tried code you pasted, here is the message.
>>>>>>>>
>>>>>>>> 2008-11-20 19:53:48 org.apache.cxf.interceptor.LoggingInInterceptor
>>>>>>>> logging
>>>>>>>> infor: Inbound Message
>>>>>>>> ----------------------------
>>>>>>>> Encoding:
>>>>>>>> Headers:
>>>>>>>> Messages:
>>>>>>>> Message:
>>>>>>>>
>>>>>>>> Payload: <?xml version="1.0" encoding="UTF-8"?><soap:Envelope
>>>>> xmlns:soap="
>>>>>>>> http://schemas.xmlsoap.org/soap/envelope/
>>>>> "><soap:Body><ns1:getBillingCount
>>>>>>>> xmlns:ns1="http://mm.service.integration.symphony"><arg0
>>>>>>>> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><entityPage
>>>>>>>> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><rowSize
>>>>>>>> xmlns="">10</rowSize></entityPage><rowSize
>>>>> xmlns="">10</rowSize><billingNo
>>>>>
>> xmlns="">KP0000000005</billingNo></arg0></ns1:getBillingCount></soap:Body></soap:Envelope>
>>>>>>>> --------------------------------------
>>>>>>>> 2008-11-20 19:53:48
>>>>>>>> org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback
>>>>> onClose
>>>>>>>> info: Outbound Message
>>>>>>>> ---------------------------
>>>>>>>> Encoding: UTF-8
>>>>>>>> Headers:
>>>>>>>> Messages:
>>>>>>>> Payload: <soap:Envelope xmlns:soap="
>>>>>>>> http://schemas.xmlsoap.org/soap/envelope/
>>>>> "><soap:Body><ns1:getBillingCountResponse
>>>>>>>> xmlns:ns1="http://mm.service.integration.symphony
>>>>>>>>
>> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
>>>>>>>> --------------------------------------
>>>>>>>> 2008-11-20 19:53:48 org.apache.camel.processor.Logger log
>>>>>>>> error: Failed delivery for exchangeId:
>>>>>>>> ID-mycomputer/1988-1227182024906/0-0. On delivery attempt: 0 caught:
>>>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
>> Failed
>>>>> to
>>>>>>>> invoke method: route on router due to:
>>>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
>> converter
>>>>>>>> available to convert from type: class [Ljava.lang.String; to the
>>>>> required
>>>>>>>> type: javax.xml.transform.Source with value
>> [Ljava.lang.String;@e8709d
>>>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
>> Failed
>>>>> to
>>>>>>>> invoke method: route on router due to:
>>>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
>> converter
>>>>>>>> available to convert from type: class [Ljava.lang.String; to the
>>>>> required
>>>>>>>> type: javax.xml.transform.Source with value
>> [Ljava.lang.String;@e8709d
>>>>>>>>     at
>>>>>>>>
>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
>>>>>>>>     at
>>>>>>>>
>> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
>>>>>>>>     at
>>>>>>>>
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
>>>>>>>>     at
>>>>>>>>
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
>>>>>>>>     at
>>>>>>>>
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
>>>>>>>>     at
>>>>>>>>
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
>>>>>>>>     at
>>>>>>>>
>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
>>>>>>>>     at
>>>>>>>>
>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>>>>>>>>     at
>>>>>>>>
>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
>>>>>>>>     at
>>>>>>>>
>> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
>>>>>>>>     at
>>>>>>>>
>> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
>>>>>>>>     at
>>>>>>>>
>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
>>>>>>>>     at
>>>>>>>>
>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
>>>>>>>>     at
>>>>>>>>
>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
>>>>>>>>     at
>>>>>>>>
>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>>>>>>>>     at
>>>>>>>>
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
>>>>>>>>     at
>>>>>>>>
>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>>>>>>>>     at
>>>>>>>>
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>>>>>>>>     at
>>>>>>>>
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>     at
>>>>>>>>
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>>>>>>>>     at
>>>>>>>>
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>>>>>>>>     at java.lang.Thread.run(Thread.java:595)
>>>>>>>> Caused by: org.apache.camel.NoTypeConversionAvailableException: No
>> type
>>>>>>>> converter available to convert from type: class [Ljava.lang.String;
>> to
>>>>> the
>>>>>>>> required type: javax.xml.transform.Source with value
>>>>>>>> [Ljava.lang.String;@e8709d
>>>>>>>>     at
>>>>>>>>
>> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
>>>>>>>>     at
>>>>>>>>
>> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
>>>>>>>>     at
>>>>>>>>
>> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
>>>>>>>>     at
>>>>> org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
>>>>>>>>     at
>>>>>>>>
>> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
>>>>>>>>     at
>>>>>>>>
>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
>>>>>>>>     ... 21 more
>>>>>>>> javax.xml.transform.dom.DOMSource@f2e328
>>>>>>>>
>>>>>>>> The message in red is system printout.
>>>>>>>>
>>>>>>>> BTW, I am using camel 1.5.0.
>>>>>>>>
>>>>>>>>
>>>>>>>> Jackey
>>>>>>>>
>>>>>>>> 2008/11/20 Claus Ibsen <cl...@gmail.com>
>>>>>>>>
>>>>>>>>> Hi Try with this
>>>>>>>>>
>>>>>>>>>>    @RecipientList
>>>>>>>>>>    public String[] route(Exchange exchange) {
>>>>>>>>>>        System.out.println(exchange.getIn().getBody());
>>>>>>>>>>        return new String[]{"jbi:endpoint:
>>>>>>>>>>
>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>>>>>>> "};
>>>>>>>>>>    }
>>>>>>>>> /Claus Ibsen
>>>>>>>>> Apache Camel Committer
>>>>>>>>> Blog: http://davsclaus.blogspot.com/
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, Nov 20, 2008 at 9:34 AM, Jackey Ding <
>> novthirteen@gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> Here is my bean.
>>>>>>>>>>
>>>>>>>>>> public class BillingServiceRouter{
>>>>>>>>>>
>>>>>>>>>>    @RecipientList
>>>>>>>>>>    public String[] route(String body) {
>>>>>>>>>>        System.out.println(body);
>>>>>>>>>>        return new String[]{"jbi:endpoint:
>>>>>>>>>>
>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>>>>>>> "};
>>>>>>>>>>    }
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> Jackey
>>>>>>>>>>
>>>>>>>>>> 2008/11/20 Claus Ibsen <cl...@gmail.com>
>>>>>>>>>>
>>>>>>>>>>> Hi
>>>>>>>>>>>
>>>>>>>>>>> What does your bean look like?
>>>>>>>>>>>>                <methodCall bean="router" method="route"/>
>>>>>>>>>>> I think the issue is that the payload from servicemix is XML and
>>>>> Camel
>>>>>>>>>>> will try to find coerce the payload to the type you have defined
>> in
>>>>>>>>>>> your bean.
>>>>>>>>>>>
>>>>>>>>>>> So you can change the signature to use Exchange as type then
>> there
>>>>>>>>>>> shouldn't take any type conventions place.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> /Claus Ibsen
>>>>>>>>>>> Apache Camel Committer
>>>>>>>>>>> Blog: http://davsclaus.blogspot.com/
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Thu, Nov 20, 2008 at 9:11 AM, Jackey Ding <
>> novthirteen@gmail.com
>>>>>>>>>>> wrote:
>>>>>>>>>>>> Hi,
>>>>>>>>>>>>
>>>>>>>>>>>> I want to wirte a bean dynamically determine what endpoints will
>> be
>>>>>>>>>>> invoked
>>>>>>>>>>>> when a service is called. It seems that dynamic recipientlist
>> can
>>>>>>>>> meet my
>>>>>>>>>>>> demand. I wrote a simple method just return a string as endpoint
>>>>>>>>> name,
>>>>>>>>>>> and
>>>>>>>>>>>> got the error message as below:
>>>>>>>>>>>>
>>>>>>>>>>>> info: Outbound Message
>>>>>>>>>>>> ---------------------------
>>>>>>>>>>>> Encoding: UTF-8
>>>>>>>>>>>> Headers:
>>>>>>>>>>>> Messages:
>>>>>>>>>>>> Payload: <soap:Envelope xmlns:soap="
>>>>>>>>>>>> http://schemas.xmlsoap.org/soap/envelope/
>>>>>>>>>>> "><soap:Body><ns1:getBillingCountResponse
>>>>>>>>>>>> xmlns:ns1="http://mm.service.integration.symphony
>>>>>>>>>>>>
>> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
>>>>>>>>>>>> --------------------------------------
>>>>>>>>>>>> 2008-11-20 15:36:36 org.apache.camel.processor.Logger log
>>>>>>>>>>>> error: Failed delivery for exchangeId:
>>>>>>>>>>> ID-mycomputer/3353-1227166593020/0-0.
>>>>>>>>>>>> On delivery attempt: 0 caught:
>>>>>>>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
>>>>>>>>> Failed to
>>>>>>>>>>>> invoke method: route on router due to:
>>>>>>>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
>>>>>>>>> converter
>>>>>>>>>>>> available to convert from type: class [Ljava.lang.String; to the
>>>>>>>>> required
>>>>>>>>>>>> type: javax.xml.transform.Source with value
>>>>>>>>> [Ljava.lang.String;@1f3329a
>>>>>>>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
>>>>>>>>> Failed to
>>>>>>>>>>>> invoke method: route on router due to:
>>>>>>>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
>>>>>>>>> converter
>>>>>>>>>>>> available to convert from type: class [Ljava.lang.String; to the
>>>>>>>>> required
>>>>>>>>>>>> type: javax.xml.transform.Source with value
>>>>>>>>> [Ljava.lang.String;@1f3329a
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>>>>> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>>>>>>>>>>>>    at java.lang.Thread.run(Thread.java:595)
>>>>>>>>>>>> Caused by: org.apache.camel.NoTypeConversionAvailableException:
>> No
>>>>>>>>> type
>>>>>>>>>>>> converter available to convert from type: class
>> [Ljava.lang.String;
>>>>>>>>> to
>>>>>>>>>>> the
>>>>>>>>>>>> required type: javax.xml.transform.Source with value
>>>>>>>>>>>> [Ljava.lang.String;@1f3329a
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
>>>>>>>>>>>>    at
>>>>>>>>> org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
>>>>>>>>>>>>    at
>>>>>>>>>>>>
>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
>>>>>>>>>>>>    ... 21 more
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> my configuration is
>>>>>>>>>>>> <bean id="router"
>>>>>>>>>>>>
>>  class="symphony.integration.service.mm.BillingServiceRouter"
>>>>>>>>> />
>>>>>>>>>>>>    <camelContext id="camelContext" useJmx="true"
>>>>>>>>>>>>        xmlns="http://activemq.apache.org/camel/schema/spring">
>>>>>>>>>>>>        <route>
>>>>>>>>>>>>            <from
>>>>>>>>>>>>                uri="jbi:endpoint:
>>>>>>>>>>>>
>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
>>>>>>>>>>> "
>>>>>>>>>>>> />
>>>>>>>>>>>>            <recipientList>
>>>>>>>>>>>>                <methodCall bean="router" method="route"/>
>>>>>>>>>>>>            </recipientList>
>>>>>>>>>>>>        </route>
>>>>>>>>>>>>    </camelContext>
>>>>>>>>>>>>
>>>>>>>>>>>> my bean, just return a string.
>>>>>>>>>>>> @RecipientList
>>>>>>>>>>>>    public String[] route(String body) {
>>>>>>>>>>>>        return new String[]{"jbi:endpoint:
>>>>>>>>>>>>
>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>>>>>>>>> "};
>>>>>>>>>>>>    }
>>>>>>>>>>>>
>>>>>>>>>>>> It's weird, when change config to point-to-point mode it works
>>>>> fine.
>>>>>>>>>>>>        <route>
>>>>>>>>>>>>            <from
>>>>>>>>>>>>                uri="jbi:endpoint:
>>>>>>>>>>>>
>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
>>>>>>>>>>> "
>>>>>>>>>>>> />
>>>>>>>>>>>>            <to
>>>>>>>>>>>>                uri="jbi:endpoint:
>>>>>>>>>>>>
>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>>>>>>> "
>>>>>>>>>>> />
>>>>>>>>>>>>        </route>
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks & best regards
>>>>>>>>>>>>
>>>
> 


Re: Meet a problem when using recipientlist

Posted by Jackey Ding <no...@gmail.com>.
Hi william,

Yes, I changed route method as Claus said. The error still happen.

Claus,

I am using camel 1.5.0.


2008/11/21 Claus Ibsen <cl...@gmail.com>

> Hi
>
> /Claus Ibsen
> Apache Camel Committer
> Blog: http://davsclaus.blogspot.com/
>
>
>
> On Thu, Nov 20, 2008 at 3:25 PM, Willem Jiang <wi...@gmail.com>
> wrote:
> > Did you change your bean's route method as Claus suggested ?
> > @RecipientList
> > public String[] route(Exchange exchange) {
> >       System.out.println(exchange.getIn().getBody());
> >       return new String[]{"jbi:endpoint:
> > http://mm.service.integration.symphony/BillingService/BillingServicePort
> > "};
> > }
> >
> > Willem
> Hi
>
> Gert V. fixed something with this missing type converter within the
> last month or so. What version of Camel are you using? Might be
> worthwile to check the commit logs or give gertv a ping as he might
> remeber what it was.
>
> It was something with using servicemix and camel together.
>
>
> >
> > Jackey Ding wrote:
> >> Hi,
> >>
> >> Here is my servicemix.xml, and I have pasted my router bean in
> preciously
> >> post.
> >>
> >> <beans xmlns="http://www.springframework.org/schema/beans"
> >>     xmlns:sm="http://servicemix.apache.org/config/1.0"
> >>     xmlns:cxfse="http://servicemix.apache.org/cxfse/1.0"
> >>     xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
> >>     xmlns:bean="http://servicemix.apache.org/bean/1.0"
> >>     xmlns:camel="http://activemq.apache.org/camel/schema/spring"
> >>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >>     xmlns:bill="http://mm.service.integration.symphony"
> >>     xsi:schemaLocation="
> http://www.springframework.org/schema/beansclasspath:xmlschema/spring-beans-2.5.xsd
> >>
> >>
> http://servicemix.apache.org/config/1.0classpath:xmlschema/servicemix.xsd
> >>
> >>
> http://servicemix.apache.org/cxfse/1.0classpath:xmlschema/servicemix-cxf-se.xsd
> >>
> >>
> http://servicemix.apache.org/cxfbc/1.0classpath:xmlschema/servicemix-cxf-bc.xsd
> >>
> >>
> http://servicemix.apache.org/bean/1.0classpath:xmlschema/servicemix-bean.xsd
> >>
> >>
> http://activemq.apache.org/camel/schema/springclasspath:xmlschema/camel-spring.xsd
> ">
> >>
> >>     <sm:container id="jbiContainer" embedded="true">
> >>         <sm:activationSpecs>
> >>             <sm:activationSpec id="servicemix-camel"
> >>                 service="bill:BillingServiceCamelRouter"
> >>                 endpoint="BillingServicePort">
> >>                 <sm:component>
> >>                     <ref bean="jbi" />
> >>                 </sm:component>
> >>             </sm:activationSpec>
> >>         </sm:activationSpecs>
> >>         <sm:endpoints>
> >>             <cxfse:endpoint id="BillingService" useJBIWrapper="false">
> >>                 <cxfse:inFaultInterceptors>
> >>                     <bean
> >>
> >> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
> >>                 </cxfse:inFaultInterceptors>
> >>                 <cxfse:inInterceptors>
> >>                     <bean
> >>
> >> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
> >>                 </cxfse:inInterceptors>
> >>                 <cxfse:outFaultInterceptors>
> >>                     <bean
> >>
> >> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
> >>                 </cxfse:outFaultInterceptors>
> >>                 <cxfse:outInterceptors>
> >>                     <bean
> >>
> >> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
> >>                 </cxfse:outInterceptors>
> >>                 <cxfse:pojo>
> >>                     <bean
> >>
> >> class="symphony.integration.service.mm.LppBillingServiceImpl" />
> >>                 </cxfse:pojo>
> >>             </cxfse:endpoint>
> >>             <cxfbc:consumer
> >>
> >> wsdl="classpath:symphony/integration/service/mm/BillingService.wsdl"
> >>
> >> interfaceName="symphony.integration.service.mm.BillingService"
> >>                 targetEndpoint="BillingServicePort"
> >>                 targetService="bill:BillingServiceCamelRouter"
> >>                 useJBIWrapper="false">
> >>                 <cxfbc:inFaultInterceptors>
> >>                     <bean
> >>
> >> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
> >>                 </cxfbc:inFaultInterceptors>
> >>                 <cxfbc:inInterceptors>
> >>                     <bean
> >>
> >> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
> >>                 </cxfbc:inInterceptors>
> >>                 <cxfbc:outFaultInterceptors>
> >>                     <bean
> >>
> >> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
> >>                 </cxfbc:outFaultInterceptors>
> >>                 <cxfbc:outInterceptors>
> >>                     <bean
> >>
> >> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
> >>                 </cxfbc:outInterceptors>
> >>             </cxfbc:consumer>
> >>         </sm:endpoints>
> >>     </sm:container>
> >>
> >>     <bean id="jbi"
> >>         class="org.apache.servicemix.camel.CamelJbiComponent" />
> >>
> >>     <bean id="router"
> >>         class="symphony.integration.service.mm.BillingServiceRouter" />
> >>
> >>     <camelContext id="camelContext" useJmx="true"
> >>         xmlns="http://activemq.apache.org/camel/schema/spring">
> >>         <route>
> >>             <from
> >>                 uri="jbi:endpoint:
> >>
> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
> "
> >> />
> >>             <recipientList>
> >>                 <methodCall bean="router" method="route"/>
> >>             </recipientList>
> >>         </route>
> >>     </camelContext>
> >> </beans>
> >>
> >> Jackey
> >>
> >> 2008/11/20 Willem Jiang <wi...@gmail.com>
> >>
> >>> Can you show us your DSL ?
> >>> I can't image how this string can be turned into a Source Object, may
> be
> >>> you just put the recipientlist into the message body instead of setting
> >>> it into the message header.
> >>>
> >>> Willem
> >>>
> >>> Jackey Ding wrote:
> >>>> Hi,
> >>>>
> >>>> I traced error, the real serivce provider is return the correct
> message
> >>> to
> >>>> camel, but camel not pass the message to the client.
> >>>> The exception is thrown at method
> DefaultTypeConverter.convertTo(Class<T>
> >>>> type, Exchange exchange, Object value); because it could not find
> >>> suitable
> >>>> conversion. Here is the paramter value:
> >>>>
> >>>> type    Class<T> (javax.xml.transform.Source) (id=90)
> >>>>
> >>>> exchange    JbiExchange  (id=91)
> >>>>     binding    JbiBinding  (id=97)
> >>>>     context    SpringCamelContext  (id=100)
> >>>>     exception    null
> >>>>     exchangeId    null
> >>>>     fault    null
> >>>>     in    JbiMessage  (id=113)
> >>>>     messageExchange    InOutImpl  (id=114)
> >>>>     out    JbiMessage  (id=99)
> >>>>     pattern    ExchangePattern  (id=116)
> >>>>     properties    ConcurrentHashMap<K,V>  (id=118)
> >>>>     unitOfWork    DefaultUnitOfWork  (id=121)
> >>>>
> >>>> value    [0]    "jbi:endpoint:
> >>>>
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> >>> "
> >>>>
> >>>> jackey
> >>>>
> >>>> 2008/11/20 Jackey Ding <no...@gmail.com>
> >>>>
> >>>>> BTW, I find the route method was executed 6 times.
> >>>>>
> >>>>> Jackey
> >>>>>
> >>>>> 2008/11/20 Jackey Ding <no...@gmail.com>
> >>>>>
> >>>>> Hi,
> >>>>>> I tried code you pasted, here is the message.
> >>>>>>
> >>>>>> 2008-11-20 19:53:48 org.apache.cxf.interceptor.LoggingInInterceptor
> >>>>>> logging
> >>>>>> infor: Inbound Message
> >>>>>> ----------------------------
> >>>>>> Encoding:
> >>>>>> Headers:
> >>>>>> Messages:
> >>>>>> Message:
> >>>>>>
> >>>>>> Payload: <?xml version="1.0" encoding="UTF-8"?><soap:Envelope
> >>> xmlns:soap="
> >>>>>> http://schemas.xmlsoap.org/soap/envelope/
> >>> "><soap:Body><ns1:getBillingCount
> >>>>>> xmlns:ns1="http://mm.service.integration.symphony"><arg0
> >>>>>> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><entityPage
> >>>>>> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><rowSize
> >>>>>> xmlns="">10</rowSize></entityPage><rowSize
> >>> xmlns="">10</rowSize><billingNo
> >>>
> xmlns="">KP0000000005</billingNo></arg0></ns1:getBillingCount></soap:Body></soap:Envelope>
> >>>>>> --------------------------------------
> >>>>>> 2008-11-20 19:53:48
> >>>>>> org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback
> >>> onClose
> >>>>>> info: Outbound Message
> >>>>>> ---------------------------
> >>>>>> Encoding: UTF-8
> >>>>>> Headers:
> >>>>>> Messages:
> >>>>>> Payload: <soap:Envelope xmlns:soap="
> >>>>>> http://schemas.xmlsoap.org/soap/envelope/
> >>> "><soap:Body><ns1:getBillingCountResponse
> >>>>>> xmlns:ns1="http://mm.service.integration.symphony
> >>>>>>
> >>>
> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
> >>>>>> --------------------------------------
> >>>>>> 2008-11-20 19:53:48 org.apache.camel.processor.Logger log
> >>>>>> error: Failed delivery for exchangeId:
> >>>>>> ID-mycomputer/1988-1227182024906/0-0. On delivery attempt: 0 caught:
> >>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
> Failed
> >>> to
> >>>>>> invoke method: route on router due to:
> >>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
> converter
> >>>>>> available to convert from type: class [Ljava.lang.String; to the
> >>> required
> >>>>>> type: javax.xml.transform.Source with value
> [Ljava.lang.String;@e8709d
> >>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
> Failed
> >>> to
> >>>>>> invoke method: route on router due to:
> >>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
> converter
> >>>>>> available to convert from type: class [Ljava.lang.String; to the
> >>> required
> >>>>>> type: javax.xml.transform.Source with value
> [Ljava.lang.String;@e8709d
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
> >>>>>>     at
> >>>>>>
> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
> >>>>>>     at
> >>>>>>
> >>>
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> >>>>>>     at
> >>>>>>
> >>>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> >>>>>>     at java.lang.Thread.run(Thread.java:595)
> >>>>>> Caused by: org.apache.camel.NoTypeConversionAvailableException: No
> type
> >>>>>> converter available to convert from type: class [Ljava.lang.String;
> to
> >>> the
> >>>>>> required type: javax.xml.transform.Source with value
> >>>>>> [Ljava.lang.String;@e8709d
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
> >>>>>>     at
> >>> org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
> >>>>>>     at
> >>>>>>
> >>>
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
> >>>>>>     ... 21 more
> >>>>>> javax.xml.transform.dom.DOMSource@f2e328
> >>>>>>
> >>>>>> The message in red is system printout.
> >>>>>>
> >>>>>> BTW, I am using camel 1.5.0.
> >>>>>>
> >>>>>>
> >>>>>> Jackey
> >>>>>>
> >>>>>> 2008/11/20 Claus Ibsen <cl...@gmail.com>
> >>>>>>
> >>>>>>> Hi Try with this
> >>>>>>>
> >>>>>>>>    @RecipientList
> >>>>>>>>    public String[] route(Exchange exchange) {
> >>>>>>>>        System.out.println(exchange.getIn().getBody());
> >>>>>>>>        return new String[]{"jbi:endpoint:
> >>>>>>>>
> >>>
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> >>>>>>> "};
> >>>>>>>>    }
> >>>>>>> /Claus Ibsen
> >>>>>>> Apache Camel Committer
> >>>>>>> Blog: http://davsclaus.blogspot.com/
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> On Thu, Nov 20, 2008 at 9:34 AM, Jackey Ding <
> novthirteen@gmail.com>
> >>>>>>> wrote:
> >>>>>>>> Hi,
> >>>>>>>>
> >>>>>>>> Here is my bean.
> >>>>>>>>
> >>>>>>>> public class BillingServiceRouter{
> >>>>>>>>
> >>>>>>>>    @RecipientList
> >>>>>>>>    public String[] route(String body) {
> >>>>>>>>        System.out.println(body);
> >>>>>>>>        return new String[]{"jbi:endpoint:
> >>>>>>>>
> >>>
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> >>>>>>> "};
> >>>>>>>>    }
> >>>>>>>> }
> >>>>>>>>
> >>>>>>>> Jackey
> >>>>>>>>
> >>>>>>>> 2008/11/20 Claus Ibsen <cl...@gmail.com>
> >>>>>>>>
> >>>>>>>>> Hi
> >>>>>>>>>
> >>>>>>>>> What does your bean look like?
> >>>>>>>>>>                <methodCall bean="router" method="route"/>
> >>>>>>>>> I think the issue is that the payload from servicemix is XML and
> >>> Camel
> >>>>>>>>> will try to find coerce the payload to the type you have defined
> in
> >>>>>>>>> your bean.
> >>>>>>>>>
> >>>>>>>>> So you can change the signature to use Exchange as type then
> there
> >>>>>>>>> shouldn't take any type conventions place.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> /Claus Ibsen
> >>>>>>>>> Apache Camel Committer
> >>>>>>>>> Blog: http://davsclaus.blogspot.com/
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> On Thu, Nov 20, 2008 at 9:11 AM, Jackey Ding <
> novthirteen@gmail.com
> >>>>>>>>> wrote:
> >>>>>>>>>> Hi,
> >>>>>>>>>>
> >>>>>>>>>> I want to wirte a bean dynamically determine what endpoints will
> be
> >>>>>>>>> invoked
> >>>>>>>>>> when a service is called. It seems that dynamic recipientlist
> can
> >>>>>>> meet my
> >>>>>>>>>> demand. I wrote a simple method just return a string as endpoint
> >>>>>>> name,
> >>>>>>>>> and
> >>>>>>>>>> got the error message as below:
> >>>>>>>>>>
> >>>>>>>>>> info: Outbound Message
> >>>>>>>>>> ---------------------------
> >>>>>>>>>> Encoding: UTF-8
> >>>>>>>>>> Headers:
> >>>>>>>>>> Messages:
> >>>>>>>>>> Payload: <soap:Envelope xmlns:soap="
> >>>>>>>>>> http://schemas.xmlsoap.org/soap/envelope/
> >>>>>>>>> "><soap:Body><ns1:getBillingCountResponse
> >>>>>>>>>> xmlns:ns1="http://mm.service.integration.symphony
> >>>>>>>>>>
> >>>
> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
> >>>>>>>>>> --------------------------------------
> >>>>>>>>>> 2008-11-20 15:36:36 org.apache.camel.processor.Logger log
> >>>>>>>>>> error: Failed delivery for exchangeId:
> >>>>>>>>> ID-mycomputer/3353-1227166593020/0-0.
> >>>>>>>>>> On delivery attempt: 0 caught:
> >>>>>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
> >>>>>>> Failed to
> >>>>>>>>>> invoke method: route on router due to:
> >>>>>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
> >>>>>>> converter
> >>>>>>>>>> available to convert from type: class [Ljava.lang.String; to the
> >>>>>>> required
> >>>>>>>>>> type: javax.xml.transform.Source with value
> >>>>>>> [Ljava.lang.String;@1f3329a
> >>>>>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
> >>>>>>> Failed to
> >>>>>>>>>> invoke method: route on router due to:
> >>>>>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
> >>>>>>> converter
> >>>>>>>>>> available to convert from type: class [Ljava.lang.String; to the
> >>>>>>> required
> >>>>>>>>>> type: javax.xml.transform.Source with value
> >>>>>>> [Ljava.lang.String;@1f3329a
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> >>>>>>>>>>    at java.lang.Thread.run(Thread.java:595)
> >>>>>>>>>> Caused by: org.apache.camel.NoTypeConversionAvailableException:
> No
> >>>>>>> type
> >>>>>>>>>> converter available to convert from type: class
> [Ljava.lang.String;
> >>>>>>> to
> >>>>>>>>> the
> >>>>>>>>>> required type: javax.xml.transform.Source with value
> >>>>>>>>>> [Ljava.lang.String;@1f3329a
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
> >>>>>>>>>>    at
> >>>>>>> org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
> >>>>>>>>>>    at
> >>>>>>>>>>
> >>>
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
> >>>>>>>>>>    ... 21 more
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> my configuration is
> >>>>>>>>>> <bean id="router"
> >>>>>>>>>>
>  class="symphony.integration.service.mm.BillingServiceRouter"
> >>>>>>> />
> >>>>>>>>>>    <camelContext id="camelContext" useJmx="true"
> >>>>>>>>>>        xmlns="http://activemq.apache.org/camel/schema/spring">
> >>>>>>>>>>        <route>
> >>>>>>>>>>            <from
> >>>>>>>>>>                uri="jbi:endpoint:
> >>>>>>>>>>
> >>>
> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
> >>>>>>>>> "
> >>>>>>>>>> />
> >>>>>>>>>>            <recipientList>
> >>>>>>>>>>                <methodCall bean="router" method="route"/>
> >>>>>>>>>>            </recipientList>
> >>>>>>>>>>        </route>
> >>>>>>>>>>    </camelContext>
> >>>>>>>>>>
> >>>>>>>>>> my bean, just return a string.
> >>>>>>>>>> @RecipientList
> >>>>>>>>>>    public String[] route(String body) {
> >>>>>>>>>>        return new String[]{"jbi:endpoint:
> >>>>>>>>>>
> >>>
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> >>>>>>>>> "};
> >>>>>>>>>>    }
> >>>>>>>>>>
> >>>>>>>>>> It's weird, when change config to point-to-point mode it works
> >>> fine.
> >>>>>>>>>>        <route>
> >>>>>>>>>>            <from
> >>>>>>>>>>                uri="jbi:endpoint:
> >>>>>>>>>>
> >>>
> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
> >>>>>>>>> "
> >>>>>>>>>> />
> >>>>>>>>>>            <to
> >>>>>>>>>>                uri="jbi:endpoint:
> >>>>>>>>>>
> >>>
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> >>>>>>> "
> >>>>>>>>> />
> >>>>>>>>>>        </route>
> >>>>>>>>>>
> >>>>>>>>>> Thanks & best regards
> >>>>>>>>>>
> >>>
> >>
> >
> >
>

Re: Meet a problem when using recipientlist

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

/Claus Ibsen
Apache Camel Committer
Blog: http://davsclaus.blogspot.com/



On Thu, Nov 20, 2008 at 3:25 PM, Willem Jiang <wi...@gmail.com> wrote:
> Did you change your bean's route method as Claus suggested ?
> @RecipientList
> public String[] route(Exchange exchange) {
>       System.out.println(exchange.getIn().getBody());
>       return new String[]{"jbi:endpoint:
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> "};
> }
>
> Willem
Hi

Gert V. fixed something with this missing type converter within the
last month or so. What version of Camel are you using? Might be
worthwile to check the commit logs or give gertv a ping as he might
remeber what it was.

It was something with using servicemix and camel together.


>
> Jackey Ding wrote:
>> Hi,
>>
>> Here is my servicemix.xml, and I have pasted my router bean in preciously
>> post.
>>
>> <beans xmlns="http://www.springframework.org/schema/beans"
>>     xmlns:sm="http://servicemix.apache.org/config/1.0"
>>     xmlns:cxfse="http://servicemix.apache.org/cxfse/1.0"
>>     xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
>>     xmlns:bean="http://servicemix.apache.org/bean/1.0"
>>     xmlns:camel="http://activemq.apache.org/camel/schema/spring"
>>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>     xmlns:bill="http://mm.service.integration.symphony"
>>     xsi:schemaLocation="http://www.springframework.org/schema/beansclasspath:xmlschema/spring-beans-2.5.xsd
>>
>> http://servicemix.apache.org/config/1.0classpath:xmlschema/servicemix.xsd
>>
>> http://servicemix.apache.org/cxfse/1.0classpath:xmlschema/servicemix-cxf-se.xsd
>>
>> http://servicemix.apache.org/cxfbc/1.0classpath:xmlschema/servicemix-cxf-bc.xsd
>>
>> http://servicemix.apache.org/bean/1.0classpath:xmlschema/servicemix-bean.xsd
>>
>> http://activemq.apache.org/camel/schema/springclasspath:xmlschema/camel-spring.xsd">
>>
>>     <sm:container id="jbiContainer" embedded="true">
>>         <sm:activationSpecs>
>>             <sm:activationSpec id="servicemix-camel"
>>                 service="bill:BillingServiceCamelRouter"
>>                 endpoint="BillingServicePort">
>>                 <sm:component>
>>                     <ref bean="jbi" />
>>                 </sm:component>
>>             </sm:activationSpec>
>>         </sm:activationSpecs>
>>         <sm:endpoints>
>>             <cxfse:endpoint id="BillingService" useJBIWrapper="false">
>>                 <cxfse:inFaultInterceptors>
>>                     <bean
>>
>> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
>>                 </cxfse:inFaultInterceptors>
>>                 <cxfse:inInterceptors>
>>                     <bean
>>
>> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
>>                 </cxfse:inInterceptors>
>>                 <cxfse:outFaultInterceptors>
>>                     <bean
>>
>> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
>>                 </cxfse:outFaultInterceptors>
>>                 <cxfse:outInterceptors>
>>                     <bean
>>
>> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
>>                 </cxfse:outInterceptors>
>>                 <cxfse:pojo>
>>                     <bean
>>
>> class="symphony.integration.service.mm.LppBillingServiceImpl" />
>>                 </cxfse:pojo>
>>             </cxfse:endpoint>
>>             <cxfbc:consumer
>>
>> wsdl="classpath:symphony/integration/service/mm/BillingService.wsdl"
>>
>> interfaceName="symphony.integration.service.mm.BillingService"
>>                 targetEndpoint="BillingServicePort"
>>                 targetService="bill:BillingServiceCamelRouter"
>>                 useJBIWrapper="false">
>>                 <cxfbc:inFaultInterceptors>
>>                     <bean
>>
>> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
>>                 </cxfbc:inFaultInterceptors>
>>                 <cxfbc:inInterceptors>
>>                     <bean
>>
>> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
>>                 </cxfbc:inInterceptors>
>>                 <cxfbc:outFaultInterceptors>
>>                     <bean
>>
>> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
>>                 </cxfbc:outFaultInterceptors>
>>                 <cxfbc:outInterceptors>
>>                     <bean
>>
>> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
>>                 </cxfbc:outInterceptors>
>>             </cxfbc:consumer>
>>         </sm:endpoints>
>>     </sm:container>
>>
>>     <bean id="jbi"
>>         class="org.apache.servicemix.camel.CamelJbiComponent" />
>>
>>     <bean id="router"
>>         class="symphony.integration.service.mm.BillingServiceRouter" />
>>
>>     <camelContext id="camelContext" useJmx="true"
>>         xmlns="http://activemq.apache.org/camel/schema/spring">
>>         <route>
>>             <from
>>                 uri="jbi:endpoint:
>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort"
>> />
>>             <recipientList>
>>                 <methodCall bean="router" method="route"/>
>>             </recipientList>
>>         </route>
>>     </camelContext>
>> </beans>
>>
>> Jackey
>>
>> 2008/11/20 Willem Jiang <wi...@gmail.com>
>>
>>> Can you show us your DSL ?
>>> I can't image how this string can be turned into a Source Object, may be
>>> you just put the recipientlist into the message body instead of setting
>>> it into the message header.
>>>
>>> Willem
>>>
>>> Jackey Ding wrote:
>>>> Hi,
>>>>
>>>> I traced error, the real serivce provider is return the correct message
>>> to
>>>> camel, but camel not pass the message to the client.
>>>> The exception is thrown at method DefaultTypeConverter.convertTo(Class<T>
>>>> type, Exchange exchange, Object value); because it could not find
>>> suitable
>>>> conversion. Here is the paramter value:
>>>>
>>>> type    Class<T> (javax.xml.transform.Source) (id=90)
>>>>
>>>> exchange    JbiExchange  (id=91)
>>>>     binding    JbiBinding  (id=97)
>>>>     context    SpringCamelContext  (id=100)
>>>>     exception    null
>>>>     exchangeId    null
>>>>     fault    null
>>>>     in    JbiMessage  (id=113)
>>>>     messageExchange    InOutImpl  (id=114)
>>>>     out    JbiMessage  (id=99)
>>>>     pattern    ExchangePattern  (id=116)
>>>>     properties    ConcurrentHashMap<K,V>  (id=118)
>>>>     unitOfWork    DefaultUnitOfWork  (id=121)
>>>>
>>>> value    [0]    "jbi:endpoint:
>>>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>> "
>>>>
>>>> jackey
>>>>
>>>> 2008/11/20 Jackey Ding <no...@gmail.com>
>>>>
>>>>> BTW, I find the route method was executed 6 times.
>>>>>
>>>>> Jackey
>>>>>
>>>>> 2008/11/20 Jackey Ding <no...@gmail.com>
>>>>>
>>>>> Hi,
>>>>>> I tried code you pasted, here is the message.
>>>>>>
>>>>>> 2008-11-20 19:53:48 org.apache.cxf.interceptor.LoggingInInterceptor
>>>>>> logging
>>>>>> infor: Inbound Message
>>>>>> ----------------------------
>>>>>> Encoding:
>>>>>> Headers:
>>>>>> Messages:
>>>>>> Message:
>>>>>>
>>>>>> Payload: <?xml version="1.0" encoding="UTF-8"?><soap:Envelope
>>> xmlns:soap="
>>>>>> http://schemas.xmlsoap.org/soap/envelope/
>>> "><soap:Body><ns1:getBillingCount
>>>>>> xmlns:ns1="http://mm.service.integration.symphony"><arg0
>>>>>> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><entityPage
>>>>>> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><rowSize
>>>>>> xmlns="">10</rowSize></entityPage><rowSize
>>> xmlns="">10</rowSize><billingNo
>>> xmlns="">KP0000000005</billingNo></arg0></ns1:getBillingCount></soap:Body></soap:Envelope>
>>>>>> --------------------------------------
>>>>>> 2008-11-20 19:53:48
>>>>>> org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback
>>> onClose
>>>>>> info: Outbound Message
>>>>>> ---------------------------
>>>>>> Encoding: UTF-8
>>>>>> Headers:
>>>>>> Messages:
>>>>>> Payload: <soap:Envelope xmlns:soap="
>>>>>> http://schemas.xmlsoap.org/soap/envelope/
>>> "><soap:Body><ns1:getBillingCountResponse
>>>>>> xmlns:ns1="http://mm.service.integration.symphony
>>>>>>
>>> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
>>>>>> --------------------------------------
>>>>>> 2008-11-20 19:53:48 org.apache.camel.processor.Logger log
>>>>>> error: Failed delivery for exchangeId:
>>>>>> ID-mycomputer/1988-1227182024906/0-0. On delivery attempt: 0 caught:
>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed
>>> to
>>>>>> invoke method: route on router due to:
>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type converter
>>>>>> available to convert from type: class [Ljava.lang.String; to the
>>> required
>>>>>> type: javax.xml.transform.Source with value [Ljava.lang.String;@e8709d
>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed
>>> to
>>>>>> invoke method: route on router due to:
>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type converter
>>>>>> available to convert from type: class [Ljava.lang.String; to the
>>> required
>>>>>> type: javax.xml.transform.Source with value [Ljava.lang.String;@e8709d
>>>>>>     at
>>>>>>
>>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
>>>>>>     at
>>>>>> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
>>>>>>     at
>>>>>>
>>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
>>>>>>     at
>>>>>>
>>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
>>>>>>     at
>>>>>>
>>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
>>>>>>     at
>>>>>>
>>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
>>>>>>     at
>>>>>>
>>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
>>>>>>     at
>>>>>>
>>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>>>>>>     at
>>>>>>
>>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
>>>>>>     at
>>>>>>
>>> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
>>>>>>     at
>>>>>>
>>> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
>>>>>>     at
>>>>>>
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
>>>>>>     at
>>>>>>
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
>>>>>>     at
>>>>>>
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
>>>>>>     at
>>>>>>
>>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>>>>>>     at
>>>>>>
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
>>>>>>     at
>>>>>>
>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>>>>>>     at
>>>>>>
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>>>>>>     at
>>>>>>
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>     at
>>>>>>
>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>>>>>>     at
>>>>>>
>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>>>>>>     at java.lang.Thread.run(Thread.java:595)
>>>>>> Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
>>>>>> converter available to convert from type: class [Ljava.lang.String; to
>>> the
>>>>>> required type: javax.xml.transform.Source with value
>>>>>> [Ljava.lang.String;@e8709d
>>>>>>     at
>>>>>>
>>> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
>>>>>>     at
>>>>>>
>>> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
>>>>>>     at
>>>>>>
>>> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
>>>>>>     at
>>> org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
>>>>>>     at
>>>>>>
>>> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
>>>>>>     at
>>>>>>
>>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
>>>>>>     ... 21 more
>>>>>> javax.xml.transform.dom.DOMSource@f2e328
>>>>>>
>>>>>> The message in red is system printout.
>>>>>>
>>>>>> BTW, I am using camel 1.5.0.
>>>>>>
>>>>>>
>>>>>> Jackey
>>>>>>
>>>>>> 2008/11/20 Claus Ibsen <cl...@gmail.com>
>>>>>>
>>>>>>> Hi Try with this
>>>>>>>
>>>>>>>>    @RecipientList
>>>>>>>>    public String[] route(Exchange exchange) {
>>>>>>>>        System.out.println(exchange.getIn().getBody());
>>>>>>>>        return new String[]{"jbi:endpoint:
>>>>>>>>
>>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>>>>> "};
>>>>>>>>    }
>>>>>>> /Claus Ibsen
>>>>>>> Apache Camel Committer
>>>>>>> Blog: http://davsclaus.blogspot.com/
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Nov 20, 2008 at 9:34 AM, Jackey Ding <no...@gmail.com>
>>>>>>> wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> Here is my bean.
>>>>>>>>
>>>>>>>> public class BillingServiceRouter{
>>>>>>>>
>>>>>>>>    @RecipientList
>>>>>>>>    public String[] route(String body) {
>>>>>>>>        System.out.println(body);
>>>>>>>>        return new String[]{"jbi:endpoint:
>>>>>>>>
>>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>>>>> "};
>>>>>>>>    }
>>>>>>>> }
>>>>>>>>
>>>>>>>> Jackey
>>>>>>>>
>>>>>>>> 2008/11/20 Claus Ibsen <cl...@gmail.com>
>>>>>>>>
>>>>>>>>> Hi
>>>>>>>>>
>>>>>>>>> What does your bean look like?
>>>>>>>>>>                <methodCall bean="router" method="route"/>
>>>>>>>>> I think the issue is that the payload from servicemix is XML and
>>> Camel
>>>>>>>>> will try to find coerce the payload to the type you have defined in
>>>>>>>>> your bean.
>>>>>>>>>
>>>>>>>>> So you can change the signature to use Exchange as type then there
>>>>>>>>> shouldn't take any type conventions place.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> /Claus Ibsen
>>>>>>>>> Apache Camel Committer
>>>>>>>>> Blog: http://davsclaus.blogspot.com/
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, Nov 20, 2008 at 9:11 AM, Jackey Ding <novthirteen@gmail.com
>>>>>>>>> wrote:
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> I want to wirte a bean dynamically determine what endpoints will be
>>>>>>>>> invoked
>>>>>>>>>> when a service is called. It seems that dynamic recipientlist can
>>>>>>> meet my
>>>>>>>>>> demand. I wrote a simple method just return a string as endpoint
>>>>>>> name,
>>>>>>>>> and
>>>>>>>>>> got the error message as below:
>>>>>>>>>>
>>>>>>>>>> info: Outbound Message
>>>>>>>>>> ---------------------------
>>>>>>>>>> Encoding: UTF-8
>>>>>>>>>> Headers:
>>>>>>>>>> Messages:
>>>>>>>>>> Payload: <soap:Envelope xmlns:soap="
>>>>>>>>>> http://schemas.xmlsoap.org/soap/envelope/
>>>>>>>>> "><soap:Body><ns1:getBillingCountResponse
>>>>>>>>>> xmlns:ns1="http://mm.service.integration.symphony
>>>>>>>>>>
>>> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
>>>>>>>>>> --------------------------------------
>>>>>>>>>> 2008-11-20 15:36:36 org.apache.camel.processor.Logger log
>>>>>>>>>> error: Failed delivery for exchangeId:
>>>>>>>>> ID-mycomputer/3353-1227166593020/0-0.
>>>>>>>>>> On delivery attempt: 0 caught:
>>>>>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
>>>>>>> Failed to
>>>>>>>>>> invoke method: route on router due to:
>>>>>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
>>>>>>> converter
>>>>>>>>>> available to convert from type: class [Ljava.lang.String; to the
>>>>>>> required
>>>>>>>>>> type: javax.xml.transform.Source with value
>>>>>>> [Ljava.lang.String;@1f3329a
>>>>>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
>>>>>>> Failed to
>>>>>>>>>> invoke method: route on router due to:
>>>>>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
>>>>>>> converter
>>>>>>>>>> available to convert from type: class [Ljava.lang.String; to the
>>>>>>> required
>>>>>>>>>> type: javax.xml.transform.Source with value
>>>>>>> [Ljava.lang.String;@1f3329a
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>>    at
>>>>>>>>>>
>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>>>>>>>>>>    at
>>>>>>>>>>
>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>>>>>>>>>>    at java.lang.Thread.run(Thread.java:595)
>>>>>>>>>> Caused by: org.apache.camel.NoTypeConversionAvailableException: No
>>>>>>> type
>>>>>>>>>> converter available to convert from type: class [Ljava.lang.String;
>>>>>>> to
>>>>>>>>> the
>>>>>>>>>> required type: javax.xml.transform.Source with value
>>>>>>>>>> [Ljava.lang.String;@1f3329a
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
>>>>>>>>>>    at
>>>>>>> org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
>>>>>>>>>>    at
>>>>>>>>>>
>>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
>>>>>>>>>>    ... 21 more
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> my configuration is
>>>>>>>>>> <bean id="router"
>>>>>>>>>>        class="symphony.integration.service.mm.BillingServiceRouter"
>>>>>>> />
>>>>>>>>>>    <camelContext id="camelContext" useJmx="true"
>>>>>>>>>>        xmlns="http://activemq.apache.org/camel/schema/spring">
>>>>>>>>>>        <route>
>>>>>>>>>>            <from
>>>>>>>>>>                uri="jbi:endpoint:
>>>>>>>>>>
>>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
>>>>>>>>> "
>>>>>>>>>> />
>>>>>>>>>>            <recipientList>
>>>>>>>>>>                <methodCall bean="router" method="route"/>
>>>>>>>>>>            </recipientList>
>>>>>>>>>>        </route>
>>>>>>>>>>    </camelContext>
>>>>>>>>>>
>>>>>>>>>> my bean, just return a string.
>>>>>>>>>> @RecipientList
>>>>>>>>>>    public String[] route(String body) {
>>>>>>>>>>        return new String[]{"jbi:endpoint:
>>>>>>>>>>
>>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>>>>>>> "};
>>>>>>>>>>    }
>>>>>>>>>>
>>>>>>>>>> It's weird, when change config to point-to-point mode it works
>>> fine.
>>>>>>>>>>        <route>
>>>>>>>>>>            <from
>>>>>>>>>>                uri="jbi:endpoint:
>>>>>>>>>>
>>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
>>>>>>>>> "
>>>>>>>>>> />
>>>>>>>>>>            <to
>>>>>>>>>>                uri="jbi:endpoint:
>>>>>>>>>>
>>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>>>>> "
>>>>>>>>> />
>>>>>>>>>>        </route>
>>>>>>>>>>
>>>>>>>>>> Thanks & best regards
>>>>>>>>>>
>>>
>>
>
>

Re: Meet a problem when using recipientlist

Posted by Willem Jiang <wi...@gmail.com>.
Did you change your bean's route method as Claus suggested ?
@RecipientList
public String[] route(Exchange exchange) {
       System.out.println(exchange.getIn().getBody());
       return new String[]{"jbi:endpoint:
http://mm.service.integration.symphony/BillingService/BillingServicePort
"};
}

Willem


Jackey Ding wrote:
> Hi,
> 
> Here is my servicemix.xml, and I have pasted my router bean in preciously
> post.
> 
> <beans xmlns="http://www.springframework.org/schema/beans"
>     xmlns:sm="http://servicemix.apache.org/config/1.0"
>     xmlns:cxfse="http://servicemix.apache.org/cxfse/1.0"
>     xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
>     xmlns:bean="http://servicemix.apache.org/bean/1.0"
>     xmlns:camel="http://activemq.apache.org/camel/schema/spring"
>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>     xmlns:bill="http://mm.service.integration.symphony"
>     xsi:schemaLocation="http://www.springframework.org/schema/beansclasspath:xmlschema/spring-beans-2.5.xsd
> 
> http://servicemix.apache.org/config/1.0classpath:xmlschema/servicemix.xsd
> 
> http://servicemix.apache.org/cxfse/1.0classpath:xmlschema/servicemix-cxf-se.xsd
> 
> http://servicemix.apache.org/cxfbc/1.0classpath:xmlschema/servicemix-cxf-bc.xsd
> 
> http://servicemix.apache.org/bean/1.0classpath:xmlschema/servicemix-bean.xsd
> 
> http://activemq.apache.org/camel/schema/springclasspath:xmlschema/camel-spring.xsd">
> 
>     <sm:container id="jbiContainer" embedded="true">
>         <sm:activationSpecs>
>             <sm:activationSpec id="servicemix-camel"
>                 service="bill:BillingServiceCamelRouter"
>                 endpoint="BillingServicePort">
>                 <sm:component>
>                     <ref bean="jbi" />
>                 </sm:component>
>             </sm:activationSpec>
>         </sm:activationSpecs>
>         <sm:endpoints>
>             <cxfse:endpoint id="BillingService" useJBIWrapper="false">
>                 <cxfse:inFaultInterceptors>
>                     <bean
> 
> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
>                 </cxfse:inFaultInterceptors>
>                 <cxfse:inInterceptors>
>                     <bean
> 
> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
>                 </cxfse:inInterceptors>
>                 <cxfse:outFaultInterceptors>
>                     <bean
> 
> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
>                 </cxfse:outFaultInterceptors>
>                 <cxfse:outInterceptors>
>                     <bean
> 
> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
>                 </cxfse:outInterceptors>
>                 <cxfse:pojo>
>                     <bean
> 
> class="symphony.integration.service.mm.LppBillingServiceImpl" />
>                 </cxfse:pojo>
>             </cxfse:endpoint>
>             <cxfbc:consumer
> 
> wsdl="classpath:symphony/integration/service/mm/BillingService.wsdl"
> 
> interfaceName="symphony.integration.service.mm.BillingService"
>                 targetEndpoint="BillingServicePort"
>                 targetService="bill:BillingServiceCamelRouter"
>                 useJBIWrapper="false">
>                 <cxfbc:inFaultInterceptors>
>                     <bean
> 
> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
>                 </cxfbc:inFaultInterceptors>
>                 <cxfbc:inInterceptors>
>                     <bean
> 
> class="org.apache.cxf.interceptor.LoggingInInterceptor" />
>                 </cxfbc:inInterceptors>
>                 <cxfbc:outFaultInterceptors>
>                     <bean
> 
> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
>                 </cxfbc:outFaultInterceptors>
>                 <cxfbc:outInterceptors>
>                     <bean
> 
> class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
>                 </cxfbc:outInterceptors>
>             </cxfbc:consumer>
>         </sm:endpoints>
>     </sm:container>
> 
>     <bean id="jbi"
>         class="org.apache.servicemix.camel.CamelJbiComponent" />
> 
>     <bean id="router"
>         class="symphony.integration.service.mm.BillingServiceRouter" />
> 
>     <camelContext id="camelContext" useJmx="true"
>         xmlns="http://activemq.apache.org/camel/schema/spring">
>         <route>
>             <from
>                 uri="jbi:endpoint:
> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort"
> />
>             <recipientList>
>                 <methodCall bean="router" method="route"/>
>             </recipientList>
>         </route>
>     </camelContext>
> </beans>
> 
> Jackey
> 
> 2008/11/20 Willem Jiang <wi...@gmail.com>
> 
>> Can you show us your DSL ?
>> I can't image how this string can be turned into a Source Object, may be
>> you just put the recipientlist into the message body instead of setting
>> it into the message header.
>>
>> Willem
>>
>> Jackey Ding wrote:
>>> Hi,
>>>
>>> I traced error, the real serivce provider is return the correct message
>> to
>>> camel, but camel not pass the message to the client.
>>> The exception is thrown at method DefaultTypeConverter.convertTo(Class<T>
>>> type, Exchange exchange, Object value); because it could not find
>> suitable
>>> conversion. Here is the paramter value:
>>>
>>> type    Class<T> (javax.xml.transform.Source) (id=90)
>>>
>>> exchange    JbiExchange  (id=91)
>>>     binding    JbiBinding  (id=97)
>>>     context    SpringCamelContext  (id=100)
>>>     exception    null
>>>     exchangeId    null
>>>     fault    null
>>>     in    JbiMessage  (id=113)
>>>     messageExchange    InOutImpl  (id=114)
>>>     out    JbiMessage  (id=99)
>>>     pattern    ExchangePattern  (id=116)
>>>     properties    ConcurrentHashMap<K,V>  (id=118)
>>>     unitOfWork    DefaultUnitOfWork  (id=121)
>>>
>>> value    [0]    "jbi:endpoint:
>>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>> "
>>>
>>> jackey
>>>
>>> 2008/11/20 Jackey Ding <no...@gmail.com>
>>>
>>>> BTW, I find the route method was executed 6 times.
>>>>
>>>> Jackey
>>>>
>>>> 2008/11/20 Jackey Ding <no...@gmail.com>
>>>>
>>>> Hi,
>>>>> I tried code you pasted, here is the message.
>>>>>
>>>>> 2008-11-20 19:53:48 org.apache.cxf.interceptor.LoggingInInterceptor
>>>>> logging
>>>>> infor: Inbound Message
>>>>> ----------------------------
>>>>> Encoding:
>>>>> Headers:
>>>>> Messages:
>>>>> Message:
>>>>>
>>>>> Payload: <?xml version="1.0" encoding="UTF-8"?><soap:Envelope
>> xmlns:soap="
>>>>> http://schemas.xmlsoap.org/soap/envelope/
>> "><soap:Body><ns1:getBillingCount
>>>>> xmlns:ns1="http://mm.service.integration.symphony"><arg0
>>>>> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><entityPage
>>>>> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><rowSize
>>>>> xmlns="">10</rowSize></entityPage><rowSize
>> xmlns="">10</rowSize><billingNo
>> xmlns="">KP0000000005</billingNo></arg0></ns1:getBillingCount></soap:Body></soap:Envelope>
>>>>> --------------------------------------
>>>>> 2008-11-20 19:53:48
>>>>> org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback
>> onClose
>>>>> info: Outbound Message
>>>>> ---------------------------
>>>>> Encoding: UTF-8
>>>>> Headers:
>>>>> Messages:
>>>>> Payload: <soap:Envelope xmlns:soap="
>>>>> http://schemas.xmlsoap.org/soap/envelope/
>> "><soap:Body><ns1:getBillingCountResponse
>>>>> xmlns:ns1="http://mm.service.integration.symphony
>>>>>
>> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
>>>>> --------------------------------------
>>>>> 2008-11-20 19:53:48 org.apache.camel.processor.Logger log
>>>>> error: Failed delivery for exchangeId:
>>>>> ID-mycomputer/1988-1227182024906/0-0. On delivery attempt: 0 caught:
>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed
>> to
>>>>> invoke method: route on router due to:
>>>>> org.apache.camel.NoTypeConversionAvailableException: No type converter
>>>>> available to convert from type: class [Ljava.lang.String; to the
>> required
>>>>> type: javax.xml.transform.Source with value [Ljava.lang.String;@e8709d
>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed
>> to
>>>>> invoke method: route on router due to:
>>>>> org.apache.camel.NoTypeConversionAvailableException: No type converter
>>>>> available to convert from type: class [Ljava.lang.String; to the
>> required
>>>>> type: javax.xml.transform.Source with value [Ljava.lang.String;@e8709d
>>>>>     at
>>>>>
>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
>>>>>     at
>>>>> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
>>>>>     at
>>>>>
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
>>>>>     at
>>>>>
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
>>>>>     at
>>>>>
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
>>>>>     at
>>>>>
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
>>>>>     at
>>>>>
>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
>>>>>     at
>>>>>
>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>>>>>     at
>>>>>
>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
>>>>>     at
>>>>>
>> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
>>>>>     at
>>>>>
>> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
>>>>>     at
>>>>>
>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
>>>>>     at
>>>>>
>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
>>>>>     at
>>>>>
>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
>>>>>     at
>>>>>
>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>>>>>     at
>>>>>
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
>>>>>     at
>>>>>
>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>>>>>     at
>>>>>
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>>>>>     at
>>>>>
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>     at
>>>>>
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>>>>>     at
>>>>>
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>>>>>     at java.lang.Thread.run(Thread.java:595)
>>>>> Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
>>>>> converter available to convert from type: class [Ljava.lang.String; to
>> the
>>>>> required type: javax.xml.transform.Source with value
>>>>> [Ljava.lang.String;@e8709d
>>>>>     at
>>>>>
>> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
>>>>>     at
>>>>>
>> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
>>>>>     at
>>>>>
>> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
>>>>>     at
>> org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
>>>>>     at
>>>>>
>> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
>>>>>     at
>>>>>
>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
>>>>>     ... 21 more
>>>>> javax.xml.transform.dom.DOMSource@f2e328
>>>>>
>>>>> The message in red is system printout.
>>>>>
>>>>> BTW, I am using camel 1.5.0.
>>>>>
>>>>>
>>>>> Jackey
>>>>>
>>>>> 2008/11/20 Claus Ibsen <cl...@gmail.com>
>>>>>
>>>>>> Hi Try with this
>>>>>>
>>>>>>>    @RecipientList
>>>>>>>    public String[] route(Exchange exchange) {
>>>>>>>        System.out.println(exchange.getIn().getBody());
>>>>>>>        return new String[]{"jbi:endpoint:
>>>>>>>
>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>>>> "};
>>>>>>>    }
>>>>>> /Claus Ibsen
>>>>>> Apache Camel Committer
>>>>>> Blog: http://davsclaus.blogspot.com/
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Thu, Nov 20, 2008 at 9:34 AM, Jackey Ding <no...@gmail.com>
>>>>>> wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> Here is my bean.
>>>>>>>
>>>>>>> public class BillingServiceRouter{
>>>>>>>
>>>>>>>    @RecipientList
>>>>>>>    public String[] route(String body) {
>>>>>>>        System.out.println(body);
>>>>>>>        return new String[]{"jbi:endpoint:
>>>>>>>
>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>>>> "};
>>>>>>>    }
>>>>>>> }
>>>>>>>
>>>>>>> Jackey
>>>>>>>
>>>>>>> 2008/11/20 Claus Ibsen <cl...@gmail.com>
>>>>>>>
>>>>>>>> Hi
>>>>>>>>
>>>>>>>> What does your bean look like?
>>>>>>>>>                <methodCall bean="router" method="route"/>
>>>>>>>> I think the issue is that the payload from servicemix is XML and
>> Camel
>>>>>>>> will try to find coerce the payload to the type you have defined in
>>>>>>>> your bean.
>>>>>>>>
>>>>>>>> So you can change the signature to use Exchange as type then there
>>>>>>>> shouldn't take any type conventions place.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> /Claus Ibsen
>>>>>>>> Apache Camel Committer
>>>>>>>> Blog: http://davsclaus.blogspot.com/
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Nov 20, 2008 at 9:11 AM, Jackey Ding <novthirteen@gmail.com
>>>>>>>> wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> I want to wirte a bean dynamically determine what endpoints will be
>>>>>>>> invoked
>>>>>>>>> when a service is called. It seems that dynamic recipientlist can
>>>>>> meet my
>>>>>>>>> demand. I wrote a simple method just return a string as endpoint
>>>>>> name,
>>>>>>>> and
>>>>>>>>> got the error message as below:
>>>>>>>>>
>>>>>>>>> info: Outbound Message
>>>>>>>>> ---------------------------
>>>>>>>>> Encoding: UTF-8
>>>>>>>>> Headers:
>>>>>>>>> Messages:
>>>>>>>>> Payload: <soap:Envelope xmlns:soap="
>>>>>>>>> http://schemas.xmlsoap.org/soap/envelope/
>>>>>>>> "><soap:Body><ns1:getBillingCountResponse
>>>>>>>>> xmlns:ns1="http://mm.service.integration.symphony
>>>>>>>>>
>> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
>>>>>>>>> --------------------------------------
>>>>>>>>> 2008-11-20 15:36:36 org.apache.camel.processor.Logger log
>>>>>>>>> error: Failed delivery for exchangeId:
>>>>>>>> ID-mycomputer/3353-1227166593020/0-0.
>>>>>>>>> On delivery attempt: 0 caught:
>>>>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
>>>>>> Failed to
>>>>>>>>> invoke method: route on router due to:
>>>>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
>>>>>> converter
>>>>>>>>> available to convert from type: class [Ljava.lang.String; to the
>>>>>> required
>>>>>>>>> type: javax.xml.transform.Source with value
>>>>>> [Ljava.lang.String;@1f3329a
>>>>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
>>>>>> Failed to
>>>>>>>>> invoke method: route on router due to:
>>>>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
>>>>>> converter
>>>>>>>>> available to convert from type: class [Ljava.lang.String; to the
>>>>>> required
>>>>>>>>> type: javax.xml.transform.Source with value
>>>>>> [Ljava.lang.String;@1f3329a
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>>>    at
>>>>>>>>>
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>>>>>>>>>    at
>>>>>>>>>
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>>>>>>>>>    at java.lang.Thread.run(Thread.java:595)
>>>>>>>>> Caused by: org.apache.camel.NoTypeConversionAvailableException: No
>>>>>> type
>>>>>>>>> converter available to convert from type: class [Ljava.lang.String;
>>>>>> to
>>>>>>>> the
>>>>>>>>> required type: javax.xml.transform.Source with value
>>>>>>>>> [Ljava.lang.String;@1f3329a
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
>>>>>>>>>    at
>>>>>> org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
>>>>>>>>>    at
>>>>>>>>>
>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
>>>>>>>>>    ... 21 more
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> my configuration is
>>>>>>>>> <bean id="router"
>>>>>>>>>        class="symphony.integration.service.mm.BillingServiceRouter"
>>>>>> />
>>>>>>>>>    <camelContext id="camelContext" useJmx="true"
>>>>>>>>>        xmlns="http://activemq.apache.org/camel/schema/spring">
>>>>>>>>>        <route>
>>>>>>>>>            <from
>>>>>>>>>                uri="jbi:endpoint:
>>>>>>>>>
>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
>>>>>>>> "
>>>>>>>>> />
>>>>>>>>>            <recipientList>
>>>>>>>>>                <methodCall bean="router" method="route"/>
>>>>>>>>>            </recipientList>
>>>>>>>>>        </route>
>>>>>>>>>    </camelContext>
>>>>>>>>>
>>>>>>>>> my bean, just return a string.
>>>>>>>>> @RecipientList
>>>>>>>>>    public String[] route(String body) {
>>>>>>>>>        return new String[]{"jbi:endpoint:
>>>>>>>>>
>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>>>>>> "};
>>>>>>>>>    }
>>>>>>>>>
>>>>>>>>> It's weird, when change config to point-to-point mode it works
>> fine.
>>>>>>>>>        <route>
>>>>>>>>>            <from
>>>>>>>>>                uri="jbi:endpoint:
>>>>>>>>>
>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
>>>>>>>> "
>>>>>>>>> />
>>>>>>>>>            <to
>>>>>>>>>                uri="jbi:endpoint:
>>>>>>>>>
>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>>>> "
>>>>>>>> />
>>>>>>>>>        </route>
>>>>>>>>>
>>>>>>>>> Thanks & best regards
>>>>>>>>>
>>
> 


Re: Meet a problem when using recipientlist

Posted by Jackey Ding <no...@gmail.com>.
Hi,

Here is my servicemix.xml, and I have pasted my router bean in preciously
post.

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:sm="http://servicemix.apache.org/config/1.0"
    xmlns:cxfse="http://servicemix.apache.org/cxfse/1.0"
    xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
    xmlns:bean="http://servicemix.apache.org/bean/1.0"
    xmlns:camel="http://activemq.apache.org/camel/schema/spring"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:bill="http://mm.service.integration.symphony"
    xsi:schemaLocation="http://www.springframework.org/schema/beansclasspath:xmlschema/spring-beans-2.5.xsd

http://servicemix.apache.org/config/1.0classpath:xmlschema/servicemix.xsd

http://servicemix.apache.org/cxfse/1.0classpath:xmlschema/servicemix-cxf-se.xsd

http://servicemix.apache.org/cxfbc/1.0classpath:xmlschema/servicemix-cxf-bc.xsd

http://servicemix.apache.org/bean/1.0classpath:xmlschema/servicemix-bean.xsd

http://activemq.apache.org/camel/schema/springclasspath:xmlschema/camel-spring.xsd">

    <sm:container id="jbiContainer" embedded="true">
        <sm:activationSpecs>
            <sm:activationSpec id="servicemix-camel"
                service="bill:BillingServiceCamelRouter"
                endpoint="BillingServicePort">
                <sm:component>
                    <ref bean="jbi" />
                </sm:component>
            </sm:activationSpec>
        </sm:activationSpecs>
        <sm:endpoints>
            <cxfse:endpoint id="BillingService" useJBIWrapper="false">
                <cxfse:inFaultInterceptors>
                    <bean

class="org.apache.cxf.interceptor.LoggingInInterceptor" />
                </cxfse:inFaultInterceptors>
                <cxfse:inInterceptors>
                    <bean

class="org.apache.cxf.interceptor.LoggingInInterceptor" />
                </cxfse:inInterceptors>
                <cxfse:outFaultInterceptors>
                    <bean

class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
                </cxfse:outFaultInterceptors>
                <cxfse:outInterceptors>
                    <bean

class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
                </cxfse:outInterceptors>
                <cxfse:pojo>
                    <bean

class="symphony.integration.service.mm.LppBillingServiceImpl" />
                </cxfse:pojo>
            </cxfse:endpoint>
            <cxfbc:consumer

wsdl="classpath:symphony/integration/service/mm/BillingService.wsdl"

interfaceName="symphony.integration.service.mm.BillingService"
                targetEndpoint="BillingServicePort"
                targetService="bill:BillingServiceCamelRouter"
                useJBIWrapper="false">
                <cxfbc:inFaultInterceptors>
                    <bean

class="org.apache.cxf.interceptor.LoggingInInterceptor" />
                </cxfbc:inFaultInterceptors>
                <cxfbc:inInterceptors>
                    <bean

class="org.apache.cxf.interceptor.LoggingInInterceptor" />
                </cxfbc:inInterceptors>
                <cxfbc:outFaultInterceptors>
                    <bean

class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
                </cxfbc:outFaultInterceptors>
                <cxfbc:outInterceptors>
                    <bean

class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
                </cxfbc:outInterceptors>
            </cxfbc:consumer>
        </sm:endpoints>
    </sm:container>

    <bean id="jbi"
        class="org.apache.servicemix.camel.CamelJbiComponent" />

    <bean id="router"
        class="symphony.integration.service.mm.BillingServiceRouter" />

    <camelContext id="camelContext" useJmx="true"
        xmlns="http://activemq.apache.org/camel/schema/spring">
        <route>
            <from
                uri="jbi:endpoint:
http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort"
/>
            <recipientList>
                <methodCall bean="router" method="route"/>
            </recipientList>
        </route>
    </camelContext>
</beans>

Jackey

2008/11/20 Willem Jiang <wi...@gmail.com>

> Can you show us your DSL ?
> I can't image how this string can be turned into a Source Object, may be
> you just put the recipientlist into the message body instead of setting
> it into the message header.
>
> Willem
>
> Jackey Ding wrote:
> > Hi,
> >
> > I traced error, the real serivce provider is return the correct message
> to
> > camel, but camel not pass the message to the client.
> > The exception is thrown at method DefaultTypeConverter.convertTo(Class<T>
> > type, Exchange exchange, Object value); because it could not find
> suitable
> > conversion. Here is the paramter value:
> >
> > type    Class<T> (javax.xml.transform.Source) (id=90)
> >
> > exchange    JbiExchange  (id=91)
> >     binding    JbiBinding  (id=97)
> >     context    SpringCamelContext  (id=100)
> >     exception    null
> >     exchangeId    null
> >     fault    null
> >     in    JbiMessage  (id=113)
> >     messageExchange    InOutImpl  (id=114)
> >     out    JbiMessage  (id=99)
> >     pattern    ExchangePattern  (id=116)
> >     properties    ConcurrentHashMap<K,V>  (id=118)
> >     unitOfWork    DefaultUnitOfWork  (id=121)
> >
> > value    [0]    "jbi:endpoint:
> > http://mm.service.integration.symphony/BillingService/BillingServicePort
> "
> >
> >
> > jackey
> >
> > 2008/11/20 Jackey Ding <no...@gmail.com>
> >
> >> BTW, I find the route method was executed 6 times.
> >>
> >> Jackey
> >>
> >> 2008/11/20 Jackey Ding <no...@gmail.com>
> >>
> >> Hi,
> >>> I tried code you pasted, here is the message.
> >>>
> >>> 2008-11-20 19:53:48 org.apache.cxf.interceptor.LoggingInInterceptor
> >>> logging
> >>> infor: Inbound Message
> >>> ----------------------------
> >>> Encoding:
> >>> Headers:
> >>> Messages:
> >>> Message:
> >>>
> >>> Payload: <?xml version="1.0" encoding="UTF-8"?><soap:Envelope
> xmlns:soap="
> >>> http://schemas.xmlsoap.org/soap/envelope/
> "><soap:Body><ns1:getBillingCount
> >>> xmlns:ns1="http://mm.service.integration.symphony"><arg0
> >>> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><entityPage
> >>> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><rowSize
> >>> xmlns="">10</rowSize></entityPage><rowSize
> xmlns="">10</rowSize><billingNo
> >>>
> xmlns="">KP0000000005</billingNo></arg0></ns1:getBillingCount></soap:Body></soap:Envelope>
> >>> --------------------------------------
> >>> 2008-11-20 19:53:48
> >>> org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback
> onClose
> >>> info: Outbound Message
> >>> ---------------------------
> >>> Encoding: UTF-8
> >>> Headers:
> >>> Messages:
> >>> Payload: <soap:Envelope xmlns:soap="
> >>> http://schemas.xmlsoap.org/soap/envelope/
> "><soap:Body><ns1:getBillingCountResponse
> >>> xmlns:ns1="http://mm.service.integration.symphony
> >>>
> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
> >>> --------------------------------------
> >>> 2008-11-20 19:53:48 org.apache.camel.processor.Logger log
> >>> error: Failed delivery for exchangeId:
> >>> ID-mycomputer/1988-1227182024906/0-0. On delivery attempt: 0 caught:
> >>> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed
> to
> >>> invoke method: route on router due to:
> >>> org.apache.camel.NoTypeConversionAvailableException: No type converter
> >>> available to convert from type: class [Ljava.lang.String; to the
> required
> >>> type: javax.xml.transform.Source with value [Ljava.lang.String;@e8709d
> >>> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed
> to
> >>> invoke method: route on router due to:
> >>> org.apache.camel.NoTypeConversionAvailableException: No type converter
> >>> available to convert from type: class [Ljava.lang.String; to the
> required
> >>> type: javax.xml.transform.Source with value [Ljava.lang.String;@e8709d
> >>>     at
> >>>
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
> >>>     at
> >>> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
> >>>     at
> >>>
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
> >>>     at
> >>>
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
> >>>     at
> >>>
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
> >>>     at
> >>>
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
> >>>     at
> >>>
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
> >>>     at
> >>>
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
> >>>     at
> >>>
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
> >>>     at
> >>>
> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
> >>>     at
> >>>
> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
> >>>     at
> >>>
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
> >>>     at
> >>>
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
> >>>     at
> >>>
> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
> >>>     at
> >>>
> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
> >>>     at
> >>>
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
> >>>     at
> >>>
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
> >>>     at
> >>>
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
> >>>     at
> >>>
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
> >>>     at
> >>>
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> >>>     at
> >>>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> >>>     at java.lang.Thread.run(Thread.java:595)
> >>> Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
> >>> converter available to convert from type: class [Ljava.lang.String; to
> the
> >>> required type: javax.xml.transform.Source with value
> >>> [Ljava.lang.String;@e8709d
> >>>     at
> >>>
> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
> >>>     at
> >>>
> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
> >>>     at
> >>>
> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
> >>>     at
> org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
> >>>     at
> >>>
> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
> >>>     at
> >>>
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
> >>>     ... 21 more
> >>> javax.xml.transform.dom.DOMSource@f2e328
> >>>
> >>> The message in red is system printout.
> >>>
> >>> BTW, I am using camel 1.5.0.
> >>>
> >>>
> >>> Jackey
> >>>
> >>> 2008/11/20 Claus Ibsen <cl...@gmail.com>
> >>>
> >>>> Hi Try with this
> >>>>
> >>>>>    @RecipientList
> >>>>>    public String[] route(Exchange exchange) {
> >>>>>        System.out.println(exchange.getIn().getBody());
> >>>>>        return new String[]{"jbi:endpoint:
> >>>>>
> >>>>
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> >>>> "};
> >>>>>    }
> >>>>
> >>>> /Claus Ibsen
> >>>> Apache Camel Committer
> >>>> Blog: http://davsclaus.blogspot.com/
> >>>>
> >>>>
> >>>>
> >>>> On Thu, Nov 20, 2008 at 9:34 AM, Jackey Ding <no...@gmail.com>
> >>>> wrote:
> >>>>> Hi,
> >>>>>
> >>>>> Here is my bean.
> >>>>>
> >>>>> public class BillingServiceRouter{
> >>>>>
> >>>>>    @RecipientList
> >>>>>    public String[] route(String body) {
> >>>>>        System.out.println(body);
> >>>>>        return new String[]{"jbi:endpoint:
> >>>>>
> >>>>
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> >>>> "};
> >>>>>    }
> >>>>> }
> >>>>>
> >>>>> Jackey
> >>>>>
> >>>>> 2008/11/20 Claus Ibsen <cl...@gmail.com>
> >>>>>
> >>>>>> Hi
> >>>>>>
> >>>>>> What does your bean look like?
> >>>>>>>                <methodCall bean="router" method="route"/>
> >>>>>> I think the issue is that the payload from servicemix is XML and
> Camel
> >>>>>> will try to find coerce the payload to the type you have defined in
> >>>>>> your bean.
> >>>>>>
> >>>>>> So you can change the signature to use Exchange as type then there
> >>>>>> shouldn't take any type conventions place.
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> /Claus Ibsen
> >>>>>> Apache Camel Committer
> >>>>>> Blog: http://davsclaus.blogspot.com/
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> On Thu, Nov 20, 2008 at 9:11 AM, Jackey Ding <novthirteen@gmail.com
> >
> >>>>>> wrote:
> >>>>>>> Hi,
> >>>>>>>
> >>>>>>> I want to wirte a bean dynamically determine what endpoints will be
> >>>>>> invoked
> >>>>>>> when a service is called. It seems that dynamic recipientlist can
> >>>> meet my
> >>>>>>> demand. I wrote a simple method just return a string as endpoint
> >>>> name,
> >>>>>> and
> >>>>>>> got the error message as below:
> >>>>>>>
> >>>>>>> info: Outbound Message
> >>>>>>> ---------------------------
> >>>>>>> Encoding: UTF-8
> >>>>>>> Headers:
> >>>>>>> Messages:
> >>>>>>> Payload: <soap:Envelope xmlns:soap="
> >>>>>>> http://schemas.xmlsoap.org/soap/envelope/
> >>>>>> "><soap:Body><ns1:getBillingCountResponse
> >>>>>>> xmlns:ns1="http://mm.service.integration.symphony
> >>>>>>>
> >>>>
> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
> >>>>>>> --------------------------------------
> >>>>>>> 2008-11-20 15:36:36 org.apache.camel.processor.Logger log
> >>>>>>> error: Failed delivery for exchangeId:
> >>>>>> ID-mycomputer/3353-1227166593020/0-0.
> >>>>>>> On delivery attempt: 0 caught:
> >>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
> >>>> Failed to
> >>>>>>> invoke method: route on router due to:
> >>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
> >>>> converter
> >>>>>>> available to convert from type: class [Ljava.lang.String; to the
> >>>> required
> >>>>>>> type: javax.xml.transform.Source with value
> >>>> [Ljava.lang.String;@1f3329a
> >>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
> >>>> Failed to
> >>>>>>> invoke method: route on router due to:
> >>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
> >>>> converter
> >>>>>>> available to convert from type: class [Ljava.lang.String; to the
> >>>> required
> >>>>>>> type: javax.xml.transform.Source with value
> >>>> [Ljava.lang.String;@1f3329a
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
> >>>>>>>    at
> >>>>>>>
> >>>>
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> >>>>>>>    at
> >>>>>>>
> >>>>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> >>>>>>>    at java.lang.Thread.run(Thread.java:595)
> >>>>>>> Caused by: org.apache.camel.NoTypeConversionAvailableException: No
> >>>> type
> >>>>>>> converter available to convert from type: class [Ljava.lang.String;
> >>>> to
> >>>>>> the
> >>>>>>> required type: javax.xml.transform.Source with value
> >>>>>>> [Ljava.lang.String;@1f3329a
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
> >>>>>>>    at
> >>>> org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
> >>>>>>>    at
> >>>>>>>
> >>>>
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
> >>>>>>>    ... 21 more
> >>>>>>>
> >>>>>>>
> >>>>>>> my configuration is
> >>>>>>> <bean id="router"
> >>>>>>>        class="symphony.integration.service.mm.BillingServiceRouter"
> >>>> />
> >>>>>>>    <camelContext id="camelContext" useJmx="true"
> >>>>>>>        xmlns="http://activemq.apache.org/camel/schema/spring">
> >>>>>>>        <route>
> >>>>>>>            <from
> >>>>>>>                uri="jbi:endpoint:
> >>>>>>>
> >>>>
> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
> >>>>>> "
> >>>>>>> />
> >>>>>>>            <recipientList>
> >>>>>>>                <methodCall bean="router" method="route"/>
> >>>>>>>            </recipientList>
> >>>>>>>        </route>
> >>>>>>>    </camelContext>
> >>>>>>>
> >>>>>>> my bean, just return a string.
> >>>>>>> @RecipientList
> >>>>>>>    public String[] route(String body) {
> >>>>>>>        return new String[]{"jbi:endpoint:
> >>>>>>>
> >>>>
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> >>>>>> "};
> >>>>>>>    }
> >>>>>>>
> >>>>>>> It's weird, when change config to point-to-point mode it works
> fine.
> >>>>>>>        <route>
> >>>>>>>            <from
> >>>>>>>                uri="jbi:endpoint:
> >>>>>>>
> >>>>
> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
> >>>>>> "
> >>>>>>> />
> >>>>>>>            <to
> >>>>>>>                uri="jbi:endpoint:
> >>>>>>>
> >>>>
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> >>>> "
> >>>>>> />
> >>>>>>>        </route>
> >>>>>>>
> >>>>>>> Thanks & best regards
> >>>>>>>
> >>>
> >
>
>

Re: Meet a problem when using recipientlist

Posted by Willem Jiang <wi...@gmail.com>.
Can you show us your DSL ?
I can't image how this string can be turned into a Source Object, may be
you just put the recipientlist into the message body instead of setting
it into the message header.

Willem

Jackey Ding wrote:
> Hi,
> 
> I traced error, the real serivce provider is return the correct message to
> camel, but camel not pass the message to the client.
> The exception is thrown at method DefaultTypeConverter.convertTo(Class<T>
> type, Exchange exchange, Object value); because it could not find suitable
> conversion. Here is the paramter value:
> 
> type    Class<T> (javax.xml.transform.Source) (id=90)
> 
> exchange    JbiExchange  (id=91)
>     binding    JbiBinding  (id=97)
>     context    SpringCamelContext  (id=100)
>     exception    null
>     exchangeId    null
>     fault    null
>     in    JbiMessage  (id=113)
>     messageExchange    InOutImpl  (id=114)
>     out    JbiMessage  (id=99)
>     pattern    ExchangePattern  (id=116)
>     properties    ConcurrentHashMap<K,V>  (id=118)
>     unitOfWork    DefaultUnitOfWork  (id=121)
> 
> value    [0]    "jbi:endpoint:
> http://mm.service.integration.symphony/BillingService/BillingServicePort"
> 
> 
> jackey
> 
> 2008/11/20 Jackey Ding <no...@gmail.com>
> 
>> BTW, I find the route method was executed 6 times.
>>
>> Jackey
>>
>> 2008/11/20 Jackey Ding <no...@gmail.com>
>>
>> Hi,
>>> I tried code you pasted, here is the message.
>>>
>>> 2008-11-20 19:53:48 org.apache.cxf.interceptor.LoggingInInterceptor
>>> logging
>>> infor: Inbound Message
>>> ----------------------------
>>> Encoding:
>>> Headers:
>>> Messages:
>>> Message:
>>>
>>> Payload: <?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="
>>> http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:getBillingCount
>>> xmlns:ns1="http://mm.service.integration.symphony"><arg0
>>> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><entityPage
>>> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><rowSize
>>> xmlns="">10</rowSize></entityPage><rowSize xmlns="">10</rowSize><billingNo
>>> xmlns="">KP0000000005</billingNo></arg0></ns1:getBillingCount></soap:Body></soap:Envelope>
>>> --------------------------------------
>>> 2008-11-20 19:53:48
>>> org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose
>>> info: Outbound Message
>>> ---------------------------
>>> Encoding: UTF-8
>>> Headers:
>>> Messages:
>>> Payload: <soap:Envelope xmlns:soap="
>>> http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:getBillingCountResponse
>>> xmlns:ns1="http://mm.service.integration.symphony
>>> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
>>> --------------------------------------
>>> 2008-11-20 19:53:48 org.apache.camel.processor.Logger log
>>> error: Failed delivery for exchangeId:
>>> ID-mycomputer/1988-1227182024906/0-0. On delivery attempt: 0 caught:
>>> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
>>> invoke method: route on router due to:
>>> org.apache.camel.NoTypeConversionAvailableException: No type converter
>>> available to convert from type: class [Ljava.lang.String; to the required
>>> type: javax.xml.transform.Source with value [Ljava.lang.String;@e8709d
>>> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
>>> invoke method: route on router due to:
>>> org.apache.camel.NoTypeConversionAvailableException: No type converter
>>> available to convert from type: class [Ljava.lang.String; to the required
>>> type: javax.xml.transform.Source with value [Ljava.lang.String;@e8709d
>>>     at
>>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
>>>     at
>>> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
>>>     at
>>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
>>>     at
>>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
>>>     at
>>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
>>>     at
>>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
>>>     at
>>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
>>>     at
>>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>>>     at
>>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
>>>     at
>>> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
>>>     at
>>> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
>>>     at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
>>>     at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
>>>     at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
>>>     at
>>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>>>     at
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
>>>     at
>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>>>     at
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>>>     at
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>     at
>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>>>     at
>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>>>     at java.lang.Thread.run(Thread.java:595)
>>> Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
>>> converter available to convert from type: class [Ljava.lang.String; to the
>>> required type: javax.xml.transform.Source with value
>>> [Ljava.lang.String;@e8709d
>>>     at
>>> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
>>>     at
>>> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
>>>     at
>>> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
>>>     at org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
>>>     at
>>> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
>>>     at
>>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
>>>     ... 21 more
>>> javax.xml.transform.dom.DOMSource@f2e328
>>>
>>> The message in red is system printout.
>>>
>>> BTW, I am using camel 1.5.0.
>>>
>>>
>>> Jackey
>>>
>>> 2008/11/20 Claus Ibsen <cl...@gmail.com>
>>>
>>>> Hi Try with this
>>>>
>>>>>    @RecipientList
>>>>>    public String[] route(Exchange exchange) {
>>>>>        System.out.println(exchange.getIn().getBody());
>>>>>        return new String[]{"jbi:endpoint:
>>>>>
>>>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>> "};
>>>>>    }
>>>>
>>>> /Claus Ibsen
>>>> Apache Camel Committer
>>>> Blog: http://davsclaus.blogspot.com/
>>>>
>>>>
>>>>
>>>> On Thu, Nov 20, 2008 at 9:34 AM, Jackey Ding <no...@gmail.com>
>>>> wrote:
>>>>> Hi,
>>>>>
>>>>> Here is my bean.
>>>>>
>>>>> public class BillingServiceRouter{
>>>>>
>>>>>    @RecipientList
>>>>>    public String[] route(String body) {
>>>>>        System.out.println(body);
>>>>>        return new String[]{"jbi:endpoint:
>>>>>
>>>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>> "};
>>>>>    }
>>>>> }
>>>>>
>>>>> Jackey
>>>>>
>>>>> 2008/11/20 Claus Ibsen <cl...@gmail.com>
>>>>>
>>>>>> Hi
>>>>>>
>>>>>> What does your bean look like?
>>>>>>>                <methodCall bean="router" method="route"/>
>>>>>> I think the issue is that the payload from servicemix is XML and Camel
>>>>>> will try to find coerce the payload to the type you have defined in
>>>>>> your bean.
>>>>>>
>>>>>> So you can change the signature to use Exchange as type then there
>>>>>> shouldn't take any type conventions place.
>>>>>>
>>>>>>
>>>>>>
>>>>>> /Claus Ibsen
>>>>>> Apache Camel Committer
>>>>>> Blog: http://davsclaus.blogspot.com/
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Thu, Nov 20, 2008 at 9:11 AM, Jackey Ding <no...@gmail.com>
>>>>>> wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> I want to wirte a bean dynamically determine what endpoints will be
>>>>>> invoked
>>>>>>> when a service is called. It seems that dynamic recipientlist can
>>>> meet my
>>>>>>> demand. I wrote a simple method just return a string as endpoint
>>>> name,
>>>>>> and
>>>>>>> got the error message as below:
>>>>>>>
>>>>>>> info: Outbound Message
>>>>>>> ---------------------------
>>>>>>> Encoding: UTF-8
>>>>>>> Headers:
>>>>>>> Messages:
>>>>>>> Payload: <soap:Envelope xmlns:soap="
>>>>>>> http://schemas.xmlsoap.org/soap/envelope/
>>>>>> "><soap:Body><ns1:getBillingCountResponse
>>>>>>> xmlns:ns1="http://mm.service.integration.symphony
>>>>>>>
>>>> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
>>>>>>> --------------------------------------
>>>>>>> 2008-11-20 15:36:36 org.apache.camel.processor.Logger log
>>>>>>> error: Failed delivery for exchangeId:
>>>>>> ID-mycomputer/3353-1227166593020/0-0.
>>>>>>> On delivery attempt: 0 caught:
>>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
>>>> Failed to
>>>>>>> invoke method: route on router due to:
>>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
>>>> converter
>>>>>>> available to convert from type: class [Ljava.lang.String; to the
>>>> required
>>>>>>> type: javax.xml.transform.Source with value
>>>> [Ljava.lang.String;@1f3329a
>>>>>>> org.apache.camel.language.bean.RuntimeBeanExpressionException:
>>>> Failed to
>>>>>>> invoke method: route on router due to:
>>>>>>> org.apache.camel.NoTypeConversionAvailableException: No type
>>>> converter
>>>>>>> available to convert from type: class [Ljava.lang.String; to the
>>>> required
>>>>>>> type: javax.xml.transform.Source with value
>>>> [Ljava.lang.String;@1f3329a
>>>>>>>    at
>>>>>>>
>>>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
>>>>>>>    at
>>>>>>>
>>>> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
>>>>>>>    at
>>>>>>>
>>>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
>>>>>>>    at
>>>>>>>
>>>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
>>>>>>>    at
>>>>>>>
>>>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
>>>>>>>    at
>>>>>>>
>>>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
>>>>>>>    at
>>>>>>>
>>>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
>>>>>>>    at
>>>>>>>
>>>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>>>>>>>    at
>>>>>>>
>>>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
>>>>>>>    at
>>>>>>>
>>>> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
>>>>>>>    at
>>>>>>>
>>>> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
>>>>>>>    at
>>>>>>>
>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
>>>>>>>    at
>>>>>>>
>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
>>>>>>>    at
>>>>>>>
>>>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
>>>>>>>    at
>>>>>>>
>>>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>>>>>>>    at
>>>>>>>
>>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
>>>>>>>    at
>>>>>>>
>>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>>>>>>>    at
>>>>>>>
>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>>>>>>>    at
>>>>>>>
>>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>>>>>>    at
>>>>>>>
>>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>>>>>>>    at
>>>>>>>
>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>>>>>>>    at java.lang.Thread.run(Thread.java:595)
>>>>>>> Caused by: org.apache.camel.NoTypeConversionAvailableException: No
>>>> type
>>>>>>> converter available to convert from type: class [Ljava.lang.String;
>>>> to
>>>>>> the
>>>>>>> required type: javax.xml.transform.Source with value
>>>>>>> [Ljava.lang.String;@1f3329a
>>>>>>>    at
>>>>>>>
>>>> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
>>>>>>>    at
>>>>>>>
>>>> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
>>>>>>>    at
>>>>>>>
>>>> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
>>>>>>>    at
>>>> org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
>>>>>>>    at
>>>>>>>
>>>> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
>>>>>>>    at
>>>>>>>
>>>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
>>>>>>>    ... 21 more
>>>>>>>
>>>>>>>
>>>>>>> my configuration is
>>>>>>> <bean id="router"
>>>>>>>        class="symphony.integration.service.mm.BillingServiceRouter"
>>>> />
>>>>>>>    <camelContext id="camelContext" useJmx="true"
>>>>>>>        xmlns="http://activemq.apache.org/camel/schema/spring">
>>>>>>>        <route>
>>>>>>>            <from
>>>>>>>                uri="jbi:endpoint:
>>>>>>>
>>>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
>>>>>> "
>>>>>>> />
>>>>>>>            <recipientList>
>>>>>>>                <methodCall bean="router" method="route"/>
>>>>>>>            </recipientList>
>>>>>>>        </route>
>>>>>>>    </camelContext>
>>>>>>>
>>>>>>> my bean, just return a string.
>>>>>>> @RecipientList
>>>>>>>    public String[] route(String body) {
>>>>>>>        return new String[]{"jbi:endpoint:
>>>>>>>
>>>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>>>> "};
>>>>>>>    }
>>>>>>>
>>>>>>> It's weird, when change config to point-to-point mode it works fine.
>>>>>>>        <route>
>>>>>>>            <from
>>>>>>>                uri="jbi:endpoint:
>>>>>>>
>>>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
>>>>>> "
>>>>>>> />
>>>>>>>            <to
>>>>>>>                uri="jbi:endpoint:
>>>>>>>
>>>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>>> "
>>>>>> />
>>>>>>>        </route>
>>>>>>>
>>>>>>> Thanks & best regards
>>>>>>>
>>>
> 


Re: Meet a problem when using recipientlist

Posted by Jackey Ding <no...@gmail.com>.
Hi,

I traced error, the real serivce provider is return the correct message to
camel, but camel not pass the message to the client.
The exception is thrown at method DefaultTypeConverter.convertTo(Class<T>
type, Exchange exchange, Object value); because it could not find suitable
conversion. Here is the paramter value:

type    Class<T> (javax.xml.transform.Source) (id=90)

exchange    JbiExchange  (id=91)
    binding    JbiBinding  (id=97)
    context    SpringCamelContext  (id=100)
    exception    null
    exchangeId    null
    fault    null
    in    JbiMessage  (id=113)
    messageExchange    InOutImpl  (id=114)
    out    JbiMessage  (id=99)
    pattern    ExchangePattern  (id=116)
    properties    ConcurrentHashMap<K,V>  (id=118)
    unitOfWork    DefaultUnitOfWork  (id=121)

value    [0]    "jbi:endpoint:
http://mm.service.integration.symphony/BillingService/BillingServicePort"


jackey

2008/11/20 Jackey Ding <no...@gmail.com>

> BTW, I find the route method was executed 6 times.
>
> Jackey
>
> 2008/11/20 Jackey Ding <no...@gmail.com>
>
> Hi,
>>
>> I tried code you pasted, here is the message.
>>
>> 2008-11-20 19:53:48 org.apache.cxf.interceptor.LoggingInInterceptor
>> logging
>> infor: Inbound Message
>> ----------------------------
>> Encoding:
>> Headers:
>> Messages:
>> Message:
>>
>> Payload: <?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="
>> http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:getBillingCount
>> xmlns:ns1="http://mm.service.integration.symphony"><arg0
>> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><entityPage
>> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><rowSize
>> xmlns="">10</rowSize></entityPage><rowSize xmlns="">10</rowSize><billingNo
>> xmlns="">KP0000000005</billingNo></arg0></ns1:getBillingCount></soap:Body></soap:Envelope>
>> --------------------------------------
>> 2008-11-20 19:53:48
>> org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose
>> info: Outbound Message
>> ---------------------------
>> Encoding: UTF-8
>> Headers:
>> Messages:
>> Payload: <soap:Envelope xmlns:soap="
>> http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:getBillingCountResponse
>> xmlns:ns1="http://mm.service.integration.symphony
>> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
>> --------------------------------------
>> 2008-11-20 19:53:48 org.apache.camel.processor.Logger log
>> error: Failed delivery for exchangeId:
>> ID-mycomputer/1988-1227182024906/0-0. On delivery attempt: 0 caught:
>> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
>> invoke method: route on router due to:
>> org.apache.camel.NoTypeConversionAvailableException: No type converter
>> available to convert from type: class [Ljava.lang.String; to the required
>> type: javax.xml.transform.Source with value [Ljava.lang.String;@e8709d
>> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
>> invoke method: route on router due to:
>> org.apache.camel.NoTypeConversionAvailableException: No type converter
>> available to convert from type: class [Ljava.lang.String; to the required
>> type: javax.xml.transform.Source with value [Ljava.lang.String;@e8709d
>>     at
>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
>>     at
>> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
>>     at
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
>>     at
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
>>     at
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
>>     at
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
>>     at
>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
>>     at
>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>>     at
>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
>>     at
>> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
>>     at
>> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
>>     at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
>>     at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
>>     at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
>>     at
>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>>     at
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
>>     at
>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>>     at
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>>     at
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>     at
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>>     at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>>     at java.lang.Thread.run(Thread.java:595)
>> Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
>> converter available to convert from type: class [Ljava.lang.String; to the
>> required type: javax.xml.transform.Source with value
>> [Ljava.lang.String;@e8709d
>>     at
>> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
>>     at
>> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
>>     at
>> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
>>     at org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
>>     at
>> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
>>     at
>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
>>     ... 21 more
>> javax.xml.transform.dom.DOMSource@f2e328
>>
>> The message in red is system printout.
>>
>> BTW, I am using camel 1.5.0.
>>
>>
>> Jackey
>>
>> 2008/11/20 Claus Ibsen <cl...@gmail.com>
>>
>>> Hi Try with this
>>>
>>> >    @RecipientList
>>> >    public String[] route(Exchange exchange) {
>>> >        System.out.println(exchange.getIn().getBody());
>>> >        return new String[]{"jbi:endpoint:
>>> >
>>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>> "};
>>> >    }
>>>
>>>
>>> /Claus Ibsen
>>> Apache Camel Committer
>>> Blog: http://davsclaus.blogspot.com/
>>>
>>>
>>>
>>> On Thu, Nov 20, 2008 at 9:34 AM, Jackey Ding <no...@gmail.com>
>>> wrote:
>>> > Hi,
>>> >
>>> > Here is my bean.
>>> >
>>> > public class BillingServiceRouter{
>>> >
>>> >    @RecipientList
>>> >    public String[] route(String body) {
>>> >        System.out.println(body);
>>> >        return new String[]{"jbi:endpoint:
>>> >
>>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>> "};
>>> >    }
>>> > }
>>> >
>>> > Jackey
>>> >
>>> > 2008/11/20 Claus Ibsen <cl...@gmail.com>
>>> >
>>> >> Hi
>>> >>
>>> >> What does your bean look like?
>>> >> >                <methodCall bean="router" method="route"/>
>>> >>
>>> >> I think the issue is that the payload from servicemix is XML and Camel
>>> >> will try to find coerce the payload to the type you have defined in
>>> >> your bean.
>>> >>
>>> >> So you can change the signature to use Exchange as type then there
>>> >> shouldn't take any type conventions place.
>>> >>
>>> >>
>>> >>
>>> >> /Claus Ibsen
>>> >> Apache Camel Committer
>>> >> Blog: http://davsclaus.blogspot.com/
>>> >>
>>> >>
>>> >>
>>> >> On Thu, Nov 20, 2008 at 9:11 AM, Jackey Ding <no...@gmail.com>
>>> >> wrote:
>>> >> > Hi,
>>> >> >
>>> >> > I want to wirte a bean dynamically determine what endpoints will be
>>> >> invoked
>>> >> > when a service is called. It seems that dynamic recipientlist can
>>> meet my
>>> >> > demand. I wrote a simple method just return a string as endpoint
>>> name,
>>> >> and
>>> >> > got the error message as below:
>>> >> >
>>> >> > info: Outbound Message
>>> >> > ---------------------------
>>> >> > Encoding: UTF-8
>>> >> > Headers:
>>> >> > Messages:
>>> >> > Payload: <soap:Envelope xmlns:soap="
>>> >> > http://schemas.xmlsoap.org/soap/envelope/
>>> >> "><soap:Body><ns1:getBillingCountResponse
>>> >> > xmlns:ns1="http://mm.service.integration.symphony
>>> >> >
>>> >>
>>> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
>>> >> > --------------------------------------
>>> >> > 2008-11-20 15:36:36 org.apache.camel.processor.Logger log
>>> >> > error: Failed delivery for exchangeId:
>>> >> ID-mycomputer/3353-1227166593020/0-0.
>>> >> > On delivery attempt: 0 caught:
>>> >> > org.apache.camel.language.bean.RuntimeBeanExpressionException:
>>> Failed to
>>> >> > invoke method: route on router due to:
>>> >> > org.apache.camel.NoTypeConversionAvailableException: No type
>>> converter
>>> >> > available to convert from type: class [Ljava.lang.String; to the
>>> required
>>> >> > type: javax.xml.transform.Source with value
>>> [Ljava.lang.String;@1f3329a
>>> >> > org.apache.camel.language.bean.RuntimeBeanExpressionException:
>>> Failed to
>>> >> > invoke method: route on router due to:
>>> >> > org.apache.camel.NoTypeConversionAvailableException: No type
>>> converter
>>> >> > available to convert from type: class [Ljava.lang.String; to the
>>> required
>>> >> > type: javax.xml.transform.Source with value
>>> [Ljava.lang.String;@1f3329a
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
>>> >> >    at
>>> >> >
>>> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>> >> >    at
>>> >> >
>>> >>
>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>>> >> >    at
>>> >> >
>>> >>
>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>>> >> >    at java.lang.Thread.run(Thread.java:595)
>>> >> > Caused by: org.apache.camel.NoTypeConversionAvailableException: No
>>> type
>>> >> > converter available to convert from type: class [Ljava.lang.String;
>>> to
>>> >> the
>>> >> > required type: javax.xml.transform.Source with value
>>> >> > [Ljava.lang.String;@1f3329a
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
>>> >> >    at
>>> org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
>>> >> >    at
>>> >> >
>>> >>
>>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
>>> >> >    ... 21 more
>>> >> >
>>> >> >
>>> >> > my configuration is
>>> >> > <bean id="router"
>>> >> >        class="symphony.integration.service.mm.BillingServiceRouter"
>>> />
>>> >> >
>>> >> >    <camelContext id="camelContext" useJmx="true"
>>> >> >        xmlns="http://activemq.apache.org/camel/schema/spring">
>>> >> >        <route>
>>> >> >            <from
>>> >> >                uri="jbi:endpoint:
>>> >> >
>>> >>
>>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
>>> >> "
>>> >> > />
>>> >> >            <recipientList>
>>> >> >                <methodCall bean="router" method="route"/>
>>> >> >            </recipientList>
>>> >> >        </route>
>>> >> >    </camelContext>
>>> >> >
>>> >> > my bean, just return a string.
>>> >> > @RecipientList
>>> >> >    public String[] route(String body) {
>>> >> >        return new String[]{"jbi:endpoint:
>>> >> >
>>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>> >> "};
>>> >> >    }
>>> >> >
>>> >> > It's weird, when change config to point-to-point mode it works fine.
>>> >> >        <route>
>>> >> >            <from
>>> >> >                uri="jbi:endpoint:
>>> >> >
>>> >>
>>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
>>> >> "
>>> >> > />
>>> >> >            <to
>>> >> >                uri="jbi:endpoint:
>>> >> >
>>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>>> "
>>> >> />
>>> >> >        </route>
>>> >> >
>>> >> > Thanks & best regards
>>> >> >
>>> >>
>>> >
>>>
>>
>>
>

Re: Meet a problem when using recipientlist

Posted by Jackey Ding <no...@gmail.com>.
BTW, I find the route method was executed 6 times.

Jackey

2008/11/20 Jackey Ding <no...@gmail.com>

> Hi,
>
> I tried code you pasted, here is the message.
>
> 2008-11-20 19:53:48 org.apache.cxf.interceptor.LoggingInInterceptor logging
> infor: Inbound Message
> ----------------------------
> Encoding:
> Headers:
> Messages:
> Message:
>
> Payload: <?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="
> http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:getBillingCount
> xmlns:ns1="http://mm.service.integration.symphony"><arg0
> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><entityPage
> xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><rowSize
> xmlns="">10</rowSize></entityPage><rowSize xmlns="">10</rowSize><billingNo
> xmlns="">KP0000000005</billingNo></arg0></ns1:getBillingCount></soap:Body></soap:Envelope>
> --------------------------------------
> 2008-11-20 19:53:48
> org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose
> info: Outbound Message
> ---------------------------
> Encoding: UTF-8
> Headers:
> Messages:
> Payload: <soap:Envelope xmlns:soap="
> http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:getBillingCountResponse
> xmlns:ns1="http://mm.service.integration.symphony
> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
> --------------------------------------
> 2008-11-20 19:53:48 org.apache.camel.processor.Logger log
> error: Failed delivery for exchangeId:
> ID-mycomputer/1988-1227182024906/0-0. On delivery attempt: 0 caught:
> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
> invoke method: route on router due to:
> org.apache.camel.NoTypeConversionAvailableException: No type converter
> available to convert from type: class [Ljava.lang.String; to the required
> type: javax.xml.transform.Source with value [Ljava.lang.String;@e8709d
> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
> invoke method: route on router due to:
> org.apache.camel.NoTypeConversionAvailableException: No type converter
> available to convert from type: class [Ljava.lang.String; to the required
> type: javax.xml.transform.Source with value [Ljava.lang.String;@e8709d
>     at
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
>     at
> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
>     at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
>     at
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
>     at
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
>     at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
>     at
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
>     at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>     at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
>     at
> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
>     at
> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
>     at
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
>     at
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
>     at
> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
>     at
> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>     at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
>     at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>     at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>     at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>     at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>     at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>     at java.lang.Thread.run(Thread.java:595)
> Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
> converter available to convert from type: class [Ljava.lang.String; to the
> required type: javax.xml.transform.Source with value
> [Ljava.lang.String;@e8709d
>     at
> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
>     at
> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
>     at
> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
>     at org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
>     at
> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
>     at
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
>     ... 21 more
> javax.xml.transform.dom.DOMSource@f2e328
>
> The message in red is system printout.
>
> BTW, I am using camel 1.5.0.
>
>
> Jackey
>
> 2008/11/20 Claus Ibsen <cl...@gmail.com>
>
>> Hi Try with this
>>
>> >    @RecipientList
>> >    public String[] route(Exchange exchange) {
>> >        System.out.println(exchange.getIn().getBody());
>> >        return new String[]{"jbi:endpoint:
>> >
>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>> "};
>> >    }
>>
>>
>> /Claus Ibsen
>> Apache Camel Committer
>> Blog: http://davsclaus.blogspot.com/
>>
>>
>>
>> On Thu, Nov 20, 2008 at 9:34 AM, Jackey Ding <no...@gmail.com>
>> wrote:
>> > Hi,
>> >
>> > Here is my bean.
>> >
>> > public class BillingServiceRouter{
>> >
>> >    @RecipientList
>> >    public String[] route(String body) {
>> >        System.out.println(body);
>> >        return new String[]{"jbi:endpoint:
>> >
>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>> "};
>> >    }
>> > }
>> >
>> > Jackey
>> >
>> > 2008/11/20 Claus Ibsen <cl...@gmail.com>
>> >
>> >> Hi
>> >>
>> >> What does your bean look like?
>> >> >                <methodCall bean="router" method="route"/>
>> >>
>> >> I think the issue is that the payload from servicemix is XML and Camel
>> >> will try to find coerce the payload to the type you have defined in
>> >> your bean.
>> >>
>> >> So you can change the signature to use Exchange as type then there
>> >> shouldn't take any type conventions place.
>> >>
>> >>
>> >>
>> >> /Claus Ibsen
>> >> Apache Camel Committer
>> >> Blog: http://davsclaus.blogspot.com/
>> >>
>> >>
>> >>
>> >> On Thu, Nov 20, 2008 at 9:11 AM, Jackey Ding <no...@gmail.com>
>> >> wrote:
>> >> > Hi,
>> >> >
>> >> > I want to wirte a bean dynamically determine what endpoints will be
>> >> invoked
>> >> > when a service is called. It seems that dynamic recipientlist can
>> meet my
>> >> > demand. I wrote a simple method just return a string as endpoint
>> name,
>> >> and
>> >> > got the error message as below:
>> >> >
>> >> > info: Outbound Message
>> >> > ---------------------------
>> >> > Encoding: UTF-8
>> >> > Headers:
>> >> > Messages:
>> >> > Payload: <soap:Envelope xmlns:soap="
>> >> > http://schemas.xmlsoap.org/soap/envelope/
>> >> "><soap:Body><ns1:getBillingCountResponse
>> >> > xmlns:ns1="http://mm.service.integration.symphony
>> >> >
>> >>
>> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
>> >> > --------------------------------------
>> >> > 2008-11-20 15:36:36 org.apache.camel.processor.Logger log
>> >> > error: Failed delivery for exchangeId:
>> >> ID-mycomputer/3353-1227166593020/0-0.
>> >> > On delivery attempt: 0 caught:
>> >> > org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed
>> to
>> >> > invoke method: route on router due to:
>> >> > org.apache.camel.NoTypeConversionAvailableException: No type
>> converter
>> >> > available to convert from type: class [Ljava.lang.String; to the
>> required
>> >> > type: javax.xml.transform.Source with value
>> [Ljava.lang.String;@1f3329a
>> >> > org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed
>> to
>> >> > invoke method: route on router due to:
>> >> > org.apache.camel.NoTypeConversionAvailableException: No type
>> converter
>> >> > available to convert from type: class [Ljava.lang.String; to the
>> required
>> >> > type: javax.xml.transform.Source with value
>> [Ljava.lang.String;@1f3329a
>> >> >    at
>> >> >
>> >>
>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
>> >> >    at
>> >> >
>> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
>> >> >    at
>> >> >
>> >>
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
>> >> >    at
>> >> >
>> >>
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
>> >> >    at
>> >> >
>> >>
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
>> >> >    at
>> >> >
>> >>
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
>> >> >    at
>> >> >
>> >>
>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
>> >> >    at
>> >> >
>> >>
>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>> >> >    at
>> >> >
>> >>
>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
>> >> >    at
>> >> >
>> >>
>> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
>> >> >    at
>> >> >
>> >>
>> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
>> >> >    at
>> >> >
>> >>
>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
>> >> >    at
>> >> >
>> >>
>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
>> >> >    at
>> >> >
>> >>
>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
>> >> >    at
>> >> >
>> >>
>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>> >> >    at
>> >> >
>> >>
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
>> >> >    at
>> >> >
>> >>
>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>> >> >    at
>> >> >
>> >>
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>> >> >    at
>> >> >
>> >>
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>> >> >    at
>> >> >
>> >>
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>> >> >    at
>> >> >
>> >>
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>> >> >    at java.lang.Thread.run(Thread.java:595)
>> >> > Caused by: org.apache.camel.NoTypeConversionAvailableException: No
>> type
>> >> > converter available to convert from type: class [Ljava.lang.String;
>> to
>> >> the
>> >> > required type: javax.xml.transform.Source with value
>> >> > [Ljava.lang.String;@1f3329a
>> >> >    at
>> >> >
>> >>
>> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
>> >> >    at
>> >> >
>> >>
>> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
>> >> >    at
>> >> >
>> >>
>> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
>> >> >    at
>> org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
>> >> >    at
>> >> >
>> >>
>> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
>> >> >    at
>> >> >
>> >>
>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
>> >> >    ... 21 more
>> >> >
>> >> >
>> >> > my configuration is
>> >> > <bean id="router"
>> >> >        class="symphony.integration.service.mm.BillingServiceRouter"
>> />
>> >> >
>> >> >    <camelContext id="camelContext" useJmx="true"
>> >> >        xmlns="http://activemq.apache.org/camel/schema/spring">
>> >> >        <route>
>> >> >            <from
>> >> >                uri="jbi:endpoint:
>> >> >
>> >>
>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
>> >> "
>> >> > />
>> >> >            <recipientList>
>> >> >                <methodCall bean="router" method="route"/>
>> >> >            </recipientList>
>> >> >        </route>
>> >> >    </camelContext>
>> >> >
>> >> > my bean, just return a string.
>> >> > @RecipientList
>> >> >    public String[] route(String body) {
>> >> >        return new String[]{"jbi:endpoint:
>> >> >
>> http://mm.service.integration.symphony/BillingService/BillingServicePort
>> >> "};
>> >> >    }
>> >> >
>> >> > It's weird, when change config to point-to-point mode it works fine.
>> >> >        <route>
>> >> >            <from
>> >> >                uri="jbi:endpoint:
>> >> >
>> >>
>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
>> >> "
>> >> > />
>> >> >            <to
>> >> >                uri="jbi:endpoint:
>> >> >
>> http://mm.service.integration.symphony/BillingService/BillingServicePort"
>> >> />
>> >> >        </route>
>> >> >
>> >> > Thanks & best regards
>> >> >
>> >>
>> >
>>
>
>

Re: Meet a problem when using recipientlist

Posted by Jackey Ding <no...@gmail.com>.
Hi,

I tried code you pasted, here is the message.

2008-11-20 19:53:48 org.apache.cxf.interceptor.LoggingInInterceptor logging
infor: Inbound Message
----------------------------
Encoding:
Headers:
Messages:
Message:

Payload: <?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="
http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:getBillingCount
xmlns:ns1="http://mm.service.integration.symphony"><arg0
xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><entityPage
xmlns=""><beginRowIndex xmlns="">0</beginRowIndex><rowSize
xmlns="">10</rowSize></entityPage><rowSize xmlns="">10</rowSize><billingNo
xmlns="">KP0000000005</billingNo></arg0></ns1:getBillingCount></soap:Body></soap:Envelope>
--------------------------------------
2008-11-20 19:53:48
org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose
info: Outbound Message
---------------------------
Encoding: UTF-8
Headers:
Messages:
Payload: <soap:Envelope xmlns:soap="
http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:getBillingCountResponse
xmlns:ns1="http://mm.service.integration.symphony
"><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
--------------------------------------
2008-11-20 19:53:48 org.apache.camel.processor.Logger log
error: Failed delivery for exchangeId: ID-mycomputer/1988-1227182024906/0-0.
On delivery attempt: 0 caught:
org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
invoke method: route on router due to:
org.apache.camel.NoTypeConversionAvailableException: No type converter
available to convert from type: class [Ljava.lang.String; to the required
type: javax.xml.transform.Source with value [Ljava.lang.String;@e8709d
org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
invoke method: route on router due to:
org.apache.camel.NoTypeConversionAvailableException: No type converter
available to convert from type: class [Ljava.lang.String; to the required
type: javax.xml.transform.Source with value [Ljava.lang.String;@e8709d
    at
org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
    at
org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
    at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
    at
org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
    at
org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
    at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
    at
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
    at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
    at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
    at
org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
    at
org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
    at
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
    at
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
    at
org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
    at
org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
    at
org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
    at
org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
    at
org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
    at
org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
    at java.lang.Thread.run(Thread.java:595)
Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
converter available to convert from type: class [Ljava.lang.String; to the
required type: javax.xml.transform.Source with value
[Ljava.lang.String;@e8709d
    at
org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
    at
org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
    at
org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
    at org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
    at
org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
    at
org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
    ... 21 more
javax.xml.transform.dom.DOMSource@f2e328

The message in red is system printout.

BTW, I am using camel 1.5.0.

Jackey

2008/11/20 Claus Ibsen <cl...@gmail.com>

> Hi Try with this
>
> >    @RecipientList
> >    public String[] route(Exchange exchange) {
> >        System.out.println(exchange.getIn().getBody());
> >        return new String[]{"jbi:endpoint:
> > http://mm.service.integration.symphony/BillingService/BillingServicePort
> "};
> >    }
>
>
> /Claus Ibsen
> Apache Camel Committer
> Blog: http://davsclaus.blogspot.com/
>
>
>
> On Thu, Nov 20, 2008 at 9:34 AM, Jackey Ding <no...@gmail.com>
> wrote:
> > Hi,
> >
> > Here is my bean.
> >
> > public class BillingServiceRouter{
> >
> >    @RecipientList
> >    public String[] route(String body) {
> >        System.out.println(body);
> >        return new String[]{"jbi:endpoint:
> > http://mm.service.integration.symphony/BillingService/BillingServicePort
> "};
> >    }
> > }
> >
> > Jackey
> >
> > 2008/11/20 Claus Ibsen <cl...@gmail.com>
> >
> >> Hi
> >>
> >> What does your bean look like?
> >> >                <methodCall bean="router" method="route"/>
> >>
> >> I think the issue is that the payload from servicemix is XML and Camel
> >> will try to find coerce the payload to the type you have defined in
> >> your bean.
> >>
> >> So you can change the signature to use Exchange as type then there
> >> shouldn't take any type conventions place.
> >>
> >>
> >>
> >> /Claus Ibsen
> >> Apache Camel Committer
> >> Blog: http://davsclaus.blogspot.com/
> >>
> >>
> >>
> >> On Thu, Nov 20, 2008 at 9:11 AM, Jackey Ding <no...@gmail.com>
> >> wrote:
> >> > Hi,
> >> >
> >> > I want to wirte a bean dynamically determine what endpoints will be
> >> invoked
> >> > when a service is called. It seems that dynamic recipientlist can meet
> my
> >> > demand. I wrote a simple method just return a string as endpoint name,
> >> and
> >> > got the error message as below:
> >> >
> >> > info: Outbound Message
> >> > ---------------------------
> >> > Encoding: UTF-8
> >> > Headers:
> >> > Messages:
> >> > Payload: <soap:Envelope xmlns:soap="
> >> > http://schemas.xmlsoap.org/soap/envelope/
> >> "><soap:Body><ns1:getBillingCountResponse
> >> > xmlns:ns1="http://mm.service.integration.symphony
> >> >
> >>
> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
> >> > --------------------------------------
> >> > 2008-11-20 15:36:36 org.apache.camel.processor.Logger log
> >> > error: Failed delivery for exchangeId:
> >> ID-mycomputer/3353-1227166593020/0-0.
> >> > On delivery attempt: 0 caught:
> >> > org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed
> to
> >> > invoke method: route on router due to:
> >> > org.apache.camel.NoTypeConversionAvailableException: No type converter
> >> > available to convert from type: class [Ljava.lang.String; to the
> required
> >> > type: javax.xml.transform.Source with value
> [Ljava.lang.String;@1f3329a
> >> > org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed
> to
> >> > invoke method: route on router due to:
> >> > org.apache.camel.NoTypeConversionAvailableException: No type converter
> >> > available to convert from type: class [Ljava.lang.String; to the
> required
> >> > type: javax.xml.transform.Source with value
> [Ljava.lang.String;@1f3329a
> >> >    at
> >> >
> >>
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
> >> >    at
> >> >
> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
> >> >    at
> >> >
> >>
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
> >> >    at
> >> >
> >>
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
> >> >    at
> >> >
> >>
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
> >> >    at
> >> >
> >>
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
> >> >    at
> >> >
> >>
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
> >> >    at
> >> >
> >>
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
> >> >    at
> >> >
> >>
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
> >> >    at
> >> >
> >>
> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
> >> >    at
> >> >
> >>
> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
> >> >    at
> >> >
> >>
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
> >> >    at
> >> >
> >>
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
> >> >    at
> >> >
> >>
> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
> >> >    at
> >> >
> >>
> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
> >> >    at
> >> >
> >>
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
> >> >    at
> >> >
> >>
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
> >> >    at
> >> >
> >>
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
> >> >    at
> >> >
> >>
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
> >> >    at
> >> >
> >>
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> >> >    at
> >> >
> >>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> >> >    at java.lang.Thread.run(Thread.java:595)
> >> > Caused by: org.apache.camel.NoTypeConversionAvailableException: No
> type
> >> > converter available to convert from type: class [Ljava.lang.String; to
> >> the
> >> > required type: javax.xml.transform.Source with value
> >> > [Ljava.lang.String;@1f3329a
> >> >    at
> >> >
> >>
> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
> >> >    at
> >> >
> >>
> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
> >> >    at
> >> >
> >>
> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
> >> >    at
> org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
> >> >    at
> >> >
> >>
> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
> >> >    at
> >> >
> >>
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
> >> >    ... 21 more
> >> >
> >> >
> >> > my configuration is
> >> > <bean id="router"
> >> >        class="symphony.integration.service.mm.BillingServiceRouter" />
> >> >
> >> >    <camelContext id="camelContext" useJmx="true"
> >> >        xmlns="http://activemq.apache.org/camel/schema/spring">
> >> >        <route>
> >> >            <from
> >> >                uri="jbi:endpoint:
> >> >
> >>
> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
> >> "
> >> > />
> >> >            <recipientList>
> >> >                <methodCall bean="router" method="route"/>
> >> >            </recipientList>
> >> >        </route>
> >> >    </camelContext>
> >> >
> >> > my bean, just return a string.
> >> > @RecipientList
> >> >    public String[] route(String body) {
> >> >        return new String[]{"jbi:endpoint:
> >> >
> http://mm.service.integration.symphony/BillingService/BillingServicePort
> >> "};
> >> >    }
> >> >
> >> > It's weird, when change config to point-to-point mode it works fine.
> >> >        <route>
> >> >            <from
> >> >                uri="jbi:endpoint:
> >> >
> >>
> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
> >> "
> >> > />
> >> >            <to
> >> >                uri="jbi:endpoint:
> >> >
> http://mm.service.integration.symphony/BillingService/BillingServicePort"
> >> />
> >> >        </route>
> >> >
> >> > Thanks & best regards
> >> >
> >>
> >
>

Re: Meet a problem when using recipientlist

Posted by Claus Ibsen <cl...@gmail.com>.
Hi Try with this

>    @RecipientList
>    public String[] route(Exchange exchange) {
>        System.out.println(exchange.getIn().getBody());
>        return new String[]{"jbi:endpoint:
> http://mm.service.integration.symphony/BillingService/BillingServicePort"};
>    }


/Claus Ibsen
Apache Camel Committer
Blog: http://davsclaus.blogspot.com/



On Thu, Nov 20, 2008 at 9:34 AM, Jackey Ding <no...@gmail.com> wrote:
> Hi,
>
> Here is my bean.
>
> public class BillingServiceRouter{
>
>    @RecipientList
>    public String[] route(String body) {
>        System.out.println(body);
>        return new String[]{"jbi:endpoint:
> http://mm.service.integration.symphony/BillingService/BillingServicePort"};
>    }
> }
>
> Jackey
>
> 2008/11/20 Claus Ibsen <cl...@gmail.com>
>
>> Hi
>>
>> What does your bean look like?
>> >                <methodCall bean="router" method="route"/>
>>
>> I think the issue is that the payload from servicemix is XML and Camel
>> will try to find coerce the payload to the type you have defined in
>> your bean.
>>
>> So you can change the signature to use Exchange as type then there
>> shouldn't take any type conventions place.
>>
>>
>>
>> /Claus Ibsen
>> Apache Camel Committer
>> Blog: http://davsclaus.blogspot.com/
>>
>>
>>
>> On Thu, Nov 20, 2008 at 9:11 AM, Jackey Ding <no...@gmail.com>
>> wrote:
>> > Hi,
>> >
>> > I want to wirte a bean dynamically determine what endpoints will be
>> invoked
>> > when a service is called. It seems that dynamic recipientlist can meet my
>> > demand. I wrote a simple method just return a string as endpoint name,
>> and
>> > got the error message as below:
>> >
>> > info: Outbound Message
>> > ---------------------------
>> > Encoding: UTF-8
>> > Headers:
>> > Messages:
>> > Payload: <soap:Envelope xmlns:soap="
>> > http://schemas.xmlsoap.org/soap/envelope/
>> "><soap:Body><ns1:getBillingCountResponse
>> > xmlns:ns1="http://mm.service.integration.symphony
>> >
>> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
>> > --------------------------------------
>> > 2008-11-20 15:36:36 org.apache.camel.processor.Logger log
>> > error: Failed delivery for exchangeId:
>> ID-mycomputer/3353-1227166593020/0-0.
>> > On delivery attempt: 0 caught:
>> > org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
>> > invoke method: route on router due to:
>> > org.apache.camel.NoTypeConversionAvailableException: No type converter
>> > available to convert from type: class [Ljava.lang.String; to the required
>> > type: javax.xml.transform.Source with value [Ljava.lang.String;@1f3329a
>> > org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
>> > invoke method: route on router due to:
>> > org.apache.camel.NoTypeConversionAvailableException: No type converter
>> > available to convert from type: class [Ljava.lang.String; to the required
>> > type: javax.xml.transform.Source with value [Ljava.lang.String;@1f3329a
>> >    at
>> >
>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
>> >    at
>> > org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
>> >    at
>> >
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
>> >    at
>> >
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
>> >    at
>> >
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
>> >    at
>> >
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
>> >    at
>> >
>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
>> >    at
>> >
>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>> >    at
>> >
>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
>> >    at
>> >
>> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
>> >    at
>> >
>> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
>> >    at
>> >
>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
>> >    at
>> >
>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
>> >    at
>> >
>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
>> >    at
>> >
>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>> >    at
>> >
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
>> >    at
>> >
>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>> >    at
>> >
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>> >    at
>> >
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>> >    at
>> >
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>> >    at
>> >
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>> >    at java.lang.Thread.run(Thread.java:595)
>> > Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
>> > converter available to convert from type: class [Ljava.lang.String; to
>> the
>> > required type: javax.xml.transform.Source with value
>> > [Ljava.lang.String;@1f3329a
>> >    at
>> >
>> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
>> >    at
>> >
>> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
>> >    at
>> >
>> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
>> >    at org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
>> >    at
>> >
>> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
>> >    at
>> >
>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
>> >    ... 21 more
>> >
>> >
>> > my configuration is
>> > <bean id="router"
>> >        class="symphony.integration.service.mm.BillingServiceRouter" />
>> >
>> >    <camelContext id="camelContext" useJmx="true"
>> >        xmlns="http://activemq.apache.org/camel/schema/spring">
>> >        <route>
>> >            <from
>> >                uri="jbi:endpoint:
>> >
>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
>> "
>> > />
>> >            <recipientList>
>> >                <methodCall bean="router" method="route"/>
>> >            </recipientList>
>> >        </route>
>> >    </camelContext>
>> >
>> > my bean, just return a string.
>> > @RecipientList
>> >    public String[] route(String body) {
>> >        return new String[]{"jbi:endpoint:
>> > http://mm.service.integration.symphony/BillingService/BillingServicePort
>> "};
>> >    }
>> >
>> > It's weird, when change config to point-to-point mode it works fine.
>> >        <route>
>> >            <from
>> >                uri="jbi:endpoint:
>> >
>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
>> "
>> > />
>> >            <to
>> >                uri="jbi:endpoint:
>> > http://mm.service.integration.symphony/BillingService/BillingServicePort"
>> />
>> >        </route>
>> >
>> > Thanks & best regards
>> >
>>
>

Re: Meet a problem when using recipientlist

Posted by Jackey Ding <no...@gmail.com>.
Hi,

Here is my bean.

public class BillingServiceRouter{

    @RecipientList
    public String[] route(String body) {
        System.out.println(body);
        return new String[]{"jbi:endpoint:
http://mm.service.integration.symphony/BillingService/BillingServicePort"};
    }
}

Jackey

2008/11/20 Claus Ibsen <cl...@gmail.com>

> Hi
>
> What does your bean look like?
> >                <methodCall bean="router" method="route"/>
>
> I think the issue is that the payload from servicemix is XML and Camel
> will try to find coerce the payload to the type you have defined in
> your bean.
>
> So you can change the signature to use Exchange as type then there
> shouldn't take any type conventions place.
>
>
>
> /Claus Ibsen
> Apache Camel Committer
> Blog: http://davsclaus.blogspot.com/
>
>
>
> On Thu, Nov 20, 2008 at 9:11 AM, Jackey Ding <no...@gmail.com>
> wrote:
> > Hi,
> >
> > I want to wirte a bean dynamically determine what endpoints will be
> invoked
> > when a service is called. It seems that dynamic recipientlist can meet my
> > demand. I wrote a simple method just return a string as endpoint name,
> and
> > got the error message as below:
> >
> > info: Outbound Message
> > ---------------------------
> > Encoding: UTF-8
> > Headers:
> > Messages:
> > Payload: <soap:Envelope xmlns:soap="
> > http://schemas.xmlsoap.org/soap/envelope/
> "><soap:Body><ns1:getBillingCountResponse
> > xmlns:ns1="http://mm.service.integration.symphony
> >
> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
> > --------------------------------------
> > 2008-11-20 15:36:36 org.apache.camel.processor.Logger log
> > error: Failed delivery for exchangeId:
> ID-mycomputer/3353-1227166593020/0-0.
> > On delivery attempt: 0 caught:
> > org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
> > invoke method: route on router due to:
> > org.apache.camel.NoTypeConversionAvailableException: No type converter
> > available to convert from type: class [Ljava.lang.String; to the required
> > type: javax.xml.transform.Source with value [Ljava.lang.String;@1f3329a
> > org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
> > invoke method: route on router due to:
> > org.apache.camel.NoTypeConversionAvailableException: No type converter
> > available to convert from type: class [Ljava.lang.String; to the required
> > type: javax.xml.transform.Source with value [Ljava.lang.String;@1f3329a
> >    at
> >
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
> >    at
> > org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
> >    at
> >
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
> >    at
> >
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
> >    at
> >
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
> >    at
> >
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
> >    at
> >
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
> >    at
> >
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
> >    at
> >
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
> >    at
> >
> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
> >    at
> >
> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
> >    at
> >
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
> >    at
> >
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
> >    at
> >
> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
> >    at
> >
> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
> >    at
> >
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
> >    at
> >
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
> >    at
> >
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
> >    at
> >
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
> >    at
> >
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> >    at
> >
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> >    at java.lang.Thread.run(Thread.java:595)
> > Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
> > converter available to convert from type: class [Ljava.lang.String; to
> the
> > required type: javax.xml.transform.Source with value
> > [Ljava.lang.String;@1f3329a
> >    at
> >
> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
> >    at
> >
> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
> >    at
> >
> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
> >    at org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
> >    at
> >
> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
> >    at
> >
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
> >    ... 21 more
> >
> >
> > my configuration is
> > <bean id="router"
> >        class="symphony.integration.service.mm.BillingServiceRouter" />
> >
> >    <camelContext id="camelContext" useJmx="true"
> >        xmlns="http://activemq.apache.org/camel/schema/spring">
> >        <route>
> >            <from
> >                uri="jbi:endpoint:
> >
> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
> "
> > />
> >            <recipientList>
> >                <methodCall bean="router" method="route"/>
> >            </recipientList>
> >        </route>
> >    </camelContext>
> >
> > my bean, just return a string.
> > @RecipientList
> >    public String[] route(String body) {
> >        return new String[]{"jbi:endpoint:
> > http://mm.service.integration.symphony/BillingService/BillingServicePort
> "};
> >    }
> >
> > It's weird, when change config to point-to-point mode it works fine.
> >        <route>
> >            <from
> >                uri="jbi:endpoint:
> >
> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort
> "
> > />
> >            <to
> >                uri="jbi:endpoint:
> > http://mm.service.integration.symphony/BillingService/BillingServicePort"
> />
> >        </route>
> >
> > Thanks & best regards
> >
>

Re: Meet a problem when using recipientlist

Posted by Claus Ibsen <cl...@gmail.com>.
BTW: What version of Camel are you using? I think I recall that such
an issue is fixed in Camel 1.5.0 or 1.5.1

/Claus Ibsen
Apache Camel Committer
Blog: http://davsclaus.blogspot.com/



On Thu, Nov 20, 2008 at 9:24 AM, Claus Ibsen <cl...@gmail.com> wrote:
> Hi
>
> What does your bean look like?
>>                <methodCall bean="router" method="route"/>
>
> I think the issue is that the payload from servicemix is XML and Camel
> will try to find coerce the payload to the type you have defined in
> your bean.
>
> So you can change the signature to use Exchange as type then there
> shouldn't take any type conventions place.
>
>
>
> /Claus Ibsen
> Apache Camel Committer
> Blog: http://davsclaus.blogspot.com/
>
>
>
> On Thu, Nov 20, 2008 at 9:11 AM, Jackey Ding <no...@gmail.com> wrote:
>> Hi,
>>
>> I want to wirte a bean dynamically determine what endpoints will be invoked
>> when a service is called. It seems that dynamic recipientlist can meet my
>> demand. I wrote a simple method just return a string as endpoint name, and
>> got the error message as below:
>>
>> info: Outbound Message
>> ---------------------------
>> Encoding: UTF-8
>> Headers:
>> Messages:
>> Payload: <soap:Envelope xmlns:soap="
>> http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:getBillingCountResponse
>> xmlns:ns1="http://mm.service.integration.symphony
>> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
>> --------------------------------------
>> 2008-11-20 15:36:36 org.apache.camel.processor.Logger log
>> error: Failed delivery for exchangeId: ID-mycomputer/3353-1227166593020/0-0.
>> On delivery attempt: 0 caught:
>> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
>> invoke method: route on router due to:
>> org.apache.camel.NoTypeConversionAvailableException: No type converter
>> available to convert from type: class [Ljava.lang.String; to the required
>> type: javax.xml.transform.Source with value [Ljava.lang.String;@1f3329a
>> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
>> invoke method: route on router due to:
>> org.apache.camel.NoTypeConversionAvailableException: No type converter
>> available to convert from type: class [Ljava.lang.String; to the required
>> type: javax.xml.transform.Source with value [Ljava.lang.String;@1f3329a
>>    at
>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
>>    at
>> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
>>    at
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
>>    at
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
>>    at
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
>>    at
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
>>    at
>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
>>    at
>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>>    at
>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
>>    at
>> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
>>    at
>> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
>>    at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
>>    at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
>>    at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
>>    at
>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>>    at
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
>>    at
>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>>    at
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>>    at
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>    at
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>>    at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>>    at java.lang.Thread.run(Thread.java:595)
>> Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
>> converter available to convert from type: class [Ljava.lang.String; to the
>> required type: javax.xml.transform.Source with value
>> [Ljava.lang.String;@1f3329a
>>    at
>> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
>>    at
>> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
>>    at
>> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
>>    at org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
>>    at
>> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
>>    at
>> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
>>    ... 21 more
>>
>>
>> my configuration is
>> <bean id="router"
>>        class="symphony.integration.service.mm.BillingServiceRouter" />
>>
>>    <camelContext id="camelContext" useJmx="true"
>>        xmlns="http://activemq.apache.org/camel/schema/spring">
>>        <route>
>>            <from
>>                uri="jbi:endpoint:
>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort"
>> />
>>            <recipientList>
>>                <methodCall bean="router" method="route"/>
>>            </recipientList>
>>        </route>
>>    </camelContext>
>>
>> my bean, just return a string.
>> @RecipientList
>>    public String[] route(String body) {
>>        return new String[]{"jbi:endpoint:
>> http://mm.service.integration.symphony/BillingService/BillingServicePort"};
>>    }
>>
>> It's weird, when change config to point-to-point mode it works fine.
>>        <route>
>>            <from
>>                uri="jbi:endpoint:
>> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort"
>> />
>>            <to
>>                uri="jbi:endpoint:
>> http://mm.service.integration.symphony/BillingService/BillingServicePort" />
>>        </route>
>>
>> Thanks & best regards
>>
>

Re: Meet a problem when using recipientlist

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

What does your bean look like?
>                <methodCall bean="router" method="route"/>

I think the issue is that the payload from servicemix is XML and Camel
will try to find coerce the payload to the type you have defined in
your bean.

So you can change the signature to use Exchange as type then there
shouldn't take any type conventions place.



/Claus Ibsen
Apache Camel Committer
Blog: http://davsclaus.blogspot.com/



On Thu, Nov 20, 2008 at 9:11 AM, Jackey Ding <no...@gmail.com> wrote:
> Hi,
>
> I want to wirte a bean dynamically determine what endpoints will be invoked
> when a service is called. It seems that dynamic recipientlist can meet my
> demand. I wrote a simple method just return a string as endpoint name, and
> got the error message as below:
>
> info: Outbound Message
> ---------------------------
> Encoding: UTF-8
> Headers:
> Messages:
> Payload: <soap:Envelope xmlns:soap="
> http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:getBillingCountResponse
> xmlns:ns1="http://mm.service.integration.symphony
> "><return>1</return></ns1:getBillingCountResponse></soap:Body></soap:Envelope>
> --------------------------------------
> 2008-11-20 15:36:36 org.apache.camel.processor.Logger log
> error: Failed delivery for exchangeId: ID-mycomputer/3353-1227166593020/0-0.
> On delivery attempt: 0 caught:
> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
> invoke method: route on router due to:
> org.apache.camel.NoTypeConversionAvailableException: No type converter
> available to convert from type: class [Ljava.lang.String; to the required
> type: javax.xml.transform.Source with value [Ljava.lang.String;@1f3329a
> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
> invoke method: route on router due to:
> org.apache.camel.NoTypeConversionAvailableException: No type converter
> available to convert from type: class [Ljava.lang.String; to the required
> type: javax.xml.transform.Source with value [Ljava.lang.String;@1f3329a
>    at
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:79)
>    at
> org.apache.camel.processor.RecipientList.process(RecipientList.java:58)
>    at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:75)
>    at
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:172)
>    at
> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:93)
>    at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:63)
>    at
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:47)
>    at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>    at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
>    at
> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:115)
>    at
> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:73)
>    at
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:600)
>    at
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:554)
>    at
> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:510)
>    at
> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>    at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:620)
>    at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>    at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>    at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>    at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>    at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>    at java.lang.Thread.run(Thread.java:595)
> Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
> converter available to convert from type: class [Ljava.lang.String; to the
> required type: javax.xml.transform.Source with value
> [Ljava.lang.String;@1f3329a
>    at
> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:117)
>    at
> org.apache.camel.util.ExchangeHelper.convertToType(ExchangeHelper.java:180)
>    at
> org.apache.servicemix.camel.JbiBinding.convertBodyToJbi(JbiBinding.java:61)
>    at org.apache.servicemix.camel.JbiMessage.setBody(JbiMessage.java:159)
>    at
> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:125)
>    at
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:76)
>    ... 21 more
>
>
> my configuration is
> <bean id="router"
>        class="symphony.integration.service.mm.BillingServiceRouter" />
>
>    <camelContext id="camelContext" useJmx="true"
>        xmlns="http://activemq.apache.org/camel/schema/spring">
>        <route>
>            <from
>                uri="jbi:endpoint:
> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort"
> />
>            <recipientList>
>                <methodCall bean="router" method="route"/>
>            </recipientList>
>        </route>
>    </camelContext>
>
> my bean, just return a string.
> @RecipientList
>    public String[] route(String body) {
>        return new String[]{"jbi:endpoint:
> http://mm.service.integration.symphony/BillingService/BillingServicePort"};
>    }
>
> It's weird, when change config to point-to-point mode it works fine.
>        <route>
>            <from
>                uri="jbi:endpoint:
> http://mm.service.integration.symphony/BillingServiceCamelRouter/BillingServicePort"
> />
>            <to
>                uri="jbi:endpoint:
> http://mm.service.integration.symphony/BillingService/BillingServicePort" />
>        </route>
>
> Thanks & best regards
>