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 >>> >>> >>> >> >> >> >
