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
>

Reply via email to