Index: jackrabbit-jca/src/main/java/org/apache/jackrabbit/jca/JCARepositoryManager.java =================================================================== --- jackrabbit-jca/src/main/java/org/apache/jackrabbit/jca/JCARepositoryManager.java (revision 725455) +++ jackrabbit-jca/src/main/java/org/apache/jackrabbit/jca/JCARepositoryManager.java (working copy) @@ -16,12 +16,13 @@ */ package org.apache.jackrabbit.jca; +import org.apache.commons.io.IOUtils; import org.apache.jackrabbit.core.RepositoryImpl; import org.apache.jackrabbit.core.config.RepositoryConfig; +import org.apache.jackrabbit.core.config.ResourceResolver; import javax.jcr.RepositoryException; -import java.io.IOException; import java.io.InputStream; import java.util.Collection; import java.util.HashMap; @@ -33,9 +34,6 @@ */ public final class JCARepositoryManager { - /** The config file prefix that signifies the file is to be loaded from the classpath. */ - public static final String CLASSPATH_CONFIG_PREFIX = "classpath:"; - /** * Instance of manager. */ @@ -152,28 +150,11 @@ throws RepositoryException { if (repository == null) { RepositoryConfig config = null; - - if (configFile.startsWith(CLASSPATH_CONFIG_PREFIX)) { - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - if (cl == null) { - cl = this.getClass().getClassLoader(); - } - - InputStream configInputStream = cl.getResourceAsStream( - configFile.substring(CLASSPATH_CONFIG_PREFIX.length())); - try { - config = RepositoryConfig.create(configInputStream, homeDir); - } finally { - if (configInputStream != null) { - try { - configInputStream.close(); - } catch (IOException e) { - // ignore - } - } - } - } else { - config = RepositoryConfig.create(configFile, homeDir); + InputStream configInputStream = new ResourceResolver().getInputStream(configFile); + try { + config = RepositoryConfig.create(configInputStream, homeDir); + } finally { + IOUtils.closeQuietly(configInputStream); } repository = RepositoryImpl.create(config); } Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/ResourceResolver.java =================================================================== --- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/ResourceResolver.java (revision 0) +++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/ResourceResolver.java (revision 0) @@ -0,0 +1,53 @@ +package org.apache.jackrabbit.core.config; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ResourceResolver { + + private static final Logger logger = LoggerFactory.getLogger(ResourceResolver.class); + + private Class loadedClass = this.getClass(); + + public static final String CLASSPATH_CONFIG_PREFIX = "classpath:"; + + public ResourceResolver() { + // + } + + public ResourceResolver(Class loadedClass) { + this.loadedClass = loadedClass; + } + + public InputStream getInputStream(String resourcePath) { + + InputStream stream = null; + + if (resourcePath.startsWith(CLASSPATH_CONFIG_PREFIX)) { + logger.info("resolving resource '{}' as a classpath resource", resourcePath); + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + if (cl == null) { + cl = loadedClass.getClassLoader(); + } + stream = cl.getResourceAsStream(resourcePath.substring(CLASSPATH_CONFIG_PREFIX.length())); + if (stream == null) { + logger.info("classpath resource '{}' does not exist"); + } + + } else { + logger.info("resolving resource '{}' as a file resource", resourcePath); + try { + stream = new FileInputStream(resourcePath); + } catch (FileNotFoundException e) { + logger.warn("cannot resolve file resource '{}' : '{}'", resourcePath, e.getMessage()); + return null; + } + } + + return stream; + } +} Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java =================================================================== --- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java (revision 725455) +++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java (working copy) @@ -20,6 +20,7 @@ import org.apache.jackrabbit.core.SessionImpl; import org.apache.jackrabbit.core.NodeId; import org.apache.jackrabbit.core.NodeIdIterator; +import org.apache.jackrabbit.core.config.ResourceResolver; import org.apache.jackrabbit.core.fs.FileSystem; import org.apache.jackrabbit.core.fs.FileSystemResource; import org.apache.jackrabbit.core.fs.FileSystemException; @@ -73,6 +74,7 @@ import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; import java.io.File; +import java.io.InputStream; import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -1134,12 +1136,9 @@ if (indexingConfigPath == null) { return null; } - File config = new File(indexingConfigPath); - if (!config.exists()) { - log.warn("File does not exist: " + indexingConfigPath); - return null; - } else if (!config.canRead()) { - log.warn("Cannot read file: " + indexingConfigPath); + InputStream config = new ResourceResolver().getInputStream(indexingConfigPath); + if (config == null) { + log.warn("Cannot resolve config {}", indexingConfigPath); return null; } try {