2 Replies Latest reply on Apr 7, 2011 2:57 AM by Ben Clark

    File and Bean component

    Ben Clark Newbie

      Hello guys,


      I'm trying to make a simple project where I poll a directory, I modify the new file (with a bean) and I move this file.

      The workflow is:


      File Poller -> Bridge -> Bean -> Bridge -> File Sender


      So I create 4 projects:


      1. A SA project wich contains every SU


      2. A File-SU project with this xbean.xml (sorry for the un-indentation):


      <file:sender service="msl:file"



        <property name="marshaler">

          <bean class="org.apache.servicemix.components.util.BinaryFileMarshaler" />




      <file:poller service="msl:file"





        <property name="marshaler">

          <bean class="org.apache.servicemix.components.util.BinaryFileMarshaler" />




      3. Then a Bridge-SU which invoke my bean transformation and send the following result to my file sender. The xbean is:


      <eip:pipeline service="msl:pipeline" endpoint="endpoint">


      <eip:exchange-target service="msl:toxml" endpoint="bean"/>



      <eip:exchange-target service="msl:file" endpoint="sender"/>




      4. Next a bean SU which must transform my file content, with this xbean:


      <bean:endpoint service="mls:toxml" endpoint="bean" bean="#myBean"/>

      <bean id="myBean" class="X.X.X.X.MyBean"/>


      And this MyBean.java:


      public void onMessageExchange(MessageExchange exchange) throws MessagingException {

      if (exchange.getStatus() == ExchangeStatus.ACTIVE) {

      NormalizedMessage message = exchange.getMessage("in");

      Source content = message.getContent();

      try {

      String body = (new SourceTransformer()).toString(content);

      System.out.println("body=" + body);

      System.out.println("content=" + content);

      System.out.println("message=" + message);

      } catch(TransformerException e) {




      exchange.setMessage(message, "out");






      So, when I put a file on my directory, the workflow is working cause I see my bean's logs and the file is moved.


      But I have a problem with my log:

      System.out.println("message=" + message); => org.apache.servicemix.jbi.runtime.impl.NormalizedMessageImpl@c20590 (OK)

      System.out.println("content=" + content); => null

      System.out.println("body=" + body); => null


      Why the content and the body of the message is null ?

      Shouldn't have I to display the content of the file which is polled ?

      This is my main question, how can I, in my bean-SU, receive the content of the newly created file ??


      Edited by: manta7 on Apr 6, 2011 4:05 PM