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
> 

Reply via email to