camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kitplummer <kitplum...@gmail.com>
Subject Re: Grails/Camel - pass queue message to HTTP POST?
Date Tue, 26 Jan 2010 23:45:21 GMT

Thanks Claus, that works.  But, I need to handle the returned contents from
my Route.  Just figured I needed the Exchange to get at the contents as a
String.

Kit


Claus Ibsen-2 wrote:
> 
> 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
> 
> 

-- 
View this message in context: http://old.nabble.com/Grails-Camel---pass-queue-message-to-HTTP-POST--tp27318113p27331778.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Mime
View raw message