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)