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:696)
      at 
com.ctc.wstx.sr.StreamScanner.loadMoreFromCurrent(StreamScanner.java:1062)
      at 
com.ctc.wstx.sr.StreamScanner.getNextCharFromCurrent(StreamScanner.java:807)
      at 
com.ctc.wstx.sr.BasicStreamReader.handleStartElem(BasicStreamReader.java: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(FragmentStreamReader.java:68)
      at 
org.apache.servicemix.cxfbc.interceptors.StaxJbiWrapper.next(StaxJbiWrapper.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.java:103)
      at 
org.apache.camel.processor.ConvertBodyProcessor.process(ConvertBodyProcessor.java:57)
      at 
org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(AsyncProcessorTypeConverter.java:50)
      at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
      at 
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
      at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
      at 
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
      at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
      at 
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
      at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
      at 
org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:99)
      at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
      at 
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
      at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
      at 
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
      at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
      at 
org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:290)
      at 
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:202)
      at 
org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:256)
      at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.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(UnitOfWorkProcessor.java:99)
      at 
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:70)
      at 
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
      at 
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
      at 
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
      at 
org.apache.servicemix.camel.CamelProviderEndpoint$1.call(CamelProviderEndpoint.java:109)
      at 
org.apache.servicemix.camel.JbiBinding.runWithCamelContextClassLoader(JbiBinding.java:116)
      at 
org.apache.servicemix.camel.CamelProviderEndpoint.handleActiveProviderExchange(CamelProviderEndpoint.java:107)
      at 
org.apache.servicemix.camel.CamelProviderEndpoint.process(CamelProviderEndpoint.java:85)
      at 
org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:651)
      at 
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:606)
      at 
org.apache.servicemix.common.AsyncBaseLifeCycle.processExchangeInTx(AsyncBaseLifeCycle.java:501)
      at 
org.apache.servicemix.common.AsyncBaseLifeCycle$2.run(AsyncBaseLifeCycle.java:370)
      at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.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-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>
>
> 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-router/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

Reply via email to