camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Borut BolĨina <borut.bolc...@gmail.com>
Subject Re: How to create a Camel route which takes XML and bind some data to JPA annotated POJO?
Date Fri, 16 Mar 2012 06:38:02 GMT
Thanks Babak,

as it turned out, the solution with annotating the WeatherCurrent POJO did
the job. The solution is so short! I posted an answer to my own question at
StackOverflow.

I do have one more problem with the test case, but will post it in another
thread.

-borut

Dne 14. marec 2012 16:24 je Babak Vahdat
<babak.vahdat@swissonline.ch>napisal/-a:

> Hi
>
> First of all welcome to Apache Camel!
>
> As you don't own a XSD you can't make use of JDK-XJC compiler tool to
> create your JAXB-POJOs. However having a proper XSD had made your use
> case much easier. As then JAXB would have taken over the job of
> "Unmarshalling" from XML to POJO.
>
> Nevertheless I used [1] to show you *one possible way* you could go for it.
> The idea is really simple, just put a Processor in between which does the
> conversion of DOMSource-Object => JPA-Object:
>
>    @Override
>    protected RouteBuilder createRouteBuilder() throws Exception {
>        return new RouteBuilder() {
>            @Override
>            public void configure() throws Exception {
>                // START SNIPPET: e1
>                from("file:target/pair")
>                // split the order child tags, and inherit namespaces from
> the
>                // orders root tag
>                    .split().tokenizeXML("order", "orders").process(new
> Processor() {
>
>                        @Override
>                        public void process(Exchange exchange) throws
> Exception {
>                            DOMSource source =
> exchange.getIn().getBody(DOMSource.class);
>
>                            Node order = source.getNode();
>                            NodeList childs = order.getChildNodes();
>                            for (int j = 0; j < childs.getLength(); j++) {
>                                Node text = childs.item(j);
>
>                                // instead of just dumping the content as I
> do here,
>                                // just create an object of your POJO and
> set the properties
>                                // on it using the "current" Node here and
> then do something like:
>                                // WeatherCurrent weather = ne
> WeatherCurrent();
>                                // weather.setXXX(text.getTextContent());
>                                // weather.set...
>                                //
>                                // exchange.getIn().setBody(weather);
>
>                                System.out.println(text.getTextContent());
>                            }
>                        }
>                    })
>                    // of course you would instead send the current exchange
> to
>                    // the JPA producer instead of "mock"
>                    // .to("jpa://com.foo.WeatherCurrent ")
>                    .to("mock:split");
>                // END SNIPPET: e1
>            }
>        };
>    }
>
> If you would run this test with my modifications it would additionally dump
> the following into the console:
>
> Camel in Action
> ActiveMQ in Action
> DSL in Action
>
> [1]
>
> https://svn.apache.org/repos/asf/camel/trunk/camel-core/src/test/java/org/apache/camel/language/TokenXMLPairNamespaceSplitTest.java
>
> Babak
>
> --
> View this message in context:
> http://camel.465427.n5.nabble.com/How-to-create-a-Camel-route-which-takes-XML-and-bind-some-data-to-JPA-annotated-POJO-tp5564614p5565135.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>

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