diff --git a/collection.xconf.init b/collection.xconf.init
new file mode 100644
index 00000000000..bf8885b25a5
--- /dev/null
+++ b/collection.xconf.init
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/extensions/exquery/restxq/src/main/java/org/exist/extensions/exquery/restxq/impl/RestXqTrigger.java b/extensions/exquery/restxq/src/main/java/org/exist/extensions/exquery/restxq/impl/RestXqTrigger.java
index 7fdea30903a..50b4f26120a 100644
--- a/extensions/exquery/restxq/src/main/java/org/exist/extensions/exquery/restxq/impl/RestXqTrigger.java
+++ b/extensions/exquery/restxq/src/main/java/org/exist/extensions/exquery/restxq/impl/RestXqTrigger.java
@@ -29,7 +29,9 @@
import java.util.*;
import org.exist.collections.triggers.FilteringTrigger;
import org.exist.collections.triggers.TriggerException;
+import org.exist.dom.BinaryDocument;
import org.exist.dom.DocumentImpl;
+import org.exist.dom.DocumentMetadata;
import org.exist.storage.DBBroker;
import org.exist.storage.txn.Txn;
import org.exist.xmldb.XmldbURI;
@@ -116,14 +118,23 @@ private void deregisterServices(final DBBroker broker, final XmldbURI xqueryLoca
}
private List findServices(final DBBroker broker, final DocumentImpl document) throws TriggerException {
- try {
- final CompiledXQuery compiled = XQueryCompiler.compile(broker, document);
- return XQueryInspector.findServices(compiled);
- } catch(final RestXqServiceCompilationException rxsce) {
- throw new TriggerException(rxsce.getMessage(), rxsce);
- } catch(final ExQueryException eqe) {
- throw new TriggerException(eqe.getMessage(), eqe);
+
+ //ensure we have a binary document with the correct mimetype
+ if(document instanceof BinaryDocument) {
+ final DocumentMetadata metadata = document.getMetadata();
+ if(metadata.getMimeType().equals(XQueryCompiler.XQUERY_MIME_TYPE)){
+ try {
+ final CompiledXQuery compiled = XQueryCompiler.compile(broker, document);
+ return XQueryInspector.findServices(compiled);
+ } catch(final RestXqServiceCompilationException rxsce) {
+ throw new TriggerException(rxsce.getMessage(), rxsce);
+ } catch(final ExQueryException eqe) {
+ throw new TriggerException(eqe.getMessage(), eqe);
+ }
+ }
}
+
+ return new ArrayList();
}
private RestXqServiceRegistry getRegistry(final DBBroker broker) {
diff --git a/extensions/exquery/restxq/src/main/java/org/exist/extensions/exquery/restxq/impl/XQueryCompiler.java b/extensions/exquery/restxq/src/main/java/org/exist/extensions/exquery/restxq/impl/XQueryCompiler.java
index b4a2a665203..ed18d26f77e 100644
--- a/extensions/exquery/restxq/src/main/java/org/exist/extensions/exquery/restxq/impl/XQueryCompiler.java
+++ b/extensions/exquery/restxq/src/main/java/org/exist/extensions/exquery/restxq/impl/XQueryCompiler.java
@@ -49,7 +49,7 @@
*/
public class XQueryCompiler {
- private final static String XQUERY_MIME_TYPE = "application/xquery";
+ public final static String XQUERY_MIME_TYPE = "application/xquery";
public static CompiledXQuery compile(final DBBroker broker, final URI xqueryLocation) throws RestXqServiceCompilationException {
diff --git a/nbproject/private/config.properties b/nbproject/private/config.properties
index acb911eeaa3..284f1e57c30 100644
--- a/nbproject/private/config.properties
+++ b/nbproject/private/config.properties
@@ -1 +1 @@
-config=Jetty
+config=InteractiveClient
diff --git a/src/org/exist/storage/BrokerPool.java b/src/org/exist/storage/BrokerPool.java
index 88a556cae7f..de2aa7f3e8c 100644
--- a/src/org/exist/storage/BrokerPool.java
+++ b/src/org/exist/storage/BrokerPool.java
@@ -35,6 +35,7 @@
import org.exist.collections.Collection;
import org.exist.collections.CollectionCache;
import org.exist.collections.CollectionConfiguration;
+import org.exist.collections.CollectionConfigurationException;
import org.exist.collections.CollectionConfigurationManager;
import org.exist.collections.triggers.*;
import org.exist.config.ConfigurationDocumentTrigger;
@@ -896,12 +897,9 @@ protected void initialize() throws EXistException, DatabaseConfigurationExceptio
statusReporter.setStatus(SIGNAL_READINESS);
- //Get a manager to handle further collections configuration
- try {
- collectionConfigurationManager = new CollectionConfigurationManager(broker);
- } catch (Exception e) {
- LOG.error("Found an error while initializing database: " + e.getMessage(), e);
- }
+ //Get a manager to handle further collections configuration
+ initCollectionConfigurationManager(broker);
+
//wake-up the plugins manager
pluginManager.startUp(broker);
@@ -1272,9 +1270,21 @@ public TransactionManager getTransactionManager() {
* Returns a manager for accessing the database instance's collection configuration files.
* @return The manager
*/
+ @Override
public CollectionConfigurationManager getConfigurationManager() {
return collectionConfigurationManager;
- }
+ }
+
+ public void initCollectionConfigurationManager(final DBBroker broker) {
+ if(collectionConfigurationManager == null) {
+ try {
+ collectionConfigurationManager = new CollectionConfigurationManager(broker);
+ } catch(final Exception e) {
+ LOG.error("Found an error while initializing database: " + e.getMessage(), e);
+ }
+ }
+ }
+
/**
* Returns a cache in which the database instance's collections are stored.
diff --git a/src/org/exist/storage/NativeBroker.java b/src/org/exist/storage/NativeBroker.java
index a7f73d41052..9f6184ac19f 100644
--- a/src/org/exist/storage/NativeBroker.java
+++ b/src/org/exist/storage/NativeBroker.java
@@ -50,6 +50,8 @@
import org.exist.collections.Collection.SubCollectionEntry;
import org.exist.collections.CollectionCache;
import org.exist.collections.CollectionConfiguration;
+import org.exist.collections.CollectionConfigurationException;
+import org.exist.collections.CollectionConfigurationManager;
import org.exist.collections.triggers.CollectionTriggersVisitor;
import org.exist.collections.triggers.DocumentTriggersVisitor;
import org.exist.collections.triggers.TriggerException;
@@ -187,6 +189,8 @@ public class NativeBroker extends DBBroker {
public static int OFFSET_COLLECTION_ID = 0;
public static int OFFSET_VALUE = OFFSET_COLLECTION_ID + Collection.LENGTH_COLLECTION_ID; //2
+ public final static String INIT_COLLECTION_CONFIG = "collection.xconf.init";
+
/** the database files */
protected CollectionStore collectionsDb;
protected DOMFile domDb;
@@ -633,6 +637,38 @@ private Collection createTempCollection(Txn transaction)
}
}
+ private final String readInitCollectionConfig() {
+ final File fInitCollectionConfig = new File(pool.getConfiguration().getExistHome(), INIT_COLLECTION_CONFIG);
+ if(fInitCollectionConfig.exists() && fInitCollectionConfig.isFile()) {
+
+ InputStream is = null;
+ try {
+ final StringBuilder initCollectionConfig = new StringBuilder();
+
+ is = new FileInputStream(fInitCollectionConfig);
+ int read = -1;
+ byte buf[] = new byte[1024];
+ while((read = is.read(buf)) != -1) {
+ initCollectionConfig.append(new String(buf, 0, read));
+ }
+
+ return initCollectionConfig.toString();
+ } catch(final IOException ioe) {
+ LOG.error(ioe.getMessage(), ioe);
+ } finally {
+ if(is != null) {
+ try {
+ is.close();
+ } catch(final IOException ioe) {
+ LOG.warn(ioe.getMessage(), ioe);
+ }
+ }
+ }
+
+ };
+ return null;
+ }
+
/* (non-Javadoc)
* @see org.exist.storage.DBBroker#getOrCreateCollection(org.exist.storage.txn.Txn, org.exist.xmldb.XmldbURI)
*/
@@ -663,6 +699,26 @@ public Collection getOrCreateCollection(Txn transaction, XmldbURI name) throws P
//TODO : acquire lock manually if transaction is null ?
saveCollection(transaction, current);
+
+
+ //import an initial collection configuration
+ try {
+ final String initCollectionConfig = readInitCollectionConfig();
+ if(initCollectionConfig != null) {
+ CollectionConfigurationManager collectionConfigurationManager = pool.getConfigurationManager();
+ if(collectionConfigurationManager == null) {
+ //might not yet have been initialised
+ pool.initCollectionConfigurationManager(this);
+ collectionConfigurationManager = pool.getConfigurationManager();
+ }
+
+ if(collectionConfigurationManager != null) {
+ collectionConfigurationManager.addConfiguration(transaction, this, current, initCollectionConfig);
+ }
+ }
+ } catch(final CollectionConfigurationException cce) {
+ LOG.error("Could not load initial collection configuration for /db: " + cce.getMessage(), cce);
+ }
}
for(int i=1;i cl = Class.forName("org.exist.xmldb.DatabaseImpl");
- Database database = (Database) cl.newInstance();
- database.setProperty("create-database", "true");
- DatabaseManager.registerDatabase(database);
-
- Collection root =
- DatabaseManager.getCollection(
- uri,
- "admin",
- "");
- CollectionManagementService service =
- (CollectionManagementService) root.getService(
- "CollectionManagementService",
- "1.0");
- testCollection = service.createCollection("test");
- assertNotNull(testCollection);
- } catch (ClassNotFoundException e) {
- } catch (InstantiationException e) {
- } catch (IllegalAccessException e) {
- } catch (XMLDBException e) {
- e.printStackTrace();
}
+
+ // initialize driver
+ Class> cl = Class.forName("org.exist.xmldb.DatabaseImpl");
+ Database database = (Database) cl.newInstance();
+ database.setProperty("create-database", "true");
+ DatabaseManager.registerDatabase(database);
+
+ Collection root =
+ DatabaseManager.getCollection(
+ uri,
+ "admin",
+ "");
+ CollectionManagementService service =
+ (CollectionManagementService) root.getService(
+ "CollectionManagementService",
+ "1.0");
+ testCollection = service.createCollection("test");
+ assertNotNull(testCollection);
}
private void initServer() {
@@ -194,6 +190,7 @@ private void initServer() {
}
}
+ @Override
protected void tearDown() throws Exception {
try {
TestUtils.cleanupDB();