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 <[EMAIL PROTECTED]>

> BTW, I find the route method was executed 6 times.
>
> Jackey
>
> 2008/11/20 Jackey Ding <[EMAIL PROTECTED]>
>
> 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
>> [EMAIL PROTECTED]
>>
>> The message in red is system printout.
>>
>> BTW, I am using camel 1.5.0.
>>
>>
>> Jackey
>>
>> 2008/11/20 Claus Ibsen <[EMAIL PROTECTED]>
>>
>>> 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 <[EMAIL PROTECTED]>
>>> 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 <[EMAIL PROTECTED]>
>>> >
>>> >> 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 <[EMAIL PROTECTED]>
>>> >> 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
>>> >> >
>>> >>
>>> >
>>>
>>
>>
>

Reply via email to