I am trying to create a simple example using the XSLT router.  I get a
Stream closed exception when I try to execute the forward.  What am I
missing?  I have modified the file-binding example to use the router to
route an XML file based on the contents of the id.

The servicemix.xml file is as follows:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xbean.org/schemas/spring/1.0";
xmlns:spring="http://xbean.org/schemas/spring/1.0";
xmlns:sm="http://servicemix.org/config/1.0";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="http://xbean.org/schemas/spring/1.0
../../conf/spring-beans.xsd
                            http://servicemix.org/config/1.0
../../conf/servicemix.xsd" xmlns:foo="http://servicemix.org/demo/";>
        <!-- the JBI container -->
        <sm:container id="jbi" useMBeanServer="true" createMBeanServer="true"
dumpStats="true" statsInterval="10">
                <sm:activationSpecs>
                        <sm:activationSpec componentName="transformer" 
service="foo:transformer">
                                <sm:component>
                                        <bean 
class="org.servicemix.components.xslt.XsltComponent">
                                                <property name="xsltResource" 
value="classpath:router.xsl"/>
                                                <!-- lets disable automatic 
output of the result of the transform;
only if we perform
        an invoke in the XSLT will we invoke another endpoint -->
                                                <property name="disableOutput" 
value="true"/>
                                        </bean>
                                </sm:component>
                        </sm:activationSpec>
                        <!-- Write files to the outbox directory -->
                        <sm:activationSpec componentName="fileSender" 
service="foo:fileSender">
                                <sm:component>
                                        <bean 
xmlns="http://xbean.org/schemas/spring/1.0";
class="org.servicemix.components.file.FileWriter">
                                                <property name="directory" 
value="outbox"/>
                                                <property name="marshaler">
                                                        <bean 
class="org.servicemix.components.util.DefaultFileMarshaler">
                                                                <property 
name="fileName">
                                                                        <bean 
class="org.servicemix.expression.JaxenStringXPathExpression">
                                                                                
<constructor-arg value="concat('sample_', /sample/@id, '.xml')"/>
                                                                        </bean>
                                                                </property>
                                                        </bean>
                                                </property>
                                        </bean>
                                </sm:component>
                        </sm:activationSpec>
                        <!-- Write files to the outbox directory -->
                        <sm:activationSpec componentName="fileSender2" 
service="foo:fileSender2">
                                <sm:component>
                                        <bean 
xmlns="http://xbean.org/schemas/spring/1.0";
class="org.servicemix.components.file.FileWriter">
                                                <property name="directory" 
value="outbox2"/>
                                                <property name="marshaler">
                                                        <bean 
class="org.servicemix.components.util.DefaultFileMarshaler">
                                                                <property 
name="fileName">
                                                                        <bean 
class="org.servicemix.expression.JaxenStringXPathExpression">
                                                                                
<constructor-arg value="concat('sample_', /sample/@id, '.xml')"/>
                                                                        </bean>
                                                                </property>
                                                        </bean>
                                                </property>
                                        </bean>
                                </sm:component>
                        </sm:activationSpec>
                        <!-- Look for files in the inbox directory -->
                        <sm:activationSpec componentName="filePoller"
destinationService="foo:transformer" service="foo:filePoller">
                                <sm:component>
                                        <bean 
xmlns="http://xbean.org/schemas/spring/1.0";
class="org.servicemix.components.file.FilePoller">
                                                <property name="workManager" 
ref="workManager"/>
                                                <property name="file" 
value="inbox"/>
                                                <property name="period" 
value="1000"/>
                                        </bean>
                                </sm:component>
                        </sm:activationSpec>
                </sm:activationSpecs>
        </sm:container>
        <!-- the work manager (thread pool) for this container -->
        <bean id="workManager" 
class="org.jencks.factory.WorkManagerFactoryBean">
                <property name="threadPoolSize" value="30"/>
        </bean>
</beans>

Here is my simple transform:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:jbi="xalan://org.servicemix.components.xslt.XalanExtension"
extension-element-prefixes="jbi" xmlns:foo="http://servicemix.org/demo/";
version="1.0">
        <xsl:template match="/*">
                <xsl:choose>
                        <!-- lets forward the inbound message to a service -->
                        <xsl:when test="@id = '555' ">
                                <jbi:forward service="foo:fileSender"/>
                        </xsl:when>
                        <xsl:when test="@id = '666' ">
                                <jbi:forward service="foo:fileSender2"/>
                        </xsl:when>
                        <xsl:otherwise>
                                <jbi:forward service="foo:trace"/>
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:template>
</xsl:stylesheet>

and the execption I get is below.

DEBUG - AbstractFlow.doRouting(175) | Called Flow doRouting
; SystemID: file:/C:/OpenSource/servicemix-2.1-SNAPSHOT/conf/router.xsl;
Line#:
9; Column#: 46
javax.xml.transform.TransformerException: java.io.IOException: Stream closed
        at
org.apache.xalan.extensions.ExtensionHandlerJavaClass.processElement(
ExtensionHandlerJavaClass.java:441)
        at
org.apache.xalan.templates.ElemExtensionCall.execute(ElemExtensionCal
l.java:283)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr
ansformerImpl.java:2339)
        at
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:172)
        at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(
ElemApplyTemplates.java:425)
        at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTempla
tes.java:216)
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Tr
ansformerImpl.java:2339)
        at
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(Tran
sformerImpl.java:2160)
        at
org.apache.xalan.transformer.TransformerImpl.transformNode(Transforme
rImpl.java:1213)
        at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImp
l.java:668)
        at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImp
l.java:1129)
        at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImp
l.java:1107)
        at
org.servicemix.components.xslt.XsltComponent.transformContent(XsltCom
ponent.java:135)
        at
org.servicemix.components.xslt.XsltComponent.transform(XsltComponent.
java:119)
        at
org.servicemix.components.util.TransformComponentSupport.onMessageExc
hange(TransformComponentSupport.java:47)
        at
org.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(Deliv
eryChannelImpl.java:590)
        at
org.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:
182)
        at
org.servicemix.jbi.nmr.flow.seda.SedaFlow.doSend(SedaFlow.java:140)
        at
org.servicemix.jbi.nmr.flow.AbstractFlow.send(AbstractFlow.java:124)
        at org.servicemix.jbi.nmr.Broker.sendExchangePacket(Broker.java:289)
        at
org.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.j
ava:590)
        at
org.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChann
elImpl.java:349)
        at
org.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryCha
nnelImpl.java:423)
        at
org.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryCha
nnelImpl.java:400)
        at
org.servicemix.components.file.FilePoller.processFile(FilePoller.java
:220)
        at
org.servicemix.components.file.FilePoller.processFileAndDelete(FilePo
ller.java:197)
        at
org.servicemix.components.file.FilePoller$1.run(FilePoller.java:182)
        at
org.apache.geronimo.connector.work.WorkerContext.run(WorkerContext.ja
va:291)
        at
EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(Unknown So
urce)
        at java.lang.Thread.run(Thread.java:534)
Caused by: javax.jbi.messaging.MessagingException: java.io.IOException:
Stream c
losed
        at
org.servicemix.components.util.CopyTransformer.transform(CopyTransfor
mer.java:77)
        at
org.servicemix.components.util.ComponentSupport.forwardToExchange(Com
ponentSupport.java:253)
        at
org.servicemix.components.util.ComponentSupport.forwardToExchange(Com
ponentSupport.java:247)
        at
org.servicemix.components.util.ComponentSupport.invoke(ComponentSuppo
rt.java:183)
        at
org.servicemix.components.xslt.XalanExtension.forward(XalanExtension.
java:78)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at
org.apache.xalan.extensions.ExtensionHandlerJavaClass.processElement(
ExtensionHandlerJavaClass.java:432)
        ... 29 more
Caused by: java.io.IOException: Stream closed
        at
java.io.BufferedInputStream.ensureOpen(BufferedInputStream.java:120)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:199)
        at
org.apache.xerces.impl.XMLEntityManager$RewindableInputStream.read(Un
known Source)
        at
org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown So
urce)
        at
org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown
 Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
        at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
        at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:101)
        at
org.servicemix.jbi.jaxp.SourceTransformer.toDOMSourceFromStream(Sourc
eTransformer.java:213)
        at
org.servicemix.jbi.jaxp.SourceTransformer.toDOMSource(SourceTransform
er.java:136)
        at
org.servicemix.jbi.jaxp.SourceTransformer.toDOMNode(SourceTransformer
.java:249)
        at
org.servicemix.jbi.jaxp.SourceTransformer.toDOMNode(SourceTransformer
.java:276)
        at
org.servicemix.jbi.jaxp.SourceTransformer.toDOMSource(SourceTransform
er.java:144)
        at
org.servicemix.components.util.CopyTransformer.transform(CopyTransfor
mer.java:68)
        ... 38 more

Scott Ryan
Chief Technology Officer
Soaring Eagle L.L.C.
[EMAIL PROTECTED]
www.soaringeagleco.com
(303) 263-3044




Reply via email to