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