[
https://issues.apache.org/jira/browse/FELIX-3296?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13267431#comment-13267431
]
Karl Pauls commented on FELIX-3296:
-----------------------------------
Well, after looking at a bit more, I'm not so sure what the correct solution
is. First, I disagree with the proposed fix in the description. The idea is
that if there is a previous urlhandlersfactory, we should delegate to that one.
If it isn't doing that, there is a bug in there. Caching the null value is what
should happen.
Regarding the patch of Felix Meschberger: I see the problem however, I'm not
sure it is a correct solution to default to the system classloader. Thing is,
somebody on the outside doesn't want us to see the classes, so we shouldn't try
to get them from some place else. Granted, if that is the only work to make
this work we might have to but the URLHandlers are a very tricky hack to begin
with so lets see whether there is a different way.
Am I correct in saying that jboss installs its own urlhandlersfactory which
will give us the required protocols?
> URLHandlers caches null as values for common protocols
> ------------------------------------------------------
>
> Key: FELIX-3296
> URL: https://issues.apache.org/jira/browse/FELIX-3296
> Project: Felix
> Issue Type: Bug
> Components: Framework
> Affects Versions: framework-3.0.8
> Environment: Apache Sling org.apache.sling.launchpad-6.war
> running in build of current master branch of JBoss Application Server 7
> (https://github.com/jbossas/jboss-as). I'm reporting this against
> framework-3.0.8 as that seems to be what's included in Sling, but a review of
> the code in 4.0.2 shows the class is the same.
> Reporter: Brian Stansberry
> Assignee: Karl Pauls
> Fix For: framework-4.2.0
>
> Attachments: FELIX-3296.patch
>
>
> A JBoss AS7 user has reported being unable to run the Apache Sling web app in
> AS 7. I determined that the issue is once
> org.apache.felix.framework.URLHandlers is installed as the JVM's
> URLStreamHandlerFactory, URLs with protocol "jar" can no longer be parsed.[1]
> Here's the problem. Line references are to [2]:
> 1) The singleton of this URLHandlers class gets instantiated. It attempts to
> load and cache standard handlers for common protocols. At L148 it does this
> for "jar".
> 2) At L353 it's trying to load one of the standard URLStreamHandler impls for
> the "jar" protocol, e.g. sun.net.www.protocol.jar.Handler. It uses
> Class.forName("sun.net.www.protocol.jar.Handler"). This fails (returns null)
> because the JBoss Modules module for this deployment does not have visibility
> to this class.
> 3) At L367 it stores "null" for this protocol in its m_builtIn map under key
> "jar".
> 4) Thereafter any call to createURLStreamHandler (L390) will call into
> getBuiltInStreamHandler (L413). That will return null because it will find
> the null in m_builtIn stored in step 3) above (L330 & L332).
> A fairly simple fix is to at L148 test the result of the
> getBuiltInStreamHandler call and if null remove the entry from m_builtIn. It
> should probably do the same kind of thing in the init(String) method (L120).
> An alternative is to do all the step 1) stuff between L142 and L148 after the
> try/catch block at L157. At that point a ref to the standard AS7
> URLStreamHandlerFactory will be available in field m_streamHandlerFactory and
> can be used to load the standard handlers rather than relying on
> Class.forName.
> [1] http://lists.jboss.org/pipermail/jboss-as7-dev/2012-January/004956.html
> [2]
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.felix/org.apache.felix.framework/2.0.5/org/apache/felix/framework/URLHandlers.java
--
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