Yes, it was in response to your question - thought if i change the title people will find the mesage more freqenetly in the forums search.

I need the reflection because I compile my classes using the xml:db api, not a specific db like eXist or Xindice.
I prefer coding to the Xml:Db api, and using reflection for anything inbetween which is not standard, since you can easily just trap the exception at runtime if the underlying service
doesn't exist.




Cheers.
wh

Upayavira wrote:

If this was in response to my comment, thanks. It seems that my code is fine. Only thing I notice about yours is that you use reflection unnecessarily near the end. Instead of:

Method createIndexerMethod = collectionManager.getClass().getDeclaredMethod("createIndexer",
new Class[]{org.w3c.dom.Document.class});
Object args[] = new Object[]{document};
createIndexerMethod.invoke(collectionManager,args);


You could just do collectionManager.createIndexer(document); which I think would be easier ;-)

Regards, Upayavira

[EMAIL PROTECTED] wrote:

/**
* Xindice only method for adding indexes to a Collection.
* Pattern uses the following format :
* Pattern Description
* =========== ====================================================
* elem The value of the named element
* [EMAIL PROTECTED] The value of the attribute for the named element
* * The value for all elements
* [EMAIL PROTECTED] The value of the named attribute for all elements
* [EMAIL PROTECTED] The value of all attributes for the named element
* [EMAIL PROTECTED] The value of all attributes for all elements
*/
public void addIndex(Collection collection, String name, String pattern)
throws XMLDBException,
javax.xml.parsers.ParserConfigurationException {
Service collectionManager; // should be of type org.apache.xindice.client.xmldb.services.CollectionManager
collectionManager = collection.getService("CollectionManager", "1.0");
logger.info("Creating indexer");
try {
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
org.w3c.dom.Document document = documentBuilder.newDocument();
org.w3c.dom.Element element = document.createElement("index");
document.appendChild(element);
element.setAttribute("class","org.apache.xindice.core.indexer.ValueIndexer");


element.setAttribute("name",name);
element.setAttribute("pattern",pattern);
//element.setAttribute("type",""); // optional
//element.setAttribute("pagesize",""); // optional
//element.setAttribute("maxkeysize","");// optional
Method createIndexerMethod = collectionManager.getClass().getDeclaredMethod("createIndexer",
new Class[]{org.w3c.dom.Document.class});
Object args[] = new Object[]{document};
createIndexerMethod.invoke(collectionManager,args);
// logger.debug("Listing indexes:");
// String[] idx = collectionManager.listIndexers();
// for (int i = 0; i < idx.length; i++) {
// logger.debug("initializeXMLDB - " + i + " - " + idx[i]);
// }
// logger.debug("initializeXMLDB - Total Indexes: " + idx.length);
}
catch (Throwable t) {
t.printStackTrace();
}
}












Reply via email to