Class AbstractFileLocationStrategy

java.lang.Object
org.apache.commons.configuration2.io.AbstractFileLocationStrategy
All Implemented Interfaces:
FileLocationStrategy
Direct Known Subclasses:
AbsoluteNameLocationStrategy, BasePathLocationStrategy, ClasspathLocationStrategy, CombinedLocationStrategy, FileSystemLocationStrategy, HomeDirectoryLocationStrategy, ProvidedURLLocationStrategy

public abstract class AbstractFileLocationStrategy extends Object implements FileLocationStrategy
Abstracts services for FileLocationStrategy implementations.

Note that some FileLocationStrategy implementation use URLs internally to encode file locations.

As of version 2.15.0, by default, the only URL schemes allowed are file and jar. To override this default, you can either use the system property org.apache.commons.configuration2.io.FileLocationStrategy.schemes or build a subclass of AbstractFileLocationStrategy.

Using System Properties

The system property org.apache.commons.configuration2.io.FileLocationStrategy.schemes String value must be a comma-separated list of schemes, where the default is "file,jar", and the complete list is "file,http,https,jar".

Using a Builder

The root builder for AbstractFileLocationStrategy is AbstractFileLocationStrategy.AbstractBuilder where you define allowed schemes and hosts through its setter methods.

For example, to programatically enable the shemes "file", "http", "https", and "jar" for all strategies, you write:


 final PropertiesConfiguration pc = new PropertiesConfiguration();
      pc.setIncludeListener(PropertiesConfiguration.NOOP_INCLUDE_LISTENER);
      final FileHandler handler = new FileHandler(pc);
      final CombinedLocationStrategy.Builder builder = new CombinedLocationStrategy.Builder()
              .setSchemes(new TreeSet<>(Arrays.asList("file", "http", "https", "jar")));
      // @formatter:off
      handler.setLocationStrategy(builder.setSubStrategies(Arrays.asList(
              new ProvidedURLLocationStrategy(builder),
              new FileSystemLocationStrategy(builder),
              new AbsoluteNameLocationStrategy(builder),
              new BasePathLocationStrategy(builder),
              new HomeDirectoryLocationStrategy.Builder().setEvaluateBasePath(true).getUnchecked(),
              new HomeDirectoryLocationStrategy.Builder().setEvaluateBasePath(false).getUnchecked(),
              new ClasspathLocationStrategy(builder)))
              .get());
      // @formatter:on
      handler.setBasePath(TEST_BASE_PATH);
      handler.setFileName("include-load-url-host-unknown-exception.properties");
      handler.load();
 
Since:
2.15.0
See Also:
  • Field Details

    • DEFAULT_SCHEMES

      private static final String DEFAULT_SCHEMES
      Default schemes.
      See Also:
    • KEY_SCHEMES

      private static final String KEY_SCHEMES
      The system property key org.apache.commons.configuration2.io.FileLocationStrategy.schemes.

      If absent, defaults to "file,jar".

      For complete functionality, use "file,http,https,jar".

      See Also:
    • hosts

      private final Set<Pattern> hosts
      Enabled URL-based hosts, empty means all are enabled. Host are case-insensitive.
    • schemes

      private final Set<String> schemes
      Enabled URL-based schemes, empty means all are enabled. Schemes are case-insensitive.
  • Constructor Details

    • AbstractFileLocationStrategy

      AbstractFileLocationStrategy()
      Constructs a new instance where the enabled URL schemes are read the system property "org.apache.commons.configuration2.io.FileLocationStrategy.schemes".

      If absent, defaults to "file,jar".

      For complete functionality, use "file,http,https,jar".

    • AbstractFileLocationStrategy

      AbstractFileLocationStrategy(AbstractFileLocationStrategy.AbstractBuilder<?,?> builder)
    • AbstractFileLocationStrategy

      AbstractFileLocationStrategy(Set<String> schemes)
  • Method Details

    • checkHost

      private static void checkHost(String value, Set<Pattern> validSet)
    • checkScheme

      private static void checkScheme(String value, Set<String> validSet)
      Checks if the scheme is allowed.
      Parameters:
      value - A URL scheme, never empty or null.
      validSet - the scheme valid-set.
    • checkUrl

      static void checkUrl(URL url, Set<String> validSchemes, Set<Pattern> validHosts)
      Validates url against the scheme and host allow-lists.
      Parameters:
      url - the URL to check.
      validSchemes - the scheme valid-set.
      validHosts - the host valid-set.
      Throws:
      ConfigurationDeniedException - if the URL or any embedded URL fails the check, or a jar: URL is malformed.
    • getSchemesProperty

      private static Set<String> getSchemesProperty()
    • check

      URL check(URL url)
    • getHosts

      Set<Pattern> getHosts()
      Gets the enabled hosts.
      Returns:
      the enabled hosts.
    • getSchemes

      Set<String> getSchemes()
      Gets the enabled schemes.
      Returns:
      the enabled schemes.
    • toString

      public String toString()
      Overrides:
      toString in class Object