[
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 chain.
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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]