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.

Reply via email to