camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Claus Ibsen" <claus.ib...@gmail.com>
Subject Re: Meet a problem when using recipientlist
Date Thu, 20 Nov 2008 08:36:31 GMT
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 <claus.ibsen@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
>> >
>>
>

Mime
View raw message