On Fri, 2009-09-11 at 15:31 -0400, Scott Parkerson wrote:
> On Thu, 2009-09-10 at 10:10 +0200, Christian Schneider wrote:
>
> > Ok .. now I understand. You want to send the pojo to ActiveMQ not the
> > xml. In this case you build the service with CXF and can then use
> > Camel to simply send the pojo to ActiveMQ. You can do this by:
> >
> > public class MyJsonServiceImpl implements MyJsonService {
> > @EndpointInject(uri="activemq:myqueue")
> > ProducerTemplate producer;
> >
> > public void doSomething(MyObject o) {
> > producer.sendBody(o);
> > }
> > }
>
> Ok, this is closer to what I want, but not quite there. I'm using the
> example from the pojo-producing page, and sending the result to a seda
> queue which is then picked up by a content-based router. Here's the
> code:
>
> (the interface code)
>
> @InOnly
> public interface WebRequestProducer
> {
> public void sendToWebRouter(Object o);
> }
>
> (the webrouter configuration)
>
> public void configure() throws Exception
> {
>
> getContext().addInterceptStrategy(new Tracer());
>
> from("seda:webrequestqueue")
> .choice()
> .when(body().isInstanceOf(SendSMSRequest.class))
> .to("activemq:queue:send_sms_req")
> .when(body().isInstanceOf(IncomingSMSRequest.class))
> .to("activemq:queue:inc_sms_req")
> .otherwise().throwFault("Blah." +
> body().toString());
> }
>
> (and finally, the CXF method that calls it)
>
> @Produce(uri = "seda:webrequestqueue")
> private WebRequestProducer webRequestProducer;
>
> @POST
> @Path("/sendfoo")
> public Response sendFoo(SendFooRequest sendFooRequest)
> {
>
> // TODO: validation code, etc.
> webRequestProducer.sendToWebRouter(sendFooRequest);
>
> // Return HTTP response 202 Accepted
> return Response.status(202).build();
>
> }
>
>
>
> Problem is, my message that is generated is a BeanInvocation message
> containing the abstract method invocation, not *just* the POJO.
Ok, now had I tried your actual suggestion using @EndpointInject things
would have gone more smoothly for me. I changed my code to:
@EndpointInject(uri = "seda:webrequestqueue")
private ProducerTemplate<Exchange> webRequestProducer;
.
.
.
webRequestProducer.sendBody(sendFooRequest);
and all is well.
I guess my only complaint is that this doesn't "hide middleware" as
suggested in the docs. Then again, perhaps I'll eventually come around
to binding a cxfrs: URI to my routes. :D
Any further suggestions?
--sgp
>
> I'm beginning to think I've got the wrong approach to this, but humor me
> and tell me how I can just send the Foo object.
>
> --sgp
>