Tadayoshi Sato created CXF-7043:
-----------------------------------

             Summary: JAX-RS endpoints cannot handle encoded URL when used with 
continuation and servlet transport
                 Key: CXF-7043
                 URL: https://issues.apache.org/jira/browse/CXF-7043
             Project: CXF
          Issue Type: Bug
          Components: JAX-RS, Transports
    Affects Versions: 3.1.7
            Reporter: Tadayoshi Sato


Suppose a JAX-RS endpoint like below uses CXF Continuations API to handle 
requests asynchronously:
{code:java}
@Path("/greeting")
public class GreetingService {
    @GET @Path("/hello/{name}")
    public String hello(@PathParam("name") String name) {
{code}
When this endpoint is invoked with an URL containing encoded characters (e.g. 
{{"%20"}}):
{code}
http://localhost:9000/greeting/hello/A%20B%20C
{code}
it fails to handle it and throws the following exception:
{code}
java.lang.IllegalArgumentException: Illegal character in path at index 38: 
http://localhost:9000/greeting/hello/A B C
        at java.net.URI.create(URI.java:852)
        at 
org.apache.cxf.transport.servlet.BaseUrlHelper.getBaseURL(BaseUrlHelper.java:48)
        at 
org.apache.cxf.transport.servlet.ServletController.getBaseURL(ServletController.java:74)
        at 
org.apache.cxf.transport.servlet.ServletController.updateDestination(ServletController.java:83)
        at 
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:207)
        at 
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
        at 
org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:180)
        at 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:299)
        at 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:223)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
        at 
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:274)
        at 
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
        at 
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)
        at 
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:517)
        at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
        at org.eclipse.jetty.server.Server.handleAsync(Server.java:549)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:318)
        at org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:262)
        at 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
        at 
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.URISyntaxException: Illegal character in path at index 38: 
http://localhost:9000/greeting/hello/A B C
        at java.net.URI$Parser.fail(URI.java:2848)
        at java.net.URI$Parser.checkChars(URI.java:3021)
        at java.net.URI$Parser.parseHierarchical(URI.java:3105)
        at java.net.URI$Parser.parse(URI.java:3053)
        at java.net.URI.<init>(URI.java:588)
        at java.net.URI.create(URI.java:850)
        ... 21 more
{code}

Note this issue happens only when the endpoint is used with Servlet Transport. 
It doesn't happen when it's used with Jetty HTTP Transport.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to