Doug,

StreamSource is used througout ServiceMix for performance reasons, but the default implementations have one big drawback. The stream can only be read once, a second attempt will result in the IOException you mention. Your inbound message is probable of a re-readable Source type (e.g. a DOMSource), which can explain why using out.setContent(in.getContent()) solves your problem.

Could you try using a StringSource or BytesSource instead of a StreamSource when setting the out content? Both Source implementations extend StreamSource, but are built for ServiceMix to allow re-readability by recreating the InputStream again every time the getInputStream() method is called.

Does this solve your issue?

Gert


[EMAIL PROTECTED] wrote:
In my SE, I build an XML to send back to the client. The last two lines
of my SE are:

out.setContent(new StreamSource(new StringReader(new String(inData)));
getChannel().send(exchange);

Where inData is a byte[] containing the content of the incoming
NormalizedMessage from the client. It displays OK.

When I build the project (mvn clean install), the unit test application,
MySpringComponentTest, throws an IO Exception complaining that the
"stream" is closed on this statement:

System.err.println(new
SourceTransformer().toString(me.getOutMessage().getContent()));

If I just set the out content to the in content (i.e.
out.setContent(in.getContent())), then it works. Seems to be a problem
with trying to build an out NormalizedMessage.

Any ideas?

Doug



Reply via email to