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