You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Tommy Chheng <to...@gmail.com> on 2010/11/14 09:02:46 UTC

Filtering an xml directory

I'm trying to use Camel to extract only the "//title" tag in a directory 
of xml files. This is all on local disk.
The code runs sucessfully without an error but there was no directory 
created. Any ideas whats wrong?

import org.apache.camel.builder.RouteBuilder
import org.apache.camel.impl.DefaultCamelContext
class xmlFilter extends RouteBuilder {
   def configure {
     val inputDir = "file://~/src/rw/data/xml/original"
     val outputDir = "file:title_only"

     //apache camel dsl
     from(inputDir).filter().xpath("//title").to(outputDir)
   }
}

object CamelExample{
   def run{
     val context = new DefaultCamelContext()
     context.addRoutes(new xmlFilter())
     context.start()
   }
}

CamelExample.run

Re: Filtering an xml directory

Posted by Claus Ibsen <cl...@gmail.com>.
I have created a ticket
https://issues.apache.org/activemq/browse/CAMEL-3339

To make this even easier if you are not using camel-spring JAR.


On Sun, Nov 14, 2010 at 9:56 AM, Claus Ibsen <cl...@gmail.com> wrote:
> On Sun, Nov 14, 2010 at 9:54 AM, Tommy Chheng <to...@gmail.com> wrote:
>> I just got the camel in action book and saw the example in chap 1.
>>
>> I needed a Thread.sleep(10000) right after context.start so:
>> context.start
>> Thread.sleep(10000)
>> context.stop
>>
>> Is there a blocking stop method where the program would end when the process
>> is done?
>>
>
> See chapter 13, section 13.4.1.
>
>>
>> On 11/14/10 12:42 AM, Claus Ibsen wrote:
>>>
>>> Hi
>>>
>>> Try just first without the filter, to see that it creates the output
>>> files.
>>> Then add back the filter and you then know the xpath returns false for
>>> all the input files.
>>> Hence its most likely your xpath expression which is wrong.
>>>
>>>
>>> On Sun, Nov 14, 2010 at 9:02 AM, Tommy Chheng<to...@gmail.com>
>>>  wrote:
>>>>
>>>> I'm trying to use Camel to extract only the "//title" tag in a directory
>>>> of
>>>> xml files. This is all on local disk.
>>>> The code runs sucessfully without an error but there was no directory
>>>> created. Any ideas whats wrong?
>>>>
>>>> import org.apache.camel.builder.RouteBuilder
>>>> import org.apache.camel.impl.DefaultCamelContext
>>>> class xmlFilter extends RouteBuilder {
>>>>  def configure {
>>>>    val inputDir = "file://~/src/rw/data/xml/original"
>>>>    val outputDir = "file:title_only"
>>>>
>>>>    //apache camel dsl
>>>>    from(inputDir).filter().xpath("//title").to(outputDir)
>>>>  }
>>>> }
>>>>
>>>> object CamelExample{
>>>>  def run{
>>>>    val context = new DefaultCamelContext()
>>>>    context.addRoutes(new xmlFilter())
>>>>    context.start()
>>>>  }
>>>> }
>>>>
>>>> CamelExample.run
>>>>
>>>
>>>
>>
>
>
>
> --
> Claus Ibsen
> -----------------
> FuseSource
> Email: cibsen@fusesource.com
> Web: http://fusesource.com
> Twitter: davsclaus
> Blog: http://davsclaus.blogspot.com/
> Author of Camel in Action: http://www.manning.com/ibsen/
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Re: Filtering an xml directory

Posted by Claus Ibsen <cl...@gmail.com>.
On Sun, Nov 14, 2010 at 6:45 PM, Tommy Chheng <to...@gmail.com> wrote:
> Hi Claus,
> In Section 13.4.1, the reference to shutting down the application when the
> route is done processing is :
> Main main = new Main();
> main.setApplicationContextUri("META-INF/spring/camel-context.xml");
> main.enableHangupSupport();
> main.start();
>
> But this requires using spring?
>

Yes

> Is it possible to shutdown without using the Thread.sleep method(since i
> don't know how long it will take) or spring?
>

Yeah but then you need to code the pieces yourself. Take a look in the
source code for camel-spring, where you can see how the
enableHangupSupport method has been implemented. You gotta do
something like that.
https://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java

However I have created a ticket so we will add this to camel-core in
the future so its easier to do out of the box.



> Thanks for the help, I'm glad i stumbled across camel. It looks like an
> easier way of transforming different data sources into different sinks.
>
> @tommychheng
>
>
> On 11/14/10 12:56 AM, Claus Ibsen wrote:
>>
>> On Sun, Nov 14, 2010 at 9:54 AM, Tommy Chheng<to...@gmail.com>
>>  wrote:
>>>
>>> I just got the camel in action book and saw the example in chap 1.
>>>
>>> I needed a Thread.sleep(10000) right after context.start so:
>>> context.start
>>> Thread.sleep(10000)
>>> context.stop
>>>
>>> Is there a blocking stop method where the program would end when the
>>> process
>>> is done?
>>>
>> See chapter 13, section 13.4.1.
>>
>>> On 11/14/10 12:42 AM, Claus Ibsen wrote:
>>>>
>>>> Hi
>>>>
>>>> Try just first without the filter, to see that it creates the output
>>>> files.
>>>> Then add back the filter and you then know the xpath returns false for
>>>> all the input files.
>>>> Hence its most likely your xpath expression which is wrong.
>>>>
>>>>
>>>> On Sun, Nov 14, 2010 at 9:02 AM, Tommy Chheng<to...@gmail.com>
>>>>  wrote:
>>>>>
>>>>> I'm trying to use Camel to extract only the "//title" tag in a
>>>>> directory
>>>>> of
>>>>> xml files. This is all on local disk.
>>>>> The code runs sucessfully without an error but there was no directory
>>>>> created. Any ideas whats wrong?
>>>>>
>>>>> import org.apache.camel.builder.RouteBuilder
>>>>> import org.apache.camel.impl.DefaultCamelContext
>>>>> class xmlFilter extends RouteBuilder {
>>>>>  def configure {
>>>>>    val inputDir = "file://~/src/rw/data/xml/original"
>>>>>    val outputDir = "file:title_only"
>>>>>
>>>>>    //apache camel dsl
>>>>>    from(inputDir).filter().xpath("//title").to(outputDir)
>>>>>  }
>>>>> }
>>>>>
>>>>> object CamelExample{
>>>>>  def run{
>>>>>    val context = new DefaultCamelContext()
>>>>>    context.addRoutes(new xmlFilter())
>>>>>    context.start()
>>>>>  }
>>>>> }
>>>>>
>>>>> CamelExample.run
>>>>>
>>>>
>>
>>
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Re: Filtering an xml directory

Posted by Tommy Chheng <to...@gmail.com>.
Hi Claus,
In Section 13.4.1, the reference to shutting down the application when 
the route is done processing is :
Main main = new Main();
main.setApplicationContextUri("META-INF/spring/camel-context.xml"); 
main.enableHangupSupport();
main.start();

But this requires using spring?

Is it possible to shutdown without using the Thread.sleep method(since i 
don't know how long it will take) or spring?

Thanks for the help, I'm glad i stumbled across camel. It looks like an 
easier way of transforming different data sources into different sinks.

@tommychheng


On 11/14/10 12:56 AM, Claus Ibsen wrote:
> On Sun, Nov 14, 2010 at 9:54 AM, Tommy Chheng<to...@gmail.com>  wrote:
>> I just got the camel in action book and saw the example in chap 1.
>>
>> I needed a Thread.sleep(10000) right after context.start so:
>> context.start
>> Thread.sleep(10000)
>> context.stop
>>
>> Is there a blocking stop method where the program would end when the process
>> is done?
>>
> See chapter 13, section 13.4.1.
>
>> On 11/14/10 12:42 AM, Claus Ibsen wrote:
>>> Hi
>>>
>>> Try just first without the filter, to see that it creates the output
>>> files.
>>> Then add back the filter and you then know the xpath returns false for
>>> all the input files.
>>> Hence its most likely your xpath expression which is wrong.
>>>
>>>
>>> On Sun, Nov 14, 2010 at 9:02 AM, Tommy Chheng<to...@gmail.com>
>>>   wrote:
>>>> I'm trying to use Camel to extract only the "//title" tag in a directory
>>>> of
>>>> xml files. This is all on local disk.
>>>> The code runs sucessfully without an error but there was no directory
>>>> created. Any ideas whats wrong?
>>>>
>>>> import org.apache.camel.builder.RouteBuilder
>>>> import org.apache.camel.impl.DefaultCamelContext
>>>> class xmlFilter extends RouteBuilder {
>>>>   def configure {
>>>>     val inputDir = "file://~/src/rw/data/xml/original"
>>>>     val outputDir = "file:title_only"
>>>>
>>>>     //apache camel dsl
>>>>     from(inputDir).filter().xpath("//title").to(outputDir)
>>>>   }
>>>> }
>>>>
>>>> object CamelExample{
>>>>   def run{
>>>>     val context = new DefaultCamelContext()
>>>>     context.addRoutes(new xmlFilter())
>>>>     context.start()
>>>>   }
>>>> }
>>>>
>>>> CamelExample.run
>>>>
>>>
>
>

Re: Filtering an xml directory

Posted by Claus Ibsen <cl...@gmail.com>.
On Sun, Nov 14, 2010 at 9:54 AM, Tommy Chheng <to...@gmail.com> wrote:
> I just got the camel in action book and saw the example in chap 1.
>
> I needed a Thread.sleep(10000) right after context.start so:
> context.start
> Thread.sleep(10000)
> context.stop
>
> Is there a blocking stop method where the program would end when the process
> is done?
>

See chapter 13, section 13.4.1.

>
> On 11/14/10 12:42 AM, Claus Ibsen wrote:
>>
>> Hi
>>
>> Try just first without the filter, to see that it creates the output
>> files.
>> Then add back the filter and you then know the xpath returns false for
>> all the input files.
>> Hence its most likely your xpath expression which is wrong.
>>
>>
>> On Sun, Nov 14, 2010 at 9:02 AM, Tommy Chheng<to...@gmail.com>
>>  wrote:
>>>
>>> I'm trying to use Camel to extract only the "//title" tag in a directory
>>> of
>>> xml files. This is all on local disk.
>>> The code runs sucessfully without an error but there was no directory
>>> created. Any ideas whats wrong?
>>>
>>> import org.apache.camel.builder.RouteBuilder
>>> import org.apache.camel.impl.DefaultCamelContext
>>> class xmlFilter extends RouteBuilder {
>>>  def configure {
>>>    val inputDir = "file://~/src/rw/data/xml/original"
>>>    val outputDir = "file:title_only"
>>>
>>>    //apache camel dsl
>>>    from(inputDir).filter().xpath("//title").to(outputDir)
>>>  }
>>> }
>>>
>>> object CamelExample{
>>>  def run{
>>>    val context = new DefaultCamelContext()
>>>    context.addRoutes(new xmlFilter())
>>>    context.start()
>>>  }
>>> }
>>>
>>> CamelExample.run
>>>
>>
>>
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Re: Filtering an xml directory

Posted by Tommy Chheng <to...@gmail.com>.
I just got the camel in action book and saw the example in chap 1.

I needed a Thread.sleep(10000) right after context.start so:
context.start
Thread.sleep(10000)
context.stop

Is there a blocking stop method where the program would end when the 
process is done?


On 11/14/10 12:42 AM, Claus Ibsen wrote:
> Hi
>
> Try just first without the filter, to see that it creates the output files.
> Then add back the filter and you then know the xpath returns false for
> all the input files.
> Hence its most likely your xpath expression which is wrong.
>
>
> On Sun, Nov 14, 2010 at 9:02 AM, Tommy Chheng<to...@gmail.com>  wrote:
>> I'm trying to use Camel to extract only the "//title" tag in a directory of
>> xml files. This is all on local disk.
>> The code runs sucessfully without an error but there was no directory
>> created. Any ideas whats wrong?
>>
>> import org.apache.camel.builder.RouteBuilder
>> import org.apache.camel.impl.DefaultCamelContext
>> class xmlFilter extends RouteBuilder {
>>   def configure {
>>     val inputDir = "file://~/src/rw/data/xml/original"
>>     val outputDir = "file:title_only"
>>
>>     //apache camel dsl
>>     from(inputDir).filter().xpath("//title").to(outputDir)
>>   }
>> }
>>
>> object CamelExample{
>>   def run{
>>     val context = new DefaultCamelContext()
>>     context.addRoutes(new xmlFilter())
>>     context.start()
>>   }
>> }
>>
>> CamelExample.run
>>
>
>

Re: Filtering an xml directory

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

Try just first without the filter, to see that it creates the output files.
Then add back the filter and you then know the xpath returns false for
all the input files.
Hence its most likely your xpath expression which is wrong.


On Sun, Nov 14, 2010 at 9:02 AM, Tommy Chheng <to...@gmail.com> wrote:
> I'm trying to use Camel to extract only the "//title" tag in a directory of
> xml files. This is all on local disk.
> The code runs sucessfully without an error but there was no directory
> created. Any ideas whats wrong?
>
> import org.apache.camel.builder.RouteBuilder
> import org.apache.camel.impl.DefaultCamelContext
> class xmlFilter extends RouteBuilder {
>  def configure {
>    val inputDir = "file://~/src/rw/data/xml/original"
>    val outputDir = "file:title_only"
>
>    //apache camel dsl
>    from(inputDir).filter().xpath("//title").to(outputDir)
>  }
> }
>
> object CamelExample{
>  def run{
>    val context = new DefaultCamelContext()
>    context.addRoutes(new xmlFilter())
>    context.start()
>  }
> }
>
> CamelExample.run
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/