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


Reply via email to