Fixed
Status Update
Comments
ya...@google.com <ya...@google.com> #2
Thank you for this defect report, I will be attempting to reproduce this issue. Could you possibly share the lines that generate this exception?
th...@emanueleziglioli.it <th...@emanueleziglioli.it> #3
There's not much to it, just a servlet. From our web.xml:
<servlet>
<servlet-name>Serve</servlet-name>
<servlet-class>com.mypackage.servlet.Serve</servlet-class>
<load-on-startup>-1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Serve</servlet-name>
<url-pattern>/serve/*</url-pattern>
</servlet-mapping>
The servlet is never hit if the filename at the end of the it contains ":"
<servlet>
<servlet-name>Serve</servlet-name>
<servlet-class>com.mypackage.servlet.Serve</servlet-class>
<load-on-startup>-1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Serve</servlet-name>
<url-pattern>/serve/*</url-pattern>
</servlet-mapping>
The servlet is never hit if the filename at the end of the it contains ":"
ya...@google.com <ya...@google.com> #4
Thank you for having restated your issue. I am working on a reproduction for it.
ya...@google.com <ya...@google.com> #5
I was able to reproduce your issue and also found that an url ending by %20 fails only on the dev server, not deployed on App Engine. This issue has been forwarded to engineering so that they may investigate it. Future updates on this issue will be posted here.
th...@emanueleziglioli.it <th...@emanueleziglioli.it> #6
Glad you managed to reproduce it, thank you! - E
lu...@google.com <lu...@google.com>
lu...@google.com <lu...@google.com> #7
Fixed. Will be in the SDK release 1.9.58 being pushed shortly.
Description
I've never had problems before but since upgrading to the latest SDK with Jetty 9 and Java 8 runtime, I get an error when file names (as part of the url) contain a colon (':') character.
This problem doesn't occur on GAE's servers.
As a workaround I've renamed the files on my development server so that they don't contain that character. But it's only a temporary fix.
Stack trace for a request to the url: "/serve/project/6443687894581248/myfile:1234"
pointing to a file name "myfile:1234".
Mind, the request doesn't get redirected to the "serve" servlet. Instead DevAppServerModulesFilter sends it to StaticFileFilter,
java.nio.file.InvalidPathException: Illegal char <:> at index 76: C:\workspace\Iridium\src\main\webapp\/serve/project/6443687894581248/myfile:1234.js/index.html
at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
at sun.nio.fs.WindowsPath.parse(WindowsPath.java:94)
at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255)
at org.eclipse.jetty.util.resource.PathResource.<init>(PathResource.java:213)
at org.eclipse.jetty.util.resource.PathResource.addPath(PathResource.java:304)
at com.google.appengine.tools.development.jetty9.StaticFileFilter.getResource(StaticFileFilter.java:133)
at com.google.appengine.tools.development.jetty9.StaticFileFilter.maybeServeWelcomeFile(StaticFileFilter.java:172)
at com.google.appengine.tools.development.jetty9.StaticFileFilter.doFilter(StaticFileFilter.java:96)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1751)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
at com.google.appengine.tools.development.jetty9.DevAppEngineWebAppContext.doScope(DevAppEngineWebAppContext.java:94)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
at com.google.appengine.tools.development.jetty9.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:597)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
at org.eclipse.jetty.server.Server.handle(Server.java:534)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:320)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:283)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:108)
at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
at java.lang.Thread.run(Thread.java:745)