camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jackey Ding" <novthirt...@gmail.com>
Subject Meet a problem when using recipientlist
Date Thu, 20 Nov 2008 08:11:54 GMT
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
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message