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
>>> >> >
>>> >>
>>> >
>>>
>>
>>
>