Uploaded image for project: 'Tapestry'
  1. Tapestry
  2. TAPESTRY-2519

Make ClassNameLocatorImpl resolve resources from URLs that use a client-defined protocol

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 5.0.14
    • 5.0.14
    • None
    • None

    Description

      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.

      Attachments

        Activity

          People

            hlship Howard Lewis Ship
            igor.drobiazko Igor Drobiazko
            Votes:
            3 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: