2012-01-25 3 views
0

Я взял простой пример activeemq-camel-blueprint из ServiceMix 4.4.0 и добавлен в сокет Mina TCP для чтения из ASCII-строк.Простой пример Apache Camel и Mina (Karaf) бросает CamelExchangeException: не удается написать тело

<camelContext xmlns="http://camel.apache.org/schema/blueprint"> 
    <route> 
     <from uri="mina:tcp://localhost:4001?textline=true&amp;sync=false" /> 
     <bean ref="NMEAString" method="ingest" /> 
     <to uri="activemq:queue:LOG.ME"/> 
    </route> 
    <route> 
     <from uri="activemq:queue:LOG.ME" /> 
     <to uri="log:ExampleActiveMQRouterBlueprint" /> 
    </route> 
</camelContext> 

Я выполняю пример в пределах Karaf. Все NMEAString - это печать объекта STDOUT.

Я запускаю небольшую программу, чтобы нажимать ASCII-файл на соединение сокета. Он нажимает на весь файл (~ 40) строк за несколько миллисекунд.

Я вижу распечатку STDOUT в пределах Karaf примерно через 30 секунд между линиями. Я получаю следующие исключения в моем файле servicemix.log:

Кто-нибудь знает, что означает это исключение и почему оно бросает его с таким простым примером ?

org.apache.camel.CamelException: org.apache.camel.CamelExchangeException: не удается написать тело. Exchange [Сообщение: [Тело равно null]] at org.apache.camel.component.mina.MinaConsumer $ ReceiveHandler.exceptionCaught (MinaConsumer.java:91) [186: org.apache.camel.camel-mina: 2.8.3 ] at org.apache.mina.common.support.AbstractIoFilterChain $ TailFilter.exceptionCaught (AbstractIoFilterChain.java:564) [187: org.apache.servicemix.bundles.mina: 1.1.7.5] на org.apache.mina. common.support.AbstractIoFilterChain.callNextExceptionCaught (AbstractIoFilterChain.java:345) [187: org.apache.servicemix.bundles.mina: 1.1.7.5] на org.apache.mina.common.support.AbstractIoFilterChain.access $ 1000 (AbstractIoFilterChain. java: 53) [187: org.apache.servicemix.bundles.mina: 1.1.7.5] at org.apache.mina.common.support.AbstractIoFilterChain $ EntryImpl $ 1.exceptionCaught (AbstractIoFilterChain.java:643) [187: org .apache.servicemix.bundles.mina: 1.1.7.5] at org.apache.mina.filter.executor.ExecutorFilter.processEvent (ExecutorFilter.java:224) [187: org.apache.servicemix.bundles.mina: 1.1.7.5] at org.apache.mina.filter.executor .ExecutorFilter $ ProcessEventsRunnable.run (ExecutorFilter.java:264) [187: org.apache.servicemix.bundles.mina: 1.1.7.5] по адресу java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) [: 1.6.0_29] на java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:908) [: 1.6.0_29] на java.lang.Thread.run (Thread.java:662) [: 1.6.0_29] Вызвано: org.apache.camel.CamelExchangeException: невозможно написать тело. Exchange [Сообщение: [Тело равно null]] на org.apache.camel.component.mina.MinaHelper.writeBody (MinaHelper.java:55) [186: org.apache.camel.camel-mina: 2.8.3] at org.apache.camel.component.mina.MinaConsumer $ ReceiveHandler.messageReceived (MinaConsumer.java:148) [186: org.apache.camel.camel-mina: 2.8.3] на org.apache.mina.common. support.AbstractIoFilterChain $ TailFilter.messageReceived (AbstractIoFilterChain.java:570) [187: org.apache.servicemix.bundles.mina: 1.1.7.5] на org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived (AbstractIoFilterChain.java : 299) [187: org.apache.servicemix.bundles.mina: 1.1.7.5] at org.apache.mina.common.support.AbstractIoFilterChain.access $ 1100 (AbstractIoFilterChain.java:53) [187: org.apache. servicemix.bundles.mina: 1.1.7.5] на org.apache.mina.common.support.Abstract IoFilterChain $ EntryImpl $ 1.messageReceived (AbstractIoFilterChain.java:648) [187: org.apache.servicemix.bundles.mina: 1.1.7.5] at org.apache.mina.filter.executor.ExecutorFilter.processEvent (ExecutorFilter.java: 220) [187: org.apache.servicemix.bundles.mina: 1.1.7.5] ... 4 еще

+0

Ну, имеет отношение к: – user297500

ответ

0

LS,

Просто попробовал это самостоятельно с Apache ServiceMix 4.4.0, и файл чертежа ниже отлично подходит для меня, поэтому я подозреваю, что ваш bean-компонент каким-то образом аннулирует или удаляет тело сообщения (например, вызывая getOut() на Exchange и создавая пустое сообщение или что-то в этом роде).

Не могли бы вы попытаться удалить компонент из вашего маршрута, чтобы убедиться, что это действительно является причиной проблемы? Если да, то вы можете разместить код компонента себя и мы можем помочь вам найти проблему, которая скрывается там ...

С уважением,

Герт

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> 

<camelContext xmlns="http://camel.apache.org/schema/blueprint"> 
    <route> 
    <from uri="mina:tcp://localhost:4001?textline=true&amp;sync=false" /> 
    <to uri="log:test-read-stream"/> 
    <to uri="activemq:queue:LOG.ME"/> 
    </route> 
    <route> 
    <from uri="activemq:queue:LOG.ME" /> 
    <to uri="log:ExampleActiveMQRouterBlueprint" /> 
    </route> 
</camelContext> 

</blueprint> 
Смежные вопросы