You can already create a route that can adapt to changes without
compilation.
Just do:
from("file:data/csv?noop=true").unmarshal().csv().bean(new
CSVConverterBean(),"toDefaultXml").to("xslt:toMyScheme.xsl").to("file:data/csvoutput?fileName=test.xml");
Just change the CSVConverterBean to create the default xml I described
and let xslt do the conversion to your special format. You can store
the xsl file at a place outside the jar that allows you to change it easily.
Christian
Am 22.07.2011 04:19, schrieb shekher awasthi:
Thanks Christion and Lukasz for the help.
i still have doubt about what Lukasz has suggested, my concern is to avoid
the the use of CSVConverterBean java class which actually is mapping the
data being provided my camel csv unmarshal to the JaxB generated classes.
using JaxB is not a big concern and can switch to XStream but the big
challange is to avoid using the mappping class and use some configuration
file for mapping so that we can at later stage do mapping change without any
code change
2011/7/22 Łukasz Dywicki<[email protected]>
You can use camel-xstream which have default behaviors and will create file
similar to Christion example. You simply do marshal().xstream() instead of
JAXB. No annotations, no classes, only declarative model.
Regards,
Lukasz
How about creating a default xml out of the csv and then convert this to
the custom xml using xslt.
For example for this csv:
Name, Age
Anne, 23
Jim, 45
the default xml could look like this:
<data>
<line><Name>Anne</Name><Age>23</Age></line>
<line><Name>Jim</Name><Age>45</Age></line>
</data>
The xslt does not have to be compiled and can be created using some
tooling.
We could add a marshaller for the default format to camel.
Christian
Am 21.07.2011 18:31, schrieb shekher awasthi:
Hi All,
i am trying my hands on camel where i have to fetch some csv file from a
file system and needs to convert it to xml format and place it on some
other
system
i am using camel for this and here is my sample POC code
*import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import com.poc.convertor.CSVConverterBean;
public class TestPOC {
public static void main(String args[]) throws Exception {
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
public void configure() {
from("file:data/csv?noop=true").unmarshal().csv().bean(new
CSVConverterBean(),"processCSVInvoice").to("file:data/csvoutput?fileName=test.xml").marshal("jaxb");
}
});
context.start();
Thread.sleep(1000);
context.stop();
}
}*
In this approach camel csv unmarshaller will covert the csv file in to
java
list List<List<String>> i have written a java converter
CSVConverterBeanwhich will iterate the list and set the values in the
respective java
objects being generated by jaxb 2.x , final object is being marshaled in
to
xml and file is being saved.
Everything is being working properly with only one issue , if in future
there arises any request to change mapping we need to do the
modification in
CSVConverterBean and than this java file needs to be recompiled and need
to
be redistributed which we want to avoid.
my question is, Is there any way by which we can map the values from the
java List being given by Camel to the respective java classes being
generated by the JaxB so that the need to recompile java code can be
avoided.
Thanks in advance for the help
--
--
Christian Schneider
http://www.liquid-reality.de
Open Source Architect
Talend Application Integration Division http://www.talend.com
--
Christian Schneider
http://www.liquid-reality.de
Open Source Architect
http://www.talend.com