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