On Mar 3, 2009, at 8:10 , Claus Ibsen wrote:

On Tue, Mar 3, 2009 at 7:56 AM, Peter Maas <[email protected]> wrote:
I think you've solved my problem. I was looking at the 'in' message of the resource exchange, whereas I should be looking at the 'out' message. And, btw, yes the CinemaQueryAssembler is thread-safe, I actually think all code
should be threadsafe ;)
Yeah if we could just got some basic annotations in the JDK, eg
@ThreadSafe then you could document it like that :)

Maybe we need to improve the wiki for using the enricher to state you
should check the OUT for the response.
http://camel.apache.org/content-enricher.html

Yeah, I actually think the documentation of the content-enricher is quite sparse, a simple example AggregationStrategy might help a lot:


public class ProgramMerger implements AggregationStrategy {

        public Exchange aggregate(Exchange original, Exchange resource) {

                Document org = original.getIn().getBody(Document.class);
                Document additional = resource.getOut().getBody(Document.class);

                
                // create the new 'enriched' message
                Document result = ...;
                original.getOut().setBody(result);
                
                return original;
        }

}




On Tue, Mar 3, 2009 at 7:02 AM, Martin Krasser <d...@martin- krasser.de>wrote:

Hi Peter,

the route looks good to me.

* The in-messages of the original exchange and the resource exchange are always identical. The out-message of the resource exchange will contain the
result from 'direct:enrichMovie'.
* What message exchange pattern do you use when you test (print the
contents of) the 'direct:enrichMovie' route?
* Is the CinemaQueryAssembler thread-safe? You're doing parallel processing
of split messages.

Martin

Peter Maas schrieb:

 Hi list,

I'm developing a proof-of-concept application using Camel 2.0. Everything seems to work just find... except for the content-enricher. Both the resource exchange passed to my AggregationStrategy look identical. Whilst if I print the contents of the resource route I the the correct xml in the
exchange after calling the http service. My routes look like this:

       // split messages when received from the incoming mq
       // enrich if move. Always stor in database
       from("activemq:topic:incomingVPROGuide")
.split(vpro.xpath("// vpro:program")).parallelProcessing(true)
           .choice()
.when(vpro.xpath("/vpro:progr...@ismovie = 'true']"))
               .enrich("direct:enrichMovie", new ProgramMerger())
                   .to("direct:save")
               .otherwise().to("direct:save");
           // the generic save route
       from("direct:save")
           .setHeader("xmldb.resource.name",
vpro.xpath("//vpro:program/@id", String.class))
           .process(sanitize("xmldb.resource.name"))
           .to("xmldb:/programs");
             // route to retrieve data from external
       // rest service
       from("direct:enrichMovie")
           .setHeader("title",
vpro.xpath("/vpro:program/vpro:title[1]/text()", String.class))
           .setHeader("director", vpro.xpath("//vpro:pers...@urn =
'urn:mpeg:mpeg7:cs:RoleCS:2001:DIRECTOR' and 1]/vpro:familyName/ text()",
String.class))
           .setHeader("year", vpro.xpath("//vpro:year[1]/text()",
String.class))
           .process(new CinemaQueryAssembler())
.to("http://cinema.test.vpro.nl/api/1/rest/movie/find.xml ");

The xmldb producer is a patched version of the camel-extra project.
Everything works fine, apart from the enricher...

Any hints?

kind regards,

Peter Maas







--
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/

Reply via email to