On Tue, Jan 18, 2011 at 4:54 PM, Claus Ibsen <[email protected]> wrote:
> On Tue, Jan 18, 2011 at 4:18 PM, Scott Came <[email protected]> wrote:
>> Thanks, Claus.
>>
>> I grepped my logs for AnnotationTypeConverterLoader and see a line like this:
>>
>> 16:52:10,678 | INFO  | @qtp-727842206-0 | AnnotationTypeConverterLoader    | 
>> er.AnnotationTypeConverterLoader   66 | 72 - org.apache.camel.camel-core - 
>> 2.4.0.fuse-02-00 | Found 3 packages with 0 @Converter classes to load
>>
>> Grepped for DefaultTypeConverter and see this:
>>
>> 16:52:10,680 | INFO  | @qtp-727842206-0 | DefaultTypeConverter             | 
>> l.converter.DefaultTypeConverter  397 | 72 - org.apache.camel.camel-core - 
>> 2.4.0.fuse-02-00 | Loaded 0 type converters in 0.003 seconds
>>
>> I'm guessing that's not good.  I am running the current release version of 
>> FUSE ESB (apache-servicemix-4.3.0-fuse-03-00).  I'm not sure what version of 
>> Camel is included, but I haven't done anything to update Camel outside of 
>> the stock FUSE ESB distro.  It looks from the above log message like it's 
>> Camel 2.4.0.fuse-02-00.
>>
>
> Yeah it should be fixed in FUSE ESB 4.3.1 which includes Camel
> 2.4.0-fuse-03-00 which has the fix.
>

Correction, that would be the next FUSE ESB 4.3.0 release.

I think there is a ESB 4.3.1 planned later this month/next month which
will ship with Camel 2.6 (currently in progress).


> From Camel 2.6 onwards we actually now will throw an exception on
> starting Camel if this situation happens again.
> Then it should be much easier for end user to spot something is wrong.
>
>
>
>
>> Thanks for your help.
>> --Scott
>>
>> -----Original Message-----
>> From: Claus Ibsen [mailto:[email protected]]
>> Sent: Monday, January 17, 2011 10:05 PM
>> To: [email protected]
>> Subject: Re: Large(ish) message issue (CXFBC and Camel)
>>
>> What versions of the products are you using? SMX / Camel?
>> And how do you startup the SMX container?
>>
>> I think there was a bug when using JBI with SMX 4.x that could lead to Camel 
>> not being able to load type converters on startup (race condition when using 
>> OSGi). This should be fixed in upcoming Apache SMX 4.3 release and already 
>> in the latest FUSE ESB release.
>>
>> You should see something like this at INFO level logged by Camel on startup 
>> (requires Camel 2.3 or better)
>>
>> 2011-01-18 07:05:00,519 [main           ] INFO
>> AnnotationTypeConverterLoader  - Found 3 packages with 19 @Converter classes 
>> to load
>> 2011-01-18 07:05:00,567 [main           ] INFO  DefaultTypeConverter
>>        - Loaded 150 type converters in 1.038 seconds
>>
>>
>>
>> On Tue, Jan 18, 2011 at 5:42 AM, Scott Came <[email protected]> wrote:
>>> Hi Freeman, thanks for the suggestion.
>>>
>>> I tried that and am seeing the same results.  After consulting the Camel 
>>> documentation about stream caching at 
>>> http://camel.apache.org/stream-caching.html I tried various flavors of 
>>> specifying it (e.g., specifying streamCache="true" on camelContext and 
>>> streamCaching="true" and streamCache="true" on route)...none of those 
>>> helped.
>>>
>>> I also tried removing the <to> element for the log message, and that didn't 
>>> help either.
>>>
>>> It's like in the case of both <to uri="log..."> and <to uri="file..."> the 
>>> stream from the jbi: endpoint is getting cut off after 1000-2000 bytes.  
>>> Very strange.
>>>
>>> I set the log level to DEBUG, and I get a big nested stack trace at the 
>>> expected place, with this as the last exception listed:
>>>
>>> Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected end of input
>>> block in start tag
>>>     at [row,col {unknown-source}]: [51,20]
>>>      at
>>> com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOB(StreamScanner.java:69
>>> 6)
>>>      at
>>> com.ctc.wstx.sr.StreamScanner.loadMoreFromCurrent(StreamScanner.java:1
>>> 062)
>>>      at
>>> com.ctc.wstx.sr.StreamScanner.getNextCharFromCurrent(StreamScanner.jav
>>> a:807)
>>>      at
>>> com.ctc.wstx.sr.BasicStreamReader.handleStartElem(BasicStreamReader.ja
>>> va:2892)
>>>      at
>>> com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:
>>> 2783)
>>>      at
>>> com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1048)
>>>      at
>>> org.apache.servicemix.soap.util.stax.FragmentStreamReader.next(Fragmen
>>> tStreamReader.java:68)
>>>      at
>>> org.apache.servicemix.cxfbc.interceptors.StaxJbiWrapper.next(StaxJbiWr
>>> apper.java:166)
>>>      at
>>> org.apache.servicemix.soap.util.stax.StaxSource.parse(StaxSource.java:
>>> 116)
>>>      ... 54 more
>>>
>>> Incidentally, the first exception (top of the stack) is this:
>>>
>>> org.apache.camel.InvalidPayloadException: No body available of type:
>>> java.lang.String but has value:
>>> org.apache.servicemix.soap.util.stax.StaxSource@4f6a4207 of type:
>>> org.apache.servicemix.soap.util.stax.StaxSource on: Message:
>>> org.apache.servicemix.soap.util.stax.StaxSource@4f6a4207. Caused by:
>>> No type converter available to convert from type:
>>> org.apache.servicemix.soap.util.stax.StaxSource to the required type:
>>> java.lang.String with value
>>> org.apache.servicemix.soap.util.stax.StaxSource@4f6a4207.
>>> Exchange[Message:
>>> org.apache.servicemix.soap.util.stax.StaxSource@4f6a4207]. Caused by:
>>> [org.apache.camel.NoTypeConversionAvailableException - No type
>>> converter available to convert from type:
>>> org.apache.servicemix.soap.util.stax.StaxSource to the required type:
>>> java.lang.String with value
>>> org.apache.servicemix.soap.util.stax.StaxSource@4f6a4207]
>>>      at
>>> org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.j
>>> ava:103)
>>>      at
>>> org.apache.camel.processor.ConvertBodyProcessor.process(ConvertBodyPro
>>> cessor.java:57)
>>>      at
>>> org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorT
>>> oAsyncProcessorBridge.process(AsyncProcessorTypeConverter.java:50)
>>>      at
>>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelpe
>>> r.java:70)
>>>      at
>>> org.apache.camel.processor.DelegateAsyncProcessor.processNext(Delegate
>>> AsyncProcessor.java:98)
>>>      at
>>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyn
>>> cProcessor.java:89)
>>>      at
>>> org.apache.camel.management.InstrumentationProcessor.process(Instrumen
>>> tationProcessor.java:68)
>>>      at
>>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelpe
>>> r.java:70)
>>>      at
>>> org.apache.camel.processor.DelegateAsyncProcessor.processNext(Delegate
>>> AsyncProcessor.java:98)
>>>      at
>>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyn
>>> cProcessor.java:89)
>>>      at
>>> org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceI
>>> nterceptor.java:99)
>>>      at
>>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelpe
>>> r.java:70)
>>>      at
>>> org.apache.camel.processor.DelegateAsyncProcessor.processNext(Delegate
>>> AsyncProcessor.java:98)
>>>      at
>>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyn
>>> cProcessor.java:89)
>>>      at
>>> org.apache.camel.management.InstrumentationProcessor.process(Instrumen
>>> tationProcessor.java:68)
>>>      at
>>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelpe
>>> r.java:70)
>>>      at
>>> org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(
>>> RedeliveryErrorHandler.java:290)
>>>      at
>>> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryEr
>>> rorHandler.java:202)
>>>      at
>>> org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:
>>> 256)
>>>      at
>>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelpe
>>> r.java:70)
>>>      at org.apache.camel.processor.Pipeline.process(Pipeline.java:143)
>>>      at org.apache.camel.processor.Pipeline.process(Pipeline.java:78)
>>>      at
>>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProce
>>> ssor.java:99)
>>>      at
>>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelpe
>>> r.java:70)
>>>      at
>>> org.apache.camel.processor.DelegateAsyncProcessor.processNext(Delegate
>>> AsyncProcessor.java:98)
>>>      at
>>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyn
>>> cProcessor.java:89)
>>>      at
>>> org.apache.camel.management.InstrumentationProcessor.process(Instrumen
>>> tationProcessor.java:68)
>>>      at
>>> org.apache.servicemix.camel.CamelProviderEndpoint$1.call(CamelProvider
>>> Endpoint.java:109)
>>>      at
>>> org.apache.servicemix.camel.JbiBinding.runWithCamelContextClassLoader(
>>> JbiBinding.java:116)
>>>      at
>>> org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProvider
>>> Exchange(CamelProviderEndpoint.java:107)
>>>      at
>>> org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProvide
>>> rEndpoint.java:85)
>>>      at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLif
>>> eCycle.java:651)
>>>      at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncB
>>> aseLifeCycle.java:606)
>>>      at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchangeInTx(As
>>> yncBaseLifeCycle.java:501)
>>>      at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle$2.run(AsyncBaseLifeCyc
>>> le.java:370)
>>>      at
>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecu
>>> tor.java:886)
>>>      at
>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.
>>> java:908)
>>>      at java.lang.Thread.run(Thread.java:680)
>>>
>>> Any other ideas?
>>>
>>> Thanks.
>>> --Scott
>>>
>>> -----Original Message-----
>>> From: Freeman Fang [mailto:[email protected]]
>>> Sent: Monday, January 17, 2011 7:08 PM
>>> To: [email protected]
>>> Subject: Re: Large(ish) message issue (CXFBC and Camel)
>>>
>>>
>>> On 2011-1-18, at 上午10:41, Scott Came wrote:
>>>
>>>> I am seeing some strange behavior when using Camel to route from a
>>>> JBI endpoint (cxfbc) to a file using the Camel file component.
>>>>
>>>> Here is the scenario.
>>>>
>>>> I have created a JBI CXFBC service unit with WSDL.  I have also
>>>> created a Camel service unit, with a very simple route:  it routes
>>>> from the CXFBC endpoint to a file with a route that looks like this:
>>>>
>>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/
>>>> spring">
>>>>    <route>
>>>>      <from
>>>> uri="jbi:endpoint:http://it.ojp.gov/global/services/tsc-encounter-rou
>>>> t er/RouterService/RouterServiceEndpoint
>>>> "/>
>>>>      <to uri="log:gov.ojp.it.TSCEncounterRouterLog?showBody=false"/>
>>>>      <convertBodyTo type="java.lang.String"/>
>>>>      <to uri="file:/Users/scott/Desktop/router-output"/>
>>>>    </route>
>>>>  </camelContext>
>>>>
>>>> I bundle these to SUs into an SA and deploy.  Everything deploys fine.
>>>>
>>>> I then use SOAPUI to send test messages.
>>>>
>>>> If I send a very small message...say, no bigger than a couple hundred
>>>> bytes, to the RouterServiceEndpoint, everything works fine.
>>>> I see the log message in the log, and the file gets written to my
>>>> router-output directory.
>>>>
>>>> However, when I increase the message size beyond a certain point (not
>>>> sure exactly where it is...somewhere around 2000-3000 bytes) I start
>>>> getting messages like:
>>>>
>>>> Unexpected end of input block in start tag at [row,col {unknown-
>>>> source}]: [51,20]
>>>>
>>>> The underlying exception seems to be a
>>>> com.ctc.wstx.exc.WstcEOFException.
>>>>
>>>> If I try subsequent invocations of the service, I get a similar
>>>> error, though the referenced place in the stream is often a little
>>>> different (e.g., [51, 25] or [55, 10]).  So it seems like the parser
>>>> is getting to a different place in the stream each time before it fails.
>>>>
>>>> I have put TCPMon in the middle and verified that the entire message
>>>> is getting to the server, although the server side is not closing the
>>>> connection when the exception occurs.
>>>>
>>>> I am 100% sure the content being sent is valid XML.
>>>>
>>>> Interestingly, if I take out the <to> part of the route to the file
>>>> component, everything works fine...I get the simple log message (note
>>>> that I am not logging the body content), and the connection closes in
>>>> TCPMon.  However, if I switch to logging the body content (i.e., take
>>>> off the ?showBody=false option), I get similar errors as when I try
>>>> to write out the file.
>>> This looks like a stream already get consumed issue for me, how about
>>> you just
>>>
>>> How about you just change your router like <camelContext id="camel"
>>> xmlns="http://camel.apache.org/schema/spring";>
>>>    <route  streamCache="true" >
>>>      <from
>>> uri="jbi:endpoint:http://it.ojp.gov/global/services/tsc-encounter-rout
>>> er/RouterService/RouterServiceEndpoint
>>> "/>
>>>      <to uri="log:gov.ojp.it.TSCEncounterRouterLog?showBody=false"/>
>>>      <convertBodyTo type="java.lang.String"/>
>>>      <to uri="file:/Users/scott/Desktop/router-output"/>
>>>    </route>
>>>  </camelContext>
>>>
>>> Freeman
>>>
>>>> I have tried taking out the <convertBodyTo...> element, but that
>>>> results in a different exception...something about no appropriate
>>>> converter being found.
>>>>
>>>> It would be somewhat difficult for me to attach a full example, as
>>>> the content of the large message is somewhat sensitive/proprietary,
>>>> but I could do that if I absolutely needed to.  I'm hoping there is
>>>> some simple configuration setting I need to tweak to handle bigger
>>>> messages (though a 2K or 3K message is by no means large...)
>>>>
>>>> Thanks for any help you can offer.
>>>>
>>>> --Scott
>>>
>>>
>>> --
>>> Freeman Fang
>>>
>>> ------------------------
>>>
>>> FuseSource: http://fusesource.com
>>> blog: http://freemanfang.blogspot.com
>>> twitter: http://twitter.com/freemanfang Apache
>>> Servicemix:http://servicemix.apache.org
>>> Apache Cxf: http://cxf.apache.org
>>> Apache Karaf: http://karaf.apache.org
>>> Apache Felix: http://felix.apache.org
>>>
>>>
>>
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> FuseSource
>> Email: [email protected]
>> Web: http://fusesource.com
>> Twitter: davsclaus
>> Blog: http://davsclaus.blogspot.com/
>> Author of Camel in Action: http://www.manning.com/ibsen/
>>
>>
>
>
>
> --
> Claus Ibsen
> -----------------
> FuseSource
> Email: [email protected]
> Web: http://fusesource.com
> Twitter: davsclaus
> Blog: http://davsclaus.blogspot.com/
> Author of Camel in Action: http://www.manning.com/ibsen/
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: [email protected]
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to