You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Stephen Cameron <st...@gmail.com> on 2014/05/04 15:14:53 UTC

Jetty as Camel Consumer doing HTTP POST request.

Hi,

I thought to try doing a simple HTTP POST to a web-service using Camel.

My understanding is that this is a Jetty endpoint acting as a Consumer, I
simply pass the URL of the webservice to getting and process the response
as the start of my route.

But how can I do a POST and set the body of the request that Jetty sends to
the (producer) web-service to be the content of an XML file?

[This relates to my previous issue with CXF, I was hoping to sidestep CXF
for a brief moment, but nothing is simple]

Re: Jetty as Camel Consumer doing HTTP POST request.

Posted by Willem Jiang <wi...@gmail.com>.
Yeah, the Jetty Producer is a processor, it just send the message body which is file input stream in you route to the back end service.
If you uses CXF with MESSAGE data formate, camel-cxf producer can do the same thing as the Jetty producer does.


--  
Willem Jiang

Red Hat, Inc.
Web: http://www.redhat.com
Blog: http://willemjiang.blogspot.com (English)
http://jnn.iteye.com (Chinese)
Twitter: willemjiang  
Weibo: 姜宁willem



On May 5, 2014 at 9:56:47 AM, Stephen Cameron (steve.cameron.62@gmail.com) wrote:
> Hi Willem,
>  
> I have found that a simple way to do this is as below, I need to read up
> more on SOAP to understand why the recommended approach using CXF is
> failing. But for now this might be suitable.
>  
> Why this works is still unclear, I was imagining that jetty could be used
> as a consumer or producer, but in this route it's a processor, but a
> producer is a processor, so I guess that is why it works.
>  
> package temp.test;
>  
> import org.apache.camel.CamelContext;
> import org.apache.camel.Exchange;
> import org.apache.camel.builder.RouteBuilder;
> import org.apache.camel.impl.DefaultCamelContext;
>  
>  
> public class JettyRoute {
>  
> public static void main(String[] args) throws Exception {
>  
> CamelContext context = new DefaultCamelContext();
> context.addRoutes(new RouteBuilder(){
>  
> public void configure(){
> from("file://temp/soap/request?fileName=soap.xml&noop=true")
> .convertBodyTo(String.class,"UTF-8")
> .setHeader(Exchange.HTTP_METHOD,constant("POST"))
> .setHeader(Exchange.CONTENT_TYPE,constant("text/xml"))
> .to("jetty:http://xml.rothco.com/xmlfeed.asmx")
> .to("file://temp/soap/response?fileName=soap.xml");
> }
> });
> context.start();
> Thread.sleep(5000);
> context.stop();
> }
> }
>  
>  
> On Sun, May 4, 2014 at 11:19 PM, Willem Jiang wrote:
>  
> > You can user camel-jetty component to build up a proxy for you.
> > It just redirect the request( it could be GET request or POST request) to
> > the back end service, the request body can be send the back end service as
> > well.
> >
> > --
> > Willem Jiang
> >
> > Red Hat, Inc.
> > Web: http://www.redhat.com
> > Blog: http://willemjiang.blogspot.com (English)
> > http://jnn.iteye.com (Chinese)
> > Twitter: willemjiang
> > Weibo: 姜宁willem
> >
> >
> >
> > On May 4, 2014 at 9:15:21 PM, Stephen Cameron (steve.cameron.62@gmail.com)
> > wrote:
> > > Hi,
> > >
> > > I thought to try doing a simple HTTP POST to a web-service using Camel.
> > >
> > > My understanding is that this is a Jetty endpoint acting as a Consumer, I
> > > simply pass the URL of the webservice to getting and process the response
> > > as the start of my route.
> > >
> > > But how can I do a POST and set the body of the request that Jetty sends
> > to
> > > the (producer) web-service to be the content of an XML file?
> > >
> > > [This relates to my previous issue with CXF, I was hoping to sidestep CXF
> > > for a brief moment, but nothing is simple]
> > >
> >
> >
>  


Re: Jetty as Camel Consumer doing HTTP POST request.

Posted by Stephen Cameron <st...@gmail.com>.
Hi Willem,

I have found that a simple way to do this is as below, I need to read up
more on SOAP to understand why the recommended approach using CXF is
failing. But for now this might be suitable.

Why this works is still unclear, I was imagining that jetty could be used
as a consumer or producer, but in this route it's a processor, but a
producer is a processor, so I guess that is why it works.

package temp.test;

import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;


public class JettyRoute {

    public static void main(String[] args) throws Exception {

        CamelContext context = new DefaultCamelContext();
        context.addRoutes(new RouteBuilder(){

            public void configure(){
                from("file://temp/soap/request?fileName=soap.xml&noop=true")
                .convertBodyTo(String.class,"UTF-8")
                .setHeader(Exchange.HTTP_METHOD,constant("POST"))
                .setHeader(Exchange.CONTENT_TYPE,constant("text/xml"))
                .to("jetty:http://xml.rothco.com/xmlfeed.asmx")
                .to("file://temp/soap/response?fileName=soap.xml");
            }
        });
        context.start();
        Thread.sleep(5000);
        context.stop();
    }
}


On Sun, May 4, 2014 at 11:19 PM, Willem Jiang <wi...@gmail.com>wrote:

> You can user camel-jetty component to build up a proxy for you.
> It just redirect the request( it could be GET request or POST request) to
> the back end service, the request body can be send the back end service as
> well.
>
> --
> Willem Jiang
>
> Red Hat, Inc.
> Web: http://www.redhat.com
> Blog: http://willemjiang.blogspot.com (English)
> http://jnn.iteye.com (Chinese)
> Twitter: willemjiang
> Weibo: 姜宁willem
>
>
>
> On May 4, 2014 at 9:15:21 PM, Stephen Cameron (steve.cameron.62@gmail.com)
> wrote:
> > Hi,
> >
> > I thought to try doing a simple HTTP POST to a web-service using Camel.
> >
> > My understanding is that this is a Jetty endpoint acting as a Consumer, I
> > simply pass the URL of the webservice to getting and process the response
> > as the start of my route.
> >
> > But how can I do a POST and set the body of the request that Jetty sends
> to
> > the (producer) web-service to be the content of an XML file?
> >
> > [This relates to my previous issue with CXF, I was hoping to sidestep CXF
> > for a brief moment, but nothing is simple]
> >
>
>

Re: Jetty as Camel Consumer doing HTTP POST request.

Posted by Willem Jiang <wi...@gmail.com>.
You can user camel-jetty component to build up a proxy for you.
It just redirect the request( it could be GET request or POST request) to the back end service, the request body can be send the back end service as well.

--  
Willem Jiang

Red Hat, Inc.
Web: http://www.redhat.com
Blog: http://willemjiang.blogspot.com (English)
http://jnn.iteye.com (Chinese)
Twitter: willemjiang  
Weibo: 姜宁willem



On May 4, 2014 at 9:15:21 PM, Stephen Cameron (steve.cameron.62@gmail.com) wrote:
> Hi,
>  
> I thought to try doing a simple HTTP POST to a web-service using Camel.
>  
> My understanding is that this is a Jetty endpoint acting as a Consumer, I
> simply pass the URL of the webservice to getting and process the response
> as the start of my route.
>  
> But how can I do a POST and set the body of the request that Jetty sends to
> the (producer) web-service to be the content of an XML file?
>  
> [This relates to my previous issue with CXF, I was hoping to sidestep CXF
> for a brief moment, but nothing is simple]
>