[ 
https://issues.apache.org/jira/browse/WICKET-4203?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Frank Ziglar updated WICKET-4203:
---------------------------------

    Description: 
When upgrading from Wicket 1.4 to 1.5, Wicket may fail to start with an 
exception like:

org.apache.wicket.WicketRuntimeException: java.net.URISyntaxException: Illegal 
character in path at index 12: file:/W:/Dev 
Projects/Portal/website/web/WEB-INF/classes/wicket.properties
        at 
org.apache.wicket.application.AbstractClassResolver.getResources(AbstractClassResolver.java:156)
        at 
org.apache.wicket.Application.initializeComponents(Application.java:491)
        at org.apache.wicket.Application.initApplication(Application.java:808)
        at 
org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:346)
        at 
org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:286)
        at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
        at 
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at 
org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662)
        at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
        at 
org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
        at 
org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
        at 
org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
        at 
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at 
org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
        at 
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at 
org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
        at org.mortbay.jetty.Server.doStart(Server.java:224)
        at 
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at 
com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:186)
        at 
com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:182)
        at 
com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:172)
        at 
com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:164)
        at 
com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
        at 
com.google.appengine.tools.development.DevAppServerMain.<init>(DevAppServerMain.java:113)
        at 
com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:89)
Caused by: java.net.URISyntaxException: Illegal character in path at index 12: 
file:/W:/Dev Projects/Portal/website/web/WEB-INF/classes/wicket.properties
        at java.net.URI$Parser.fail(URI.java:2809)
        at java.net.URI$Parser.checkChars(URI.java:2982)
        at java.net.URI$Parser.parseHierarchical(URI.java:3066)
        at java.net.URI$Parser.parse(URI.java:3014)
        at java.net.URI.<init>(URI.java:578)
        at java.net.URL.toURI(URL.java:918)
        at 
org.apache.wicket.application.AbstractClassResolver.loadResources(AbstractClassResolver.java:177)
        at 
org.apache.wicket.application.AbstractClassResolver.getResources(AbstractClassResolver.java:139)
        ... 24 more

This issue was not present in Wicket 1.4.

The problem could be corrected by moving the deployment path for the 
application to a folder that contains no space characters in the absolute path 
name. However, finding and changing the appropriate configuration settings 
throughout the framework and IDE can be somewhat cumbersome.

After some investigation, it appears the cause is a change made for 
WICKET-3867, which relies on URL.toURI(). The javadocs for this method state 
that:
"Note, any URL instance that complies with RFC 2396 can be converted to a URI. 
However, some URLs that are not strictly in compliance can not be converted to 
a URI.". It appears that wicket may not be able to rely on 
ClassLoader.getResources to return a URL which is safe to convert to a URI 
using this method.

I am humbly supplying a proposed patch, which selects a URI constructor to 
invoke instead of using URL.toURI. The constructors for URI are designed to 
accept paths that are not strictly compliant, and canonicalize them to a 
compliant form. I believe this will correctly construct URIs for equality 
checks, even when the ClassLoader does not return RFC-2396 compliant URLs.

  was:
When upgrading from Wicket 1.4 to 1.5, Wicket may fail to start with an 
exception like:

org.apache.wicket.WicketRuntimeException: java.net.URISyntaxException: Illegal 
character in path at index 12: file:/W:/Dev 
Projects/Portal/website/web/WEB-INF/classes/wicket.properties
        at 
org.apache.wicket.application.AbstractClassResolver.getResources(AbstractClassResolver.java:156)
        at 
org.apache.wicket.Application.initializeComponents(Application.java:491)
        at org.apache.wicket.Application.initApplication(Application.java:808)
        at 
org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:346)
        at 
org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:286)
        at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
        at 
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at 
org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662)
        at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
        at 
org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
        at 
org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
        at 
org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
        at 
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at 
org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
        at 
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at 
org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
        at org.mortbay.jetty.Server.doStart(Server.java:224)
        at 
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at 
com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:186)
        at 
com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:182)
        at 
com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:172)
        at 
com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:164)
        at 
com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
        at 
com.google.appengine.tools.development.DevAppServerMain.<init>(DevAppServerMain.java:113)
        at 
com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:89)
Caused by: java.net.URISyntaxException: Illegal character in path at index 12: 
file:/W:/Dev Projects/Portal/website/web/WEB-INF/classes/wicket.properties
        at java.net.URI$Parser.fail(URI.java:2809)
        at java.net.URI$Parser.checkChars(URI.java:2982)
        at java.net.URI$Parser.parseHierarchical(URI.java:3066)
        at java.net.URI$Parser.parse(URI.java:3014)
        at java.net.URI.<init>(URI.java:578)
        at java.net.URL.toURI(URL.java:918)
        at 
org.apache.wicket.application.AbstractClassResolver.loadResources(AbstractClassResolver.java:177)
        at 
org.apache.wicket.application.AbstractClassResolver.getResources(AbstractClassResolver.java:139)
        ... 24 more

This issue was not present in Wicket 1.4.

The problem could be corrected by moving the deployment path for the 
application to a folder that contains no space characters in the absolute path 
name. However, finding and changing the appropriate configuration settings 
throughout the framework and IDE can be somewhat cumbersome.

After some investigation, it appears the cause is a change made for 
WICKET-3876, which relies on URL.toURI(). The javadocs for this method state 
that:
"Note, any URL instance that complies with RFC 2396 can be converted to a URI. 
However, some URLs that are not strictly in compliance can not be converted to 
a URI.". It appears that wicket may not be able to rely on 
ClassLoader.getResources to return a URL which is safe to convert to a URI 
using this method.

I am humbly supplying a proposed patch, which selects a URI constructor to 
invoke instead of using URL.toURI. The constructors for URI are designed to 
accept paths that are not strictly compliant, and canonicalize them to a 
compliant form. I believe this will correctly construct URIs for equality 
checks, even when the ClassLoader does not return RFC-2396 compliant URLs.


Sorry for the typo!
                
> Wicket fails to start when deployed filenames contain space characters
> ----------------------------------------------------------------------
>
>                 Key: WICKET-4203
>                 URL: https://issues.apache.org/jira/browse/WICKET-4203
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.5.2
>            Reporter: Frank Ziglar
>         Attachments: WICKET-4203-loadResources.patch
>
>
> When upgrading from Wicket 1.4 to 1.5, Wicket may fail to start with an 
> exception like:
> org.apache.wicket.WicketRuntimeException: java.net.URISyntaxException: 
> Illegal character in path at index 12: file:/W:/Dev 
> Projects/Portal/website/web/WEB-INF/classes/wicket.properties
>       at 
> org.apache.wicket.application.AbstractClassResolver.getResources(AbstractClassResolver.java:156)
>       at 
> org.apache.wicket.Application.initializeComponents(Application.java:491)
>       at org.apache.wicket.Application.initApplication(Application.java:808)
>       at 
> org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:346)
>       at 
> org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:286)
>       at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
>       at 
> org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
>       at 
> org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662)
>       at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
>       at 
> org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
>       at 
> org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
>       at 
> org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
>       at 
> org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
>       at 
> org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
>       at 
> org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
>       at 
> org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
>       at org.mortbay.jetty.Server.doStart(Server.java:224)
>       at 
> org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
>       at 
> com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:186)
>       at 
> com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:182)
>       at 
> com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:172)
>       at 
> com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:164)
>       at 
> com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
>       at 
> com.google.appengine.tools.development.DevAppServerMain.<init>(DevAppServerMain.java:113)
>       at 
> com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:89)
> Caused by: java.net.URISyntaxException: Illegal character in path at index 
> 12: file:/W:/Dev Projects/Portal/website/web/WEB-INF/classes/wicket.properties
>       at java.net.URI$Parser.fail(URI.java:2809)
>       at java.net.URI$Parser.checkChars(URI.java:2982)
>       at java.net.URI$Parser.parseHierarchical(URI.java:3066)
>       at java.net.URI$Parser.parse(URI.java:3014)
>       at java.net.URI.<init>(URI.java:578)
>       at java.net.URL.toURI(URL.java:918)
>       at 
> org.apache.wicket.application.AbstractClassResolver.loadResources(AbstractClassResolver.java:177)
>       at 
> org.apache.wicket.application.AbstractClassResolver.getResources(AbstractClassResolver.java:139)
>       ... 24 more
> This issue was not present in Wicket 1.4.
> The problem could be corrected by moving the deployment path for the 
> application to a folder that contains no space characters in the absolute 
> path name. However, finding and changing the appropriate configuration 
> settings throughout the framework and IDE can be somewhat cumbersome.
> After some investigation, it appears the cause is a change made for 
> WICKET-3867, which relies on URL.toURI(). The javadocs for this method state 
> that:
> "Note, any URL instance that complies with RFC 2396 can be converted to a 
> URI. However, some URLs that are not strictly in compliance can not be 
> converted to a URI.". It appears that wicket may not be able to rely on 
> ClassLoader.getResources to return a URL which is safe to convert to a URI 
> using this method.
> I am humbly supplying a proposed patch, which selects a URI constructor to 
> invoke instead of using URL.toURI. The constructors for URI are designed to 
> accept paths that are not strictly compliant, and canonicalize them to a 
> compliant form. I believe this will correctly construct URIs for equality 
> checks, even when the ClassLoader does not return RFC-2396 compliant URLs.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to