Index: src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java
===================================================================
--- src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java (revision 720459)
+++ src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java (working copy)
@@ -73,6 +73,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;
@@ -89,6 +90,8 @@
 * Lucene.
 */
 public class SearchIndex extends AbstractQueryHandler {
+ 
+ public static final String CLASSPATH_CONFIG_PREFIX = "classpath:";
 
 public static final List VALID_SYSTEM_INDEX_NODE_TYPE_NAMES
 = Collections.unmodifiableList(Arrays.asList(new Name[]{
@@ -1124,20 +1127,38 @@
 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);
- return null;
- }
 try {
- DocumentBuilderFactory factory =
- DocumentBuilderFactory.newInstance();
- DocumentBuilder builder = factory.newDocumentBuilder();
- builder.setEntityResolver(new IndexingConfigurationEntityResolver());
- indexingConfiguration = builder.parse(config).getDocumentElement();
+ DocumentBuilderFactory factory =
+ DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ builder.setEntityResolver(new IndexingConfigurationEntityResolver());
+
+ if (indexingConfigPath.startsWith(CLASSPATH_CONFIG_PREFIX)) {
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ if (cl == null) {
+ cl = this.getClass().getClassLoader();
+ }
+ InputStream config = cl.getResourceAsStream(indexingConfigPath.substring(CLASSPATH_CONFIG_PREFIX.length()));
+ if (config == null) {
+ log.warn("Classpath resource does not exist: {}", indexingConfigPath);
+ return null;
+ }
+ indexingConfiguration = builder.parse(config).getDocumentElement();
+ log.info("indexingConfigPath '{}' resolved as classpath resource", indexingConfigPath);
+
+ } else {
+ 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);
+ return null;
+ }
+ indexingConfiguration = builder.parse(config).getDocumentElement();
+ }
+ 
+ 
 } catch (ParserConfigurationException e) {
 log.warn("Unable to create XML parser", e);
 } catch (IOException e) {