eXist xml db : java.lang.NoClassDefFoundError: org/apache/ws/commons/serialize/DOMSerializer
exist-db, java, xml
Solution
You are missing ws-commons-util-1.0.2.jar from $EXIST_HOME/lib/core.
I guess the documentation has become out of date. You should make sure you have included at least all of the libraries from $EXIST_HOME/lib/core.
Problem
I am trying to access an eXist xml db using the embedded method, as described here. That page has a list of jars needed for the classpath, and I have all of them there, but I keep getting this error: ``` Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/ws/commons/serialize/DOMSerializer ``` Here's what I have in my classpath; I'm using eclipse: ``` antlr-2.7.7.jar commons-collections-3.2.1.jar commons-logging-1.1.1.jar commons-pool-1.6.jar exist-modules.jar exist-optional.jar exist.jar jta-1.1.jar log4j-1.2.17.jar pkg-repo.jar quartz-2.1.6.jar slf4j-api-1.7.2.jar slf4j-log4j12-1.7.2.jar sunxacml-1.2.jar xmldb.jar xmlrpc-client-3.1.3.jar xmlrpc-common-3.1.3.jar xmlrpc-server-3.1.3.jar saxonhe-9.4.0.7.jar serializer-2.7.1.jar xalan-2.7.1.jar xercesImpl-2.11.0.jar xml-apis-1.4.01.jar xml-resolver-1.2.jar ``` Here is the relevant code: ``` System.out.println("trying to call class.forname on " + DRIVER); Class cl = Class.forName(DRIVER); System.out.println("creating db instance"); Database database = (Database) cl.newInstance(); database.setProperty("create-database", "true"); System.out.println("register database"); DatabaseManager.registerDatabase(database); System.out.println("getting collection: " + URI + collectionName); Collection collection = DatabaseManager.getCollection(URI + collectionName); //collection.setProperty(OutputKeys.INDENT, "yes"); //System.out.println("getting resource"); //XMLResource xmlRes = (XMLResource)collection.getResource(resourceName); ``` and here is the console output including the error: ``` ****************************************************** reading a doc from xml db ****************************************************** reading doc... trying to call class.forname on org.exist.xmldb.DatabaseImpl creating db instance register database getting collection: xmldb:exist://localhost:8080/exist/xmlrpc/db/test-journal Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/ws/commons/serialize/DOMSerializer at org.apache.xmlrpc.serializer.NodeSerializer.<clinit>(NodeSerializer.java:30) at org.apache.xmlrpc.common.TypeFactoryImpl.<clinit>(TypeFactoryImpl.java:88) at org.apache.xmlrpc.common.XmlRpcController.<init>(XmlRpcController.java:31) at org.apache.xmlrpc.client.XmlRpcClient.<init>(XmlRpcClient.java:51) at org.exist.xmldb.DatabaseImpl.getRpcClient(DatabaseImpl.java:324) at org.exist.xmldb.DatabaseImpl.getRemoteCollection(DatabaseImpl.java:240) at org.exist.xmldb.DatabaseImpl.getCollection(DatabaseImpl.java:164) at org.exist.xmldb.DatabaseImpl.getCollection(DatabaseImpl.java:153) at org.xmldb.api.DatabaseManager.getCollection(Unknown Source) at org.xmldb.api.DatabaseManager.getCollection(Unknown Source) at com.jasonwardenburg.codetest.exist.ExistDBFileReader.readDoc(ExistDBFileReader.java:48) at com.jasonwardenburg.codetest.exist.ExistDBFileReader.main(ExistDBFileReader.java:27) Caused by: java.lang.ClassNotFoundException: org.apache.ws.commons.serialize.DOMSerializer at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 12 more ``` I went to the apache xml-rpc page, but most of the mirror sites are not functioning...anyone have any ideas as to the best way to get this working? thanks!