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 <[email protected]>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 <[email protected]
>> >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
>>>
>>>
>>>
>>
>>
>>
>

Reply via email to