On 1/18/11 10:41 AM, 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-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>

Can you try to move the  <convertBodyTo type="java.lang.String"/>
before the
<to uri="log:gov.ojp.it.TSCEncounterRouterLog?showBody=false"/>
Just 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-router/RouterService/RouterServiceEndpoint"/>
      <convertBodyTo type="java.lang.String"/>
      <to uri="log:gov.ojp.it.TSCEncounterRouterLog?showBody=false"/>
      <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.

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


--
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog:    http://willemjiang.blogspot.com (English)
         http://jnn.javaeye.com (Chinese)
Twitter: willemjiang

Reply via email to