Thanks Claus,

stop() worked perfectly - I had confused it with end() but stand corrected.

However, the Properties component does not seem to address my specific
problem. I need to get hold of properties from the exchange itself - not
from an external properties file.

If the file is polled from the folder "C:\in-box" then I want the empty
files to end up in the folder "C:\in-box\skipped\<date>" where <date> is the
date the exchange was processed. I cannot  use property files for the base
directory either since this is a general component that can be configured to
read files from many different places. No matter what folder the input file
is polled from, I want skipped files in the "skipped" subfolder of that
original folder.

It's very similar to the  functionality that I use when archiving successful
and failed exchanges. I use the following uri options for that:

move=archive/${date:now:yyyyMMdd}/${file:name}
moveFailed=failed/${file:name.noext}-${date:now:yyyyMMddHHmmssSSS}.${file:ext}

I now want to use the simple (and file) language to specify where skipped
files are archived. I haven't investigated how the move/moveFailed options
are actually implemented but I guess I need to do it in a similar way unless
there is an easy way to use simple/file language directly in an endpoint
uri.

/Bengt

2010/9/2 Claus Ibsen <claus.ib...@gmail.com>

> Ad 1)
> See the properties component
> http://camel.apache.org/properties
>
> Ad 2)
> Use stop()
>
> On Thu, Sep 2, 2010 at 11:17 AM, Bengt Rodehav <be...@rodehav.com> wrote:
> > Thanks Willem it worked perfectly.
> >
> > However, I now have two other problems (if you bear with me...):
> >
> > I want to use this interceptor:
> >
> >
> *interceptFrom().when(PredicateBuilder.toPredicate(SimpleLanguage.simple("${file:length}
> > ==
> null"))).to("file://${file:path}/${date:now:yyyyMMdd}/skipped").end();*
> >
> > 1. I get the following exception:
> >
> > *java.lang.IllegalArgumentException: Invalid directory:
> > skipped/${date:now:yyyyMMdd}. Dynamic expressions with ${ } placeholders
> is
> > not allowed. Use the fileName option to set the dynamic expression.*
> >
> > How can I direct the file to a directory that I need properties (file and
> > date) to calculate?
> >
> > 2. The interceptor does not "skip" the file. It sends it both to the
> > original endpoint and to my "skipped" folder. How can I make it NOT send
> the
> > file to the original endpoint. I've seen the
> >
> >  *interceptSendToEndpoint("...").skipSendToOriginalEndpoint();*
> >
> > but in this case I want to use the interceptFrom() since I want to
> intercept
> > the route at the earliest possible stage.
> >
> > /Bengt
> >
> >
> >
> > 2010/9/2 Claus Ibsen <claus.ib...@gmail.com>
> >
> >> On Thu, Sep 2, 2010 at 9:20 AM, Bengt Rodehav <be...@rodehav.com>
> wrote:
> >> > Hi Willem,
> >> >
> >> > Thanks for the info. I assume then that as long as I'm on Camel 2.4
> I'll
> >> > check for null but when I upgrade to Camel 2.5 I'll start checking for
> >> zero
> >> > instead.
> >> >
> >> > However, that issue aside, I still get the same problems that I wrote
> >> about.
> >> > Can you confirm that the following syntax is correct?
> >> >
> >> > interceptFrom().when(simple("${file:length} == 0")).to(skipped).end();
> >> >
> >> > OR (as long as I stay on Camel 2.4)
> >> >
> >> > interceptFrom().when(simple("${file:length} ==
> null")).to(skipped).end();
> >> >
> >> > Both of the above give me a compilation error since the "when()"
> method
> >> > expects a "Predicate" while "simple()" returns a String. If I instead
> use
> >> > "simple(..)..isEqualTo(0)" then the compiler accepts it (since
> >> "isEqualTo()"
> >> > returns a Predicate), but then I get the runtime exception instead.
> >> >
> >>
> >> That is also part of Camel 2.5 that simple is easier to use in the
> >> RouteBuilder out of the box.
> >>
> >> Just use a PredicateBuilder.toPredicate(SimpleLanguage.simple("foo")
> >> to construct the predicate.
> >>
> >>
> >> > I'v double checked my dependencies and it turns out that I'm using a
> >> > snapshot version of Camel 2.4 based on revision 958950. Maybe my
> problems
> >> > stem from that... I will check of course.
> >> >
> >> > Do you know if the "when()" method will accept a String as parameter
> in
> >> > Camel 2.4?
> >> >
> >> > /Bengt
> >> >
> >> >
> >> > 2010/9/2 Willem Jiang <willem.ji...@gmail.com>
> >> >
> >> >> Hi Bengt,
> >> >>
> >> >> I tried to reproduce you issue in Camel trunk, and found this bug[1].
> >> >> BTW, If you just want to filter the zero length file, you can take a
> >> look
> >> >> this unit test file[2] and change the simple expression to
> >> "${file:length}
> >> >> == null" as in Camel 2.4.0, ${file:length} is null if the file.length
> is
> >> 0.
> >> >>
> >> >>
> >> >> [1]https://issues.apache.org/activemq/browse/CAMEL-3100
> >> >> [2]
> >> >>
> >>
> https://svn.apache.org/repos/asf/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerIntercepEmptyFileTest.java
> >> >>
> >> >> Willem
> >> >>
> >> >>
> >> >> Bengt Rodehav wrote:
> >> >>
> >> >>> I've developed a file transfer service (for file/ftp/ftps/sftp) that
> >> uses
> >> >>> Camel 2.4. I need to be able to skip transferring empty files and
> was
> >> >>> hoping
> >> >>> to use an interceptor to accomplish this. Below is the relevant
> code:
> >> >>>
> >> >>>  String skippedUri =
> >> "file://skipped/${date:now:yyyyMMdd}/${file:name}";
> >> >>>
> >> >>>
> >>
>  
> interceptFrom().when(simple("${file:length}").isEqualTo(0)).to(skippedUri).end();
> >> >>>
> >> >>> This compiles but in runtime a get the following exception when
> trying
> >> to
> >> >>> start the route:
> >> >>>
> >> >>> *java.lang.NoSuchMethodError:
> >> >>>
> >> >>>
> >>
> se.digia.connect.services.skandia.filetransfer.FileTransferService$1.simple(Ljava/lang/String;)Lorg/apache/camel/builder/ValueBuilder;
> >> >>> *
> >> >>> * **at
> >> >>>
> >> >>>
> >>
> se.digia.connect.services.skandia.filetransfer.FileTransferService$1.configure(FileTransferService.java:279)
> >> >>> *
> >> >>> * **at
> >> >>>
> >> >>>
> >>
> org.apache.camel.builder.RouteBuilder.checkInitialized(RouteBuilder.java:295)
> >> >>> *
> >> >>> * **at
> >> >>>
> >> >>>
> >>
> org.apache.camel.builder.RouteBuilder.configureRoutes(RouteBuilder.java:250)
> >> >>> *
> >> >>> * **at
> >> >>>
> >> >>>
> >>
> org.apache.camel.builder.RouteBuilder.addRoutesToCamelContext(RouteBuilder.java:236)
> >> >>> *
> >> >>> * **at
> >> >>>
> >> >>>
> >>
> org.apache.camel.impl.DefaultCamelContext.addRoutes(DefaultCamelContext.java:498)
> >> >>> *
> >> >>> * **at
> >> >>>
> >> >>>
> >>
> se.digia.connect.core.service.RouteServiceBase.doStart(RouteServiceBase.java:42)
> >> >>> *
> >> >>> * **at
> >> >>>
> se.digia.connect.core.service.ServiceBase.start(ServiceBase.java:49)*
> >> >>> * **at
> >> >>>
> >> >>>
> >>
> se.digia.connect.services.skandia.filetransfer.FileTransferService.__start(FileTransferService.java:60)
> >> >>> *
> >> >>> * **at
> >> >>>
> >> >>>
> >>
> se.digia.connect.services.skandia.filetransfer.FileTransferService.start(FileTransferService.java)
> >> >>> *
> >> >>> * **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:597)*
> >> >>> * **at org.apache.felix.ipojo.util.Callback.call(Callback.java:235)*
> >> >>> * **at org.apache.felix.ipojo.util.Callback.call(Callback.java:191)*
> >> >>> * **at
> >> >>>
> >> >>>
> >>
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallback.call(LifecycleCallback.java:86)
> >> >>> *
> >> >>> * **at
> >> >>>
> >> >>>
> >>
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.__stateChanged(LifecycleCallbackHandler.java:162)
> >> >>> *
> >> >>> * **at
> >> >>>
> >> >>>
> >>
> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.stateChanged(LifecycleCallbackHandler.java)
> >> >>> *
> >> >>> * **at
> >> >>>
> >>
> org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:440)*
> >> >>> * **at
> >> >>>
> org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:321)*
> >> >>> * **at
> >> >>>
> >> >>>
> >>
> org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:155)
> >> >>> *
> >> >>> * **at
> >> >>>
> >> >>>
> >>
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:298)
> >> >>> *
> >> >>> * **at
> >> >>>
> >> >>>
> >>
> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:235)
> >> >>> *
> >> >>> * **at
> >> org.apache.felix.ipojo.IPojoFactory.updated(IPojoFactory.java:603)*
> >> >>> * **at
> >> >>>
> >> >>>
> >>
> org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceFactoryUpdate.run(ConfigurationManager.java:1279)
> >> >>> *
> >> >>> * **at
> org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88)*
> >> >>>
> >> >>> I've also tried the following:
> >> >>>
> >> >>>        interceptFrom().when(simple("${file:length} ==
> >> >>> 0")).to(skipped).end();
> >> >>>
> >> >>> But it gives the following compilation error:
> >> >>>
> >> >>> *The method when(Predicate) in the type InterceptDefinition is not
> >> >>> applicable for the arguments (ValueBuilder)*
> >> >>>
> >> >>> What am I missing? This is the first time I'm using simple language
> and
> >> >>> the
> >> >>> first time I'm using interceptors. I should also mention that I
> deploy
> >> the
> >> >>> camel route in Karaf 1.6.0 which means that OSGI could play a part I
> >> >>> guess.
> >> >>>
> >> >>> /Bengt
> >> >>>
> >> >>>
> >> >>
> >> >
> >>
> >>
> >>
> >> --
> >> Claus Ibsen
> >> Apache Camel Committer
> >>
> >> Author of Camel in Action: http://www.manning.com/ibsen/
> >> Open Source Integration: http://fusesource.com
> >> Blog: http://davsclaus.blogspot.com/
> >> Twitter: http://twitter.com/davsclaus
> >>
> >
>
>
>
> --
> Claus Ibsen
> Apache Camel Committer
>
> Author of Camel in Action: http://www.manning.com/ibsen/
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
>

Reply via email to