tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Igor Drobiazko (JIRA)" <...@tapestry.apache.org>
Subject [jira] Commented: (TAPESTRY-2519) Make ClassNameLocatorImpl resolve resources from URLs that use a client-defined protocol
Date Fri, 25 Jul 2008 06:33:32 GMT

    [ https://issues.apache.org/jira/browse/TAPESTRY-2519?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12616773#action_12616773

Igor Drobiazko commented on TAPESTRY-2519:

If the converter is not able to convert it should return the original url. The osgi converter
would convert the url into native jar or file urls. We could also allow the converter to be
chained. In this case returning of  null would make sense. This way the next converter in
the chain could try to convert. By default Tapestry would put only one converter into this

ClassNameLocator is already a service. It is absolutely no problem to override it. The problem
is how to do it. The new implementation of ClassNameLocator will need the most code of the
original implementation. Only a small part needs to be overridden. So it makes sense to extend
ClassNameLocatorImpl and replace it.The problem is that ClassNameLocatorImpl was not designed
for extension. It is not possible to extend it by overriding one of the methods.  That's why
I suggested to use the converter service. 

> Make ClassNameLocatorImpl resolve resources from URLs that use a client-defined protocol
> ----------------------------------------------------------------------------------------
>                 Key: TAPESTRY-2519
>                 URL: https://issues.apache.org/jira/browse/TAPESTRY-2519
>             Project: Tapestry
>          Issue Type: Improvement
>    Affects Versions: 5.0.14
>            Reporter: Igor Drobiazko
>            Assignee: Igor Drobiazko
> ClassNameLocatorImpl is only able to resolve resources from URLs that use a protocol
which is native to the Java class library (file, jar, http, etc). In OSGi environment all
the URLs use the protocol "bundleresource" or "bundleentry". Here is an example:
> bundleresource://5642/org/apache/tapestry5/corelib/pages/
> A very simple solution is to create your own ClassNameLocator and contribute it to AliasOverrides.
Well, this solution is bad because it requires a copy of the ClassNameLocatorImpl.
> A better solution would be to make ClassNameLocatorImpl use a service called URLConverter
or similar.
> public interface URLConverter
> {
>     URL convert(URL url);
> }
> Tapestry would provide a default implementation of the interface:
> public class URLConverterImpl implements URLConverter
> {
>     public URL convert(URL url)
>     {
>         return url;
>     }
> }
> In an OSGi environment (in my case Equinox)  one could override this service by using
e.g Eclipse Core API. This approach is much easier then overriding of the ClassNameLocator.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org

View raw message