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 07:20:30 GMT
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.

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
>>
>>
>

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