You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Gabo Manuel <km...@solegysystems.com> on 2010/06/23 09:04:02 UTC
[CXF2.2.9] Failed to use semi-colon as delimiter
Hi All,
This is something we encountered by accident while trying to create a
client for mobile. Given the following:
@GET
@Path("/Bar/")
public Bar getBar(
@QueryParam("barID")
@WebParam(name="barID")
long barID)
throws Exception;
I invoke the following:
http://1.1.1.1/Bar/barID=1234;foo=321
I encounter the following:
Problem encountered: java.lang.NumberFormatException: For input
string: "1234;foo"
* org.apache.cxf.jaxrs.utils.InjectionUtils.handleParameter(InjectionUtils.java:295)
* org.apache.cxf.jaxrs.utils.InjectionUtils.createParameterObject(InjectionUtils.java:691)
* org.apache.cxf.jaxrs.utils.JAXRSUtils.readQueryString(JAXRSUtils.java:885)
* org.apache.cxf.jaxrs.utils.JAXRSUtils.createHttpParameterValue(JAXRSUtils.java:603)
* org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:573)
* org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:527)
* org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:230)
* org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
* org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
* org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:110)
* org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:98)
* org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:423)
* org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:139)
* org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:142)
* org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
* org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108)
* javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
* org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
* org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
* org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
* org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
* org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
* org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
* org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
* org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
* org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
* org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
* org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
* org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
* java.lang.Thread.run(Thread.java:595)
Caused by: For input string: "1234;foo"
* java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
* java.lang.Long.parseLong(Long.java:412)
* java.lang.Long.valueOf(Long.java:518)
* org.apache.cxf.common.util.PrimitiveUtils.read(PrimitiveUtils.java:69)
* org.apache.cxf.jaxrs.utils.InjectionUtils.handleParameter(InjectionUtils.java:286)
* org.apache.cxf.jaxrs.utils.InjectionUtils.createParameterObject(InjectionUtils.java:691)
* org.apache.cxf.jaxrs.utils.JAXRSUtils.readQueryString(JAXRSUtils.java:885)
* org.apache.cxf.jaxrs.utils.JAXRSUtils.createHttpParameterValue(JAXRSUtils.java:603)
* org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:573)
* org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:527)
* org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:230)
* org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
* org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
* org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:110)
* org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:98)
* org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:423)
* org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:139)
* org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:142)
* org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
* org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108)
* javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
* org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
* org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
* org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
* org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
* org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
* org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
* org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
* org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
* org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
* org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
* org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
* org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
* java.lang.Thread.run(Thread.java:595)
It seems CXF did not treat ';' as a valid query delimeter. Given that it
is not part of the generic syntax, but the value to be converted did not
include '=321' which indicates that '=' was considered as delimiter. ';'
and '=' are, in a sense, of the same level with regards to being a URI
delimiter.
Or I am completely missing a point. =D RFC's has too many words I have
trouble digesting...
Gabo
Reference: http://www.ietf.org/rfc/rfc3986.txt, section 2.2
Re: [CXF2.2.9] Failed to use semi-colon as delimiter
Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Gabo - as I said you could have it supported right now if you change
QueryParam to MatrixParam and use ';' as a separator between
/Bar<http://1.1.1.1/Bar;barID=1234;foo=321>and "barID" :
http://1.1.1.1/Bar;barID=1234;foo=321
or do some minor QUERY_STRING update in a filter
cheers, Sergey
On Thu, Jun 24, 2010 at 3:33 AM, Gabo Manuel <km...@solegysystems.com>wrote:
> Hi Sergey,
>
> Actually, the ';foo=321' is something the service does not use. It is just
> something that needs to be appended to the URI to make the hardware work.
> Something to do with the mobile phone being used.
>
> Currently, the work around we use is to prepend it with '&' like the
> following:
>
> barID=1234&;foo=321
>
>
> barID gets processed properly, the rest gets dropped since it is not
> needed. Just giving a shout out if its possible to support other recommended
> delimiters. Just in case we get clients that insist on using them. :)
>
> Thanks again,
>
> Gabo
>
>
> Sergey Beryozkin wrote:
>
>> I'm assuming it is
>>
>> http://1.1.1.1/Bar?barID=1234;foo=321
>>
>> Yeah, I can see ';' is recommended to be supported, not required. Some
>> property can be added to facilitate it.
>> in meantime, please try
>>
>> http://1.1.1.1/Bar;barID=1234;foo=321
>>
>> and use @MatrixParam("barID").
>>
>> if you must use
>>
>> http://1.1.1.1/Bar?barID=1234;foo=321
>>
>> then replace a Message.QUERY_STRING in a request filter by replacing ';'
>> with '?' in the original query
>>
>> <http://1.1.1.1/Bar/barID=1234;foo=321>cheers, Sergey
>>
>>
>> On Wed, Jun 23, 2010 at 8:04 AM, Gabo Manuel <kmanuel@solegysystems.com
>> >wrote:
>>
>>
>>
>>> Hi All,
>>>
>>> This is something we encountered by accident while trying to create a
>>> client for mobile. Given the following:
>>>
>>> @GET
>>> @Path("/Bar/")
>>> public Bar getBar(
>>> @QueryParam("barID")
>>> @WebParam(name="barID")
>>> long barID)
>>> throws Exception;
>>>
>>>
>>> I invoke the following:
>>>
>>> http://1.1.1.1/Bar/barID=1234;foo=321
>>>
>>> I encounter the following:
>>>
>>>
>>> Problem encountered: java.lang.NumberFormatException: For input
>>> string: "1234;foo"
>>>
>>> *
>>>
>>> org.apache.cxf.jaxrs.utils.InjectionUtils.handleParameter(InjectionUtils.java:295)
>>> *
>>>
>>> org.apache.cxf.jaxrs.utils.InjectionUtils.createParameterObject(InjectionUtils.java:691)
>>> *
>>>
>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.readQueryString(JAXRSUtils.java:885)
>>> *
>>>
>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.createHttpParameterValue(JAXRSUtils.java:603)
>>> *
>>>
>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:573)
>>> *
>>>
>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:527)
>>> *
>>>
>>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:230)
>>> *
>>>
>>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
>>> *
>>>
>>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
>>> *
>>>
>>> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:110)
>>> *
>>>
>>> org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:98)
>>> *
>>>
>>> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:423)
>>> *
>>>
>>> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:139)
>>> *
>>>
>>> org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:142)
>>> *
>>>
>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
>>> *
>>>
>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108)
>>> * javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>>> *
>>>
>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
>>> *
>>>
>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>>> *
>>>
>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>> *
>>>
>>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
>>> *
>>>
>>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
>>> *
>>>
>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>>> *
>>>
>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>>> *
>>>
>>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>>> *
>>>
>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
>>> *
>>>
>>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
>>> *
>>>
>>> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
>>> *
>>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
>>> * java.lang.Thread.run(Thread.java:595)
>>>
>>>
>>> Caused by: For input string: "1234;foo"
>>>
>>> *
>>>
>>> java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
>>> * java.lang.Long.parseLong(Long.java:412)
>>> * java.lang.Long.valueOf(Long.java:518)
>>> * org.apache.cxf.common.util.PrimitiveUtils.read(PrimitiveUtils.java:69)
>>> *
>>>
>>> org.apache.cxf.jaxrs.utils.InjectionUtils.handleParameter(InjectionUtils.java:286)
>>> *
>>>
>>> org.apache.cxf.jaxrs.utils.InjectionUtils.createParameterObject(InjectionUtils.java:691)
>>> *
>>>
>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.readQueryString(JAXRSUtils.java:885)
>>> *
>>>
>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.createHttpParameterValue(JAXRSUtils.java:603)
>>> *
>>>
>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:573)
>>> *
>>>
>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:527)
>>> *
>>>
>>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:230)
>>> *
>>>
>>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
>>> *
>>>
>>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
>>> *
>>>
>>> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:110)
>>> *
>>>
>>> org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:98)
>>> *
>>>
>>> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:423)
>>> *
>>>
>>> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:139)
>>> *
>>>
>>> org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:142)
>>> *
>>>
>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
>>> *
>>>
>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108)
>>> * javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>>> *
>>>
>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
>>> *
>>>
>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>>> *
>>>
>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>>> *
>>>
>>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
>>> *
>>>
>>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
>>> *
>>>
>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>>> *
>>>
>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>>> *
>>>
>>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>>> *
>>>
>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
>>> *
>>>
>>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
>>> *
>>>
>>> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
>>> *
>>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
>>> * java.lang.Thread.run(Thread.java:595)
>>>
>>> It seems CXF did not treat ';' as a valid query delimeter. Given that it
>>> is
>>> not part of the generic syntax, but the value to be converted did not
>>> include '=321' which indicates that '=' was considered as delimiter. ';'
>>> and
>>> '=' are, in a sense, of the same level with regards to being a URI
>>> delimiter.
>>>
>>> Or I am completely missing a point. =D RFC's has too many words I have
>>> trouble digesting...
>>>
>>> Gabo
>>>
>>>
>>> Reference: http://www.ietf.org/rfc/rfc3986.txt, section 2.2
>>>
>>>
>>>
>>
>>
>>
>
Re: [CXF2.2.9] Failed to use semi-colon as delimiter
Posted by Gabo Manuel <km...@solegysystems.com>.
Hi Sergey,
Actually, the ';foo=321' is something the service does not use. It is
just something that needs to be appended to the URI to make the hardware
work. Something to do with the mobile phone being used.
Currently, the work around we use is to prepend it with '&' like the
following:
barID=1234&;foo=321
barID gets processed properly, the rest gets dropped since it is not
needed. Just giving a shout out if its possible to support other
recommended delimiters. Just in case we get clients that insist on using
them. :)
Thanks again,
Gabo
Sergey Beryozkin wrote:
> I'm assuming it is
>
> http://1.1.1.1/Bar?barID=1234;foo=321
>
> Yeah, I can see ';' is recommended to be supported, not required. Some
> property can be added to facilitate it.
> in meantime, please try
>
> http://1.1.1.1/Bar;barID=1234;foo=321
>
> and use @MatrixParam("barID").
>
> if you must use
>
> http://1.1.1.1/Bar?barID=1234;foo=321
>
> then replace a Message.QUERY_STRING in a request filter by replacing ';'
> with '?' in the original query
>
> <http://1.1.1.1/Bar/barID=1234;foo=321>cheers, Sergey
>
> On Wed, Jun 23, 2010 at 8:04 AM, Gabo Manuel <km...@solegysystems.com>wrote:
>
>
>> Hi All,
>>
>> This is something we encountered by accident while trying to create a
>> client for mobile. Given the following:
>>
>> @GET
>> @Path("/Bar/")
>> public Bar getBar(
>> @QueryParam("barID")
>> @WebParam(name="barID")
>> long barID)
>> throws Exception;
>>
>>
>> I invoke the following:
>>
>> http://1.1.1.1/Bar/barID=1234;foo=321
>>
>> I encounter the following:
>>
>>
>> Problem encountered: java.lang.NumberFormatException: For input
>> string: "1234;foo"
>>
>> *
>> org.apache.cxf.jaxrs.utils.InjectionUtils.handleParameter(InjectionUtils.java:295)
>> *
>> org.apache.cxf.jaxrs.utils.InjectionUtils.createParameterObject(InjectionUtils.java:691)
>> *
>> org.apache.cxf.jaxrs.utils.JAXRSUtils.readQueryString(JAXRSUtils.java:885)
>> *
>> org.apache.cxf.jaxrs.utils.JAXRSUtils.createHttpParameterValue(JAXRSUtils.java:603)
>> *
>> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:573)
>> *
>> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:527)
>> *
>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:230)
>> *
>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
>> *
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
>> *
>> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:110)
>> *
>> org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:98)
>> *
>> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:423)
>> *
>> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:139)
>> *
>> org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:142)
>> *
>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
>> *
>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108)
>> * javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>> *
>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
>> *
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>> *
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>> *
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
>> *
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
>> *
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>> *
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>> *
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>> *
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
>> *
>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
>> *
>> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
>> * org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
>> * java.lang.Thread.run(Thread.java:595)
>>
>>
>> Caused by: For input string: "1234;foo"
>>
>> *
>> java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
>> * java.lang.Long.parseLong(Long.java:412)
>> * java.lang.Long.valueOf(Long.java:518)
>> * org.apache.cxf.common.util.PrimitiveUtils.read(PrimitiveUtils.java:69)
>> *
>> org.apache.cxf.jaxrs.utils.InjectionUtils.handleParameter(InjectionUtils.java:286)
>> *
>> org.apache.cxf.jaxrs.utils.InjectionUtils.createParameterObject(InjectionUtils.java:691)
>> *
>> org.apache.cxf.jaxrs.utils.JAXRSUtils.readQueryString(JAXRSUtils.java:885)
>> *
>> org.apache.cxf.jaxrs.utils.JAXRSUtils.createHttpParameterValue(JAXRSUtils.java:603)
>> *
>> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:573)
>> *
>> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:527)
>> *
>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:230)
>> *
>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
>> *
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
>> *
>> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:110)
>> *
>> org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:98)
>> *
>> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:423)
>> *
>> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:139)
>> *
>> org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:142)
>> *
>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
>> *
>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108)
>> * javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>> *
>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
>> *
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>> *
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>> *
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
>> *
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
>> *
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>> *
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>> *
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>> *
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
>> *
>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
>> *
>> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
>> * org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
>> * java.lang.Thread.run(Thread.java:595)
>>
>> It seems CXF did not treat ';' as a valid query delimeter. Given that it is
>> not part of the generic syntax, but the value to be converted did not
>> include '=321' which indicates that '=' was considered as delimiter. ';' and
>> '=' are, in a sense, of the same level with regards to being a URI
>> delimiter.
>>
>> Or I am completely missing a point. =D RFC's has too many words I have
>> trouble digesting...
>>
>> Gabo
>>
>>
>> Reference: http://www.ietf.org/rfc/rfc3986.txt, section 2.2
>>
>>
>
>
Re: [CXF2.2.9] Failed to use semi-colon as delimiter
Posted by Sergey Beryozkin <sb...@gmail.com>.
I'm assuming it is
http://1.1.1.1/Bar?barID=1234;foo=321<http://1.1.1.1/Bar/barID=1234;foo=321>
Yeah, I can see ';' is recommended to be supported, not required. Some
property can be added to facilitate it.
in meantime, please try
http://1.1.1.1/Bar;barID=1234;foo=321<http://1.1.1.1/Bar/barID=1234;foo=321>
and use @MatrixParam("barID").
if you must use
http://1.1.1.1/Bar?barID=1234;foo=321<http://1.1.1.1/Bar/barID=1234;foo=321>
then replace a Message.QUERY_STRING in a request filter by replacing ';'
with '?' in the original query
<http://1.1.1.1/Bar/barID=1234;foo=321>cheers, Sergey
On Wed, Jun 23, 2010 at 8:04 AM, Gabo Manuel <km...@solegysystems.com>wrote:
> Hi All,
>
> This is something we encountered by accident while trying to create a
> client for mobile. Given the following:
>
> @GET
> @Path("/Bar/")
> public Bar getBar(
> @QueryParam("barID")
> @WebParam(name="barID")
> long barID)
> throws Exception;
>
>
> I invoke the following:
>
> http://1.1.1.1/Bar/barID=1234;foo=321
>
> I encounter the following:
>
>
> Problem encountered: java.lang.NumberFormatException: For input
> string: "1234;foo"
>
> *
> org.apache.cxf.jaxrs.utils.InjectionUtils.handleParameter(InjectionUtils.java:295)
> *
> org.apache.cxf.jaxrs.utils.InjectionUtils.createParameterObject(InjectionUtils.java:691)
> *
> org.apache.cxf.jaxrs.utils.JAXRSUtils.readQueryString(JAXRSUtils.java:885)
> *
> org.apache.cxf.jaxrs.utils.JAXRSUtils.createHttpParameterValue(JAXRSUtils.java:603)
> *
> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:573)
> *
> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:527)
> *
> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:230)
> *
> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
> *
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
> *
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:110)
> *
> org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:98)
> *
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:423)
> *
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:139)
> *
> org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:142)
> *
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
> *
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108)
> * javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
> *
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
> *
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
> *
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> *
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
> *
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
> *
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
> *
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> *
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> *
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
> *
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
> *
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
> * org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
> * java.lang.Thread.run(Thread.java:595)
>
>
> Caused by: For input string: "1234;foo"
>
> *
> java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
> * java.lang.Long.parseLong(Long.java:412)
> * java.lang.Long.valueOf(Long.java:518)
> * org.apache.cxf.common.util.PrimitiveUtils.read(PrimitiveUtils.java:69)
> *
> org.apache.cxf.jaxrs.utils.InjectionUtils.handleParameter(InjectionUtils.java:286)
> *
> org.apache.cxf.jaxrs.utils.InjectionUtils.createParameterObject(InjectionUtils.java:691)
> *
> org.apache.cxf.jaxrs.utils.JAXRSUtils.readQueryString(JAXRSUtils.java:885)
> *
> org.apache.cxf.jaxrs.utils.JAXRSUtils.createHttpParameterValue(JAXRSUtils.java:603)
> *
> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:573)
> *
> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:527)
> *
> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:230)
> *
> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
> *
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
> *
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:110)
> *
> org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:98)
> *
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:423)
> *
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:139)
> *
> org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:142)
> *
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
> *
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108)
> * javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
> *
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
> *
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
> *
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> *
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
> *
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
> *
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
> *
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> *
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> *
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
> *
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
> *
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
> * org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
> * java.lang.Thread.run(Thread.java:595)
>
> It seems CXF did not treat ';' as a valid query delimeter. Given that it is
> not part of the generic syntax, but the value to be converted did not
> include '=321' which indicates that '=' was considered as delimiter. ';' and
> '=' are, in a sense, of the same level with regards to being a URI
> delimiter.
>
> Or I am completely missing a point. =D RFC's has too many words I have
> trouble digesting...
>
> Gabo
>
>
> Reference: http://www.ietf.org/rfc/rfc3986.txt, section 2.2
>