camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bengt Rodehav <be...@rodehav.com>
Subject Re: Skipping empty files, problem with simple language
Date Thu, 02 Sep 2010 12:52:53 GMT
Thanks again Claus - will have a look at recipient list.

BTW seems like camel.apache.org is not accessible for the moment - problems?

/Bengt

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

> Use dynamic recipient list to construct the endpoint uri on-the-fly
> http://camel.apache.org/recipient-list.html
>
>
> On Thu, Sep 2, 2010 at 1:07 PM, Bengt Rodehav <bengt@rodehav.com> wrote:
> > 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.ibsen@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 <bengt@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.ibsen@gmail.com>
> >> >
> >> >> On Thu, Sep 2, 2010 at 9:20 AM, Bengt Rodehav <bengt@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.jiang@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
> >>
> >
>
>
>
> --
> 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
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message