You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by rvanluinen <rv...@gmail.com> on 2014/11/18 04:31:32 UTC

Servlet Component with REST DSL: problem in URI query string construction?

I have been experimenting with Camel 2.14.0 and the REST DSL using the
servlet component.
I have followed the code in the example, however for reasons of my own I'd
like to use a different servlet name than the default of CamelServlet. This
works fine with vanilla servlet:/// URIs - add ?servletName=my-servlet and
all is good.

To do this with the REST DSL I use the following:

restConfiguration().component("servlet").endpointProperty("servletName",
"my-servlet");
rest("/rest").post().otherDSLStatements;

Contrary to what I thought, endpointProperty and not componentProperty sees
this property added to the URI. 

The problem is, it doesn't work.
I stepped through the code and it appears the problem is that the URI that
gets constructed for my post prior to being turned into a rest:// URI looks
something like:
servlet:///rest?httpMethodRestrict=POST?servletName=my-servlet.

Which doesn't get correctly parsed by URISupport.parseQuery() since it
doesn't separate the second key/value pair using an ampersand ('&') as you
might expect.

The code from ServletComponent looks like this (lines 194-197):

        String url = "servlet:///%s?httpMethodRestrict=%s";
        if (!query.isEmpty()) {
            url = url + "?" + query;
        }

I can also confirm that using the debugger and changing the second '?' to
'&' results in the behaviour that I'd expect to see, which is that
my-servlet actually handles the request.

I don't think I'm doing anything screwy here, can anyone else confirm
they've had similar problems or not? I think it's a bug but following
etiquette I'm posting here first and not raising issues in Jira immediately.

Regards,
Rod



--
View this message in context: http://camel.465427.n5.nabble.com/Servlet-Component-with-REST-DSL-problem-in-URI-query-string-construction-tp5759228.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: Servlet Component with REST DSL: problem in URI query string construction?

Posted by Willem Jiang <wi...@gmail.com>.
I’m afraid you have to wait for the release of Camel 2.14.1 which will be released in next month.

--  
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 November 18, 2014 at 5:48:56 PM, Rodney van Luinen (rvanluinen@gmail.com) wrote:
> Thanks Willem,
>  
> I did try a search in Jira, when I followed the link you provided it's no
> surprise I didn't find the issue since I was searching on all the wrong
> terms! :-)
>  
> I had things like servlet query string rest dsl, none of which matched.
> Remedial search school for me I guess ;-)
> In terms of how I can bring this fix into my application, is there a point
> release I can declare in maven? That is, 2.14.1 or similar? I am unable to
> use a SNAPSHOT release or a custom patched version in my application for
> policy reasons. If it's not possible then no problem I can work around it
> in the short term.
>  
> Thanks again.
>  
> Regards,
> Rod.
>  
> On 18 November 2014 17:52, Willem Jiang wrote:
>  
> > It’s a bug of Camel[1] which has been fixed few weeks ago.
> >
> > [1]https://issues.apache.org/jira/browse/CAMEL-7971
> >
> > --
> > 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 November 18, 2014 at 11:32:30 AM, rvanluinen (rvanluinen@gmail.com)
> > wrote:
> > > I have been experimenting with Camel 2.14.0 and the REST DSL using the
> > > servlet component.
> > > I have followed the code in the example, however for reasons of my own
> > I'd
> > > like to use a different servlet name than the default of CamelServlet.
> > This
> > > works fine with vanilla servlet:/// URIs - add ?servletName=my-servlet
> > and
> > > all is good.
> > >
> > > To do this with the REST DSL I use the following:
> > >
> > > restConfiguration().component("servlet").endpointProperty("servletName",  
> > > "my-servlet");
> > > rest("/rest").post().otherDSLStatements;
> > >
> > > Contrary to what I thought, endpointProperty and not componentProperty
> > sees
> > > this property added to the URI.
> > >
> > > The problem is, it doesn't work.
> > > I stepped through the code and it appears the problem is that the URI
> > that
> > > gets constructed for my post prior to being turned into a rest:// URI
> > looks
> > > something like:
> > > servlet:///rest?httpMethodRestrict=POST?servletName=my-servlet.
> > >
> > > Which doesn't get correctly parsed by URISupport.parseQuery() since it
> > > doesn't separate the second key/value pair using an ampersand ('&') as
> > you
> > > might expect.
> > >
> > > The code from ServletComponent looks like this (lines 194-197):
> > >
> > > String url = "servlet:///%s?httpMethodRestrict=%s";
> > > if (!query.isEmpty()) {
> > > url = url + "?" + query;
> > > }
> > >
> > > I can also confirm that using the debugger and changing the second '?' to
> > > '&' results in the behaviour that I'd expect to see, which is that
> > > my-servlet actually handles the request.
> > >
> > > I don't think I'm doing anything screwy here, can anyone else confirm
> > > they've had similar problems or not? I think it's a bug but following
> > > etiquette I'm posting here first and not raising issues in Jira
> > immediately.
> > >
> > > Regards,
> > > Rod
> > >
> > >
> > >
> > > --
> > > View this message in context:
> > http://camel.465427.n5.nabble.com/Servlet-Component-with-REST-DSL-problem-in-URI-query-string-construction-tp5759228.html  
> > > Sent from the Camel - Users mailing list archive at Nabble.com.
> > >
> >
> >
>  


Re: Servlet Component with REST DSL: problem in URI query string construction?

Posted by Rodney van Luinen <rv...@gmail.com>.
Thanks Willem,

I did try a search in Jira, when I followed the link you provided it's no
surprise I didn't find the issue since I was searching on all the wrong
terms! :-)

I had things like servlet query string rest dsl, none of which matched.
Remedial search school for me I guess ;-)
In terms of how I can bring this fix into my application, is there a point
release I can declare in maven? That is, 2.14.1 or similar? I am unable to
use a SNAPSHOT release or a custom patched version in my application for
policy reasons. If it's not possible then no problem I can work around it
in the short term.

Thanks again.

Regards,
Rod.

On 18 November 2014 17:52, Willem Jiang <wi...@gmail.com> wrote:

> It’s a bug of Camel[1] which has been fixed few weeks ago.
>
> [1]https://issues.apache.org/jira/browse/CAMEL-7971
>
> --
> 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 November 18, 2014 at 11:32:30 AM, rvanluinen (rvanluinen@gmail.com)
> wrote:
> > I have been experimenting with Camel 2.14.0 and the REST DSL using the
> > servlet component.
> > I have followed the code in the example, however for reasons of my own
> I'd
> > like to use a different servlet name than the default of CamelServlet.
> This
> > works fine with vanilla servlet:/// URIs - add ?servletName=my-servlet
> and
> > all is good.
> >
> > To do this with the REST DSL I use the following:
> >
> > restConfiguration().component("servlet").endpointProperty("servletName",
> > "my-servlet");
> > rest("/rest").post().otherDSLStatements;
> >
> > Contrary to what I thought, endpointProperty and not componentProperty
> sees
> > this property added to the URI.
> >
> > The problem is, it doesn't work.
> > I stepped through the code and it appears the problem is that the URI
> that
> > gets constructed for my post prior to being turned into a rest:// URI
> looks
> > something like:
> > servlet:///rest?httpMethodRestrict=POST?servletName=my-servlet.
> >
> > Which doesn't get correctly parsed by URISupport.parseQuery() since it
> > doesn't separate the second key/value pair using an ampersand ('&') as
> you
> > might expect.
> >
> > The code from ServletComponent looks like this (lines 194-197):
> >
> > String url = "servlet:///%s?httpMethodRestrict=%s";
> > if (!query.isEmpty()) {
> > url = url + "?" + query;
> > }
> >
> > I can also confirm that using the debugger and changing the second '?' to
> > '&' results in the behaviour that I'd expect to see, which is that
> > my-servlet actually handles the request.
> >
> > I don't think I'm doing anything screwy here, can anyone else confirm
> > they've had similar problems or not? I think it's a bug but following
> > etiquette I'm posting here first and not raising issues in Jira
> immediately.
> >
> > Regards,
> > Rod
> >
> >
> >
> > --
> > View this message in context:
> http://camel.465427.n5.nabble.com/Servlet-Component-with-REST-DSL-problem-in-URI-query-string-construction-tp5759228.html
> > Sent from the Camel - Users mailing list archive at Nabble.com.
> >
>
>

Re: Servlet Component with REST DSL: problem in URI query string construction?

Posted by Willem Jiang <wi...@gmail.com>.
It’s a bug of Camel[1] which has been fixed few weeks ago.

[1]https://issues.apache.org/jira/browse/CAMEL-7971

--  
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 November 18, 2014 at 11:32:30 AM, rvanluinen (rvanluinen@gmail.com) wrote:
> I have been experimenting with Camel 2.14.0 and the REST DSL using the
> servlet component.
> I have followed the code in the example, however for reasons of my own I'd
> like to use a different servlet name than the default of CamelServlet. This
> works fine with vanilla servlet:/// URIs - add ?servletName=my-servlet and
> all is good.
>  
> To do this with the REST DSL I use the following:
>  
> restConfiguration().component("servlet").endpointProperty("servletName",  
> "my-servlet");
> rest("/rest").post().otherDSLStatements;
>  
> Contrary to what I thought, endpointProperty and not componentProperty sees
> this property added to the URI.
>  
> The problem is, it doesn't work.
> I stepped through the code and it appears the problem is that the URI that
> gets constructed for my post prior to being turned into a rest:// URI looks
> something like:
> servlet:///rest?httpMethodRestrict=POST?servletName=my-servlet.
>  
> Which doesn't get correctly parsed by URISupport.parseQuery() since it
> doesn't separate the second key/value pair using an ampersand ('&') as you
> might expect.
>  
> The code from ServletComponent looks like this (lines 194-197):
>  
> String url = "servlet:///%s?httpMethodRestrict=%s";
> if (!query.isEmpty()) {
> url = url + "?" + query;
> }
>  
> I can also confirm that using the debugger and changing the second '?' to
> '&' results in the behaviour that I'd expect to see, which is that
> my-servlet actually handles the request.
>  
> I don't think I'm doing anything screwy here, can anyone else confirm
> they've had similar problems or not? I think it's a bug but following
> etiquette I'm posting here first and not raising issues in Jira immediately.
>  
> Regards,
> Rod
>  
>  
>  
> --
> View this message in context: http://camel.465427.n5.nabble.com/Servlet-Component-with-REST-DSL-problem-in-URI-query-string-construction-tp5759228.html  
> Sent from the Camel - Users mailing list archive at Nabble.com.
>