camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: Grails/Camel - pass queue message to HTTP POST?
Date Tue, 26 Jan 2010 18:31:41 GMT
Can you not just do a

from(seda).to(http);

The camel http component will automatic use POST if no uri parameters.
You should also be able to configure in the uri for the http endpoint
that it should use POST


On Tue, Jan 26, 2010 at 2:37 PM, kitplummer <kitplummer@gmail.com> wrote:
>
> Getting closer:
>
> import org.apache.camel.Exchange
> import org.apache.camel.Processor
> import org.apache.camel.Message
>
> class JobRoute {
>   def configure = {
>       println "Setting JobRoute Camel Router..."
>       from("seda:my.queue") {
>           Exchange exchange =
> template.send("http://localhost:4567/jodmock",
>               [
>                   process: { exchange ->
>                       exchange.getIn().setHeader(Exchange.HTTP_METHOD,
> constant(POST));
>                   }
>               ] as Processor
>           );
>           Message out = exchange.getOut();
>           int responseCode =
> out.getHeader(HttpProducer.HTTP_RESPONSE_CODE, Integer.class);
>       }
>   }
> }
>
> Produces:
>
> Caused by: groovy.lang.MissingMethodException: No signature of method:
> org.ix.grails.plugins.camel.GrailsRouteBuilder.from() is applicable for
> argument types: (java.lang.String, JobRoute$_closure1_closure2) values:
> [seda:my.queue, JobRoute$_closure1_closure2@55661f7b]
>
> Run-time error, so we're past the compilation problem.  I guess it doesn't
> like the second closure.  :)
>
> Thanks for the help.  Still curious about how to the get the my.queue
> message into the body of the In's POST.
>
> Kit
>
> wkeenan wrote:
>>
>> On Tue, Jan 26, 2010 at 5:25 AM, kitplummer <kitplummer@gmail.com> wrote:
>>
>>>
>>> Ok, just thinking at this point...and I don't yet understand Camel well
>>> enough.  So, I need some insight.
>>>
>>> What I want to do is use Camel to facilitate some back-end business logic
>>> in
>>> my Grails app.  Here's the general idea.  From my Grails app I send a
>>> block
>>> of text to a Route.  I want this route to be configured to take in a
>>> block
>>> of raw text (seda:my.queue) and send my.queue as the body of an HTTP POST
>>> to
>>> an external service - and consume the returned body, sending it back to a
>>> Grails service.  I have the last part figured, but missing the Camel
>>> guts.
>>>
>>> Here's where I'm starting:
>>>
>>> class JobRoute {
>>>    def configure = {
>>>        println "Setting JobRoute Camel Router..."
>>>        from("seda:my.queue") {
>>>            Exchange exchange =
>>> template.send("http://localhost:4567/jodmock",
>>>                new Processor() {
>>>                    process(exchange) {
>>>                        exchange.getIn().setHeader(Exchange.HTTP_METHOD,
>>> constant(org.apache.camel.component.http.HttpMethods.POST));
>>>                    }
>>>                }
>>>            );
>>>            Message out = exchange.getOut();
>>>            int responseCode =
>>> out.getHeader(HttpProducer.HTTP_RESPONSE_CODE, Integer.class);
>>>        }
>>>    }
>>> }
>>>
>>> The "new Processor() instantiation barfs during compile with:
>>>
>>> [groovyc]
>>> /Users/kplummer/Development/ts/grails-app/routes/JobRoute.groovy:
>>> 9: You cannot create an instance from the abstract interface
>>> 'org.apache.camel.Processor'.
>>>  [groovyc]  @ line 9, column 17.
>>>  [groovyc]                    new Processor() {
>>>  [groovyc]
>>>
>>>
>> try this:
>>
>> class JobRoute extends RouteBuilder {
>>    void configure  {
>>        println "Setting JobRoute Camel Router..."
>>        from("seda:my.queue") {
>>            Exchange exchange =
>> template.send("http://localhost:4567/jodmock
>> ",
>>                [
>>                    process: { exchange ->
>>                        exchange.getIn().setHeader(Exchange.HTTP_METHOD,
>> constant(org.apache.camel.component.http.HttpMethods.POST));
>>                    }
>>                ] as Processor
>>            );
>>            Message out = exchange.getOut();
>>            int responseCode =
>> out.getHeader(HttpProducer.HTTP_RESPONSE_CODE, Integer.class);
>>        }
>>    }
>> }
>>
>>
>>
>>> And, I haven't figured out to get the my.queue to the contents of the In.
>>>
>>> Help!
>>>
>>> Thanks.
>>> Kit
>>> --
>>> View this message in context:
>>> http://old.nabble.com/Grails-Camel---pass-queue-message-to-HTTP-POST--tp27318113p27318113.html
>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>
>>>
>>
>>
>
> --
> View this message in context: http://old.nabble.com/Grails-Camel---pass-queue-message-to-HTTP-POST--tp27318113p27322707.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>



-- 
Claus Ibsen
Apache Camel Committer

Author of Camel in Action: http://www.manning.com/ibsen/
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus

Mime
View raw message