> Here is a simplified sample of what is occurring in my application. This is a simple example of the issue which reproduces the same issue that I am seeing in my application. I created this example to best show the problem.
to reproduce the problem. For a reproducible test case for this, I
minimum required to cause the issue.
there is no problem with eXist. I think the issue is in how you are
retrieving and parsing the output from eXist.
exception. Replacing this code with something similar to the following
should work for you - I believe that it does here.
the eXist documentation on the website.
>
> package main;
>
> import java.util.Properties;
>
> import org.exist.xmldb.DatabaseInstanceManager;
> import org.w3c.dom.Document;
> import org.w3c.dom.Element;
> import org.w3c.dom.Node;
> import org.w3c.dom.NodeList;
> import org.xmldb.api.DatabaseManager;
> import org.xmldb.api.base.Collection;
> import org.xmldb.api.base.Database;
> import org.xmldb.api.base.ResourceSet;
> import org.xmldb.api.base.XMLDBException;
> import org.xmldb.api.modules.CollectionManagementService;
> import org.xmldb.api.modules.XMLResource;
> import org.xmldb.api.modules.XPathQueryService;
>
> public class DBExample
> {
> public static final String DRIVER_NAME = "org.exist.xmldb.DatabaseImpl";
>
> private static String DBPARAM_BASEURI = "exist://";
>
> public static final String USERNAME = "admin";
>
> public static final String PASSWORD = "admin";
>
> // the resource name for system preferences
> private static final String RESNAME_SYSTEM_PREFERENCES_DATABASE =
> "systempreferences.xml";
>
> // the root element of the resource
> private static final String ELEMENTNAME_ROOT = "systempreferences";
>
> // The element name of any preference in the database
> private static final String ELEMENTNAME_SYSTEM_PREFERENCE = "preference";
>
> private Collection rootCollection;
>
> private XPathQueryService queryService;
>
> public void init(String id) throws Exception
> {
> Database database = registerDatabaseByDriver(DRIVER_NAME);
>
> Collection pluginRootCollection =
> database
> .getCollection(DBPARAM_BASEURI + "/db/", USERNAME, PASSWORD);
>
> Collection localCollection =
> pluginRootCollection.getChildCollection(id);
>
> if (localCollection == null)
> {
> CollectionManagementService collectionManagementService =
> (CollectionManagementService) pluginRootCollection.getService(
> "CollectionManagementService",
> "1.0");
>
> if (collectionManagementService == null)
> {
> // We need this exception in two places so it must be created
> // ahead of the throw statement.
> NullPointerException ex =
> new NullPointerException(
> "collectionManagementService must be supported.");
>
> // Crash time (not really, the davadoc DOES warn clients this
> // may happen)
> throw ex;
> }
>
> // Create the collection
> localCollection = collectionManagementService.createCollection(id);
>
> }
>
> this.rootCollection = localCollection;
>
> this.queryService =
> (XPathQueryService) rootCollection.getService(
> "XPathQueryService",
> "1.0");
> }
>
> public Database registerDatabaseByDriver(String driver)
> throws ClassNotFoundException,
> InstantiationException,
> IllegalAccessException,
> XMLDBException
> {
> Database database = (Database) Class.forName(driver).newInstance();
> database.setProperty("create-database", "true");
> System.setProperty("exist.home", System.getProperty("user.dir"));
>
> DatabaseManager.registerDatabase(database);
>
> return database;
> }
>
> public void deregisterDatabase() throws XMLDBException
> {
> DatabaseInstanceManager manager =
> (DatabaseInstanceManager) rootCollection.getService(
> "DatabaseInstanceManager",
> "1.0");
> manager.shutdown();
> }
>
> public ResourceSet query(String context, String query)
> throws XMLDBException
> {
> // Check if this query is against the collection or a specific resource
> if (context == null || context.equals(""))
> {
> return queryService.query(query);
> }
>
> // Must be a specific resource
> return queryService.queryResource(context, query);
> }
>
> public Properties getPreferences(String group) throws XMLDBException
> {
> // For making the query
> String query;
> ResourceSet results;
>
> // For parsing the results
> XMLResource resultBlob;
> Node node;
> Document document;
> NodeList nodeList;
> Element element;
>
> // To store the results
> Properties preferences = new Properties();
>
> /*
> * /systempreferences/preference[@group='NameHere']
> */
> // Build the query
> query =
> String.format(
> "/%s/%s[@%s='%s']",
> ELEMENTNAME_ROOT,
> ELEMENTNAME_SYSTEM_PREFERENCE,
> "group",
> group);
>
> // Make the query
> results = query(RESNAME_SYSTEM_PREFERENCES_DATABASE, query);
>
> if (results.getSize() == 0)
> {
> // No results
> return null;
> }
>
> // Parse out the results
> resultBlob = (XMLResource) results.getMembersAsResource();
>
> // Display the results to console
> System.out.println(resultBlob.getContent());
>
> // get content as DOM for parsing
> // !!!!!!!!!! an XMLDBException is being thrown here !!!!!!!!!!
> node = resultBlob.getContentAsDOM();
> if (node.getOwnerDocument() == null)
> {
> document = (Document) node;
> }
> else
> {
> document = node.getOwnerDocument();
> }
>
> // create a list of all the preference nodes
> nodeList = document.getElementsByTagName(ELEMENTNAME_SYSTEM_PREFERENCE);
>
> // parse the list into a properties map
> for (int index = 0; index < nodeList.getLength(); index++)
> {
> // grab an element in the list
> element = (Element) nodeList.item(index);
>
> // add "value" to the properties map with the key "name"
> preferences.put(element.getAttribute("name"), element
> .getAttribute("value"));
>
> }
>
> return preferences;
> }
>
> public static void main(String args[]) throws Exception
> {
> DBExample dbExample = null;
> try
> {
> dbExample = new DBExample();
> dbExample.init("preferences");
> dbExample.getPreferences("group1");
> }
> catch (Exception e)
> {
> e.printStackTrace();
> }
> finally
> {
> if (dbExample != null)
> dbExample.deregisterDatabase();
> }
> }
> }
>
> The output of this program is:
>
> log4j:WARN No appenders could be found for logger (org.exist.util.ConfigurationHelper).
> log4j:WARN Please initialize the log4j system properly.
> <exist:result xmlns:exist="
http://exist.sourceforge.net/NS/exist" hitCount="4">
> <preference group="group1" name="preference1" value="50"/>
> <preference group="group1" name="preference2" value="foo"/>
> <preference group="group1" name="preference3" value="200"/>
> <preference group="group1" name="preference4" value="true"/>
> </exist:result>
> org.xmldb.api.base.XMLDBException:
> at org.exist.xmldb.LocalXMLResource.getDocument(LocalXMLResource.java:496)
> at org.exist.xmldb.LocalXMLResource.getContentAsDOM(LocalXMLResource.java:210)
> at main.DBExample.getPreferences(DBExample.java:170)
> at main.DBExample.main(DBExample.java:205)
>
>
>
> Thank you,
> Michael
>
>
> ------------------------------------------------------------------------------
> _______________________________________________
> Exist-open mailing list
>
Exist-open@...
>
https://lists.sourceforge.net/lists/listinfo/exist-open>