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
>