I'm a newbie, servicemix 2.0.2. I wrote a simple xpath router sample with org.servicemix.components.xslt.XsltComponent. But i can't forward a inbound msg to destination service which i installed. And invoke is ok.Here is my sample:
servicemix.xml: <?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:my="http://servicemix.org/demo/"> <!-- the JBI container --> <sm:container spring:id="jbi" rootDir="../wdir" useMBeanServer="true" createMBeanServer="true" installationDirPath="../install" monitorInstallationDirectory="true" dumpStats="true" statsInterval="10" transactionManager="#transactionManager"> <sm:activationSpecs> <sm:activationSpec componentName="provider" service="my:provider" destinationService="my:xsltRouter"> <sm:component> <bean xmlns="http://xbean.org/schemas/spring/1.0" class="my.components.MsgProvider"/> </sm:component> </sm:activationSpec> <sm:activationSpec componentName="xsltRouter" service="my:xsltRouter"> <sm:component> <bean xmlns="http://xbean.org/schemas/spring/1.0" class="org.servicemix.components.xslt.XsltComponent"> <property name="xsltResource" value="router.xsl"/> <property name="disableOutput" value="true"/> </bean> </sm:component> </sm:activationSpec> <sm:activationSpec componentName="consumer1" service="my:consumer1"> <sm:component> <bean xmlns="http://xbean.org/schemas/spring/1.0" class="org.servicemix.components.util.TraceComponent"/> </sm:component> </sm:activationSpec> <sm:activationSpec componentName="consumer2" service="my:consumer2"> <sm:component> <bean xmlns="http://xbean.org/schemas/spring/1.0" class="my.components.MsgConsumer"/> </sm:component> </sm:activationSpec> <sm:activationSpec componentName="consumer3" service="my:consumer3"> <sm:component> <bean xmlns="http://xbean.org/schemas/spring/1.0" class="my.components.MsgConsumer"/> </sm:component> </sm:activationSpec> </sm:activationSpecs> </sm:container> <!-- message broker --> <bean id="broker" class="org.activemq.spring.BrokerFactoryBean"> <property name="config" value="classpath:activemq.xml" /> </bean> <bean id="transactionContextManager" class="org.jencks.factory.TransactionContextManagerFactoryBean"/> <bean id="transactionManager" class="org.jencks.factory.GeronimoTransactionManagerFactoryBean" /> <bean id="jmsFactory" class="org.activemq.pool.PooledConnectionFactory"> <property name="connectionFactory"> <bean class="org.activemq.ActiveMQConnectionFactory"> <property name="brokerURL"> <value>tcp://localhost:61616</value> </property> </bean> </property> </bean> </beans> and this is my router.xsl: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:jbi="xalan://org.servicemix.components.xslt.XalanExtension" extension-element-prefixes="jbi" xmlns:my="http://servicemix.org/demo/" version="1.0"> <xsl:template match="/*"> <xsl:choose> <xsl:when test="@id = '0'"> <jbi:forward service="my:consumer1"/> </xsl:when> <xsl:when test="@id = '1'"> <jbi:invoke service="my:consumer2"> <jbi:copyProperties/> <xsl:copy-of select="/"/> </jbi:invoke> </xsl:when> <xsl:when test="@id = '2'"> <jbi:invoke service="my:consumer3"> <xsl:copy-of select="/"/> </jbi:invoke> </xsl:when> </xsl:choose> </xsl:template> </xsl:stylesheet> After i start servicemix, there are some message on the console: 2005-11-23 15:27:12,886 [main ] INFO JournalPersistenceAdapter - Journal Recovery Started. 2005-11-23 15:27:12,996 [main ] INFO JournalPersistenceAdapter - Journal Recovered: 0 message(s) in transactions recovered. 2005-11-23 15:27:19,506 [Thread-9 ] ERROR PojoSupport - Error processing exchange javax.jbi.messaging.MessagingException: Failed to transform: javax.xml.transform.TransformerException: java.io.IOException: Stream closed at org.servicemix.components.xslt.XsltComponent.transform(XsltComponent.java:124) at org.servicemix.components.util.TransformComponentSupport.onMessageExchange(TransformComponentSupport.java:50) at org.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:588) at org.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:171) at org.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:225) at org.apache.geronimo.connector.work.WorkerContext.run(WorkerContext.java:291) at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Thread.java:534) Caused by: 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(ElemExtensionCall.java:283) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.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(ElemApplyTemplates.java:216) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2339) at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2160) at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1213) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:668) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1129) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1107) at org.servicemix.components.xslt.XsltComponent.transformContent(XsltComponent.java:135) at org.servicemix.components.xslt.XsltComponent.transform(XsltComponent.java:119) ... 7 more Caused by: javax.jbi.messaging.MessagingException: java.io.IOException: Stream closed at org.servicemix.components.util.CopyTransformer.transform(CopyTransformer.java:77) at org.servicemix.components.util.ComponentSupport.forwardToExchange(ComponentSupport.java:253) at org.servicemix.components.util.ComponentSupport.forwardToExchange(ComponentSupport.java:247) at org.servicemix.components.util.ComponentSupport.invoke(ComponentSupport.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(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.apache.xalan.extensions.ExtensionHandlerJavaClass.processElement(ExtensionHandlerJavaClass.java:432) ... 20 more Caused by: java.io.IOException: Stream closed at java.io.StringReader.ensureOpen(StringReader.java:39) at java.io.StringReader.read(StringReader.java:73) at org.apache.xerces.impl.XMLEntityScanner.load(Unknown Source) at org.apache.xerces.impl.XMLEntityScanner.skipString(Unknown Source) 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 org.servicemix.jbi.jaxp.SourceTransformer.toDOMSourceFromStream(SourceTransformer.java:218) at org.servicemix.jbi.jaxp.SourceTransformer.toDOMSource(SourceTransformer.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(SourceTransformer.java:144) at org.servicemix.components.util.CopyTransformer.transform(CopyTransformer.java:68) ... 29 more By the way, if i set disableOutput in servicemix.xml false, there are additional message before the message printted by invoked service: 2005-11-23 15:29:16,224 [Thread-11 ] ERROR PojoSupport - Error processing exchange javax.jbi.messaging.MessagingException: Could not find route for exchange: [EMAIL PROTECTED] for service: null and interface: null at org.servicemix.jbi.nmr.Broker.sendExchangePacket(Broker.java:303) at org.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainer.java:567) at org.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:347) at org.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:422) at org.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:398) at org.servicemix.components.util.TransformComponentSupport.onMessageExchange(TransformComponentSupport.java:57) at org.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:588) at org.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:171) at org.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:225) at org.apache.geronimo.connector.work.WorkerContext.run(WorkerContext.java:291) at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Thread.java:534) consumer2<?xml version="1.0" encoding="UTF-8"?> <message id="1">hello world</message> Does any body can tell me why i can't forward service? And, why it prints thoes error message when i invoke? thanks.
