users@jax-ws.java.net

RE: Please help java.lang.NoClassDefFoundError: com.sun.org.apache.xerces.internal.dom.DocumentImpl

From: Jon Blanton <dcx20_at_live.com>
Date: Sun, 11 Dec 2011 18:11:37 -0800

Source for SOAPDocumentImpl (http://java.net/projects/saaj/sources/svn/show/branches?rev=395) indeed imports com.sun.org.apache.xerces.internal.dom.DocumentImpl; !! I am a bit baffled now. Does this mean I cannot use jax-ws.java.net/2.2.5 with IBM JDK because it's xerces is under org.apache.xerces and not under com.sun.org.apache.xerces?


import com.sun.org.apache.xerces.internal.dom.DocumentImpl;
public class SOAPDocumentImpl extends DocumentImpl implements SOAPDocument {


From: dcx20_at_live.com
To: issues_at_jax-ws.java.net; users_at_jax-ws.java.net
Subject: Please help java.lang.NoClassDefFoundError: com.sun.org.apache.xerces.internal.dom.DocumentImpl
Date: Sat, 10 Dec 2011 23:49:46 -0800









Please help me with the following exception. The example works fine with Sun JDK 1.5, but not with IBM JDK. soapTest.zip

All libraries are downloaded from http://jax-ws.java.net/2.2.5/

Attachment 1: soapTest.zip Example that works on Sun jdk. windowsOut.log file contains version, jvm properties, and correctly read SOAP message.
Attachment 2: soapTest_ibmJdk.zip The same example fails on IBM JDK. out.txt contains the stacktrace. provides version and jvm properties.
java.lang.NoClassDefFoundError: com.sun.org.apache.xerces.internal.dom.DocumentImpl
    at java.lang.ClassLoader.defineClassImpl(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:267)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:600)
    at java.net.URLClassLoader.access$400(URLClassLoader.java:124)
    at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java:1055)
    at java.security.AccessController.doPrivileged(AccessController.java:274)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:492)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:650)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:616)
    at com.sun.xml.messaging.saaj.soap.SOAPPartImpl.<init>(SOAPPartImpl.java:106)
    at com.sun.xml.messaging.saaj.soap.ver1_1.Message1_1Impl.getSOAPPart(Message1_1Impl.java:90)
    at com.sun.xml.messaging.saaj.soap.MessageImpl.init(MessageImpl.java:407)
    at com.sun.xml.messaging.saaj.soap.MessageImpl.<init>(MessageImpl.java:316)
    at com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl.createMessage(SOAPMessageFactory1_1Impl.java:74)
    at soapTest.TestSaaj.main(TestSaaj.java:59)

As you can see, org.apache classes are used by the IBM JDK by default, but com.sun.xml.messaging.saaj.soap.MessageImpl tries to access
com.sun.org.apache.xerces.internal.dom.DocumentImpl. I can't figure out why. Am I missing some setting somewhere? Please help.

DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
DocumentBuilder=org.apache.xerces.jaxp.DocumentBuilderImpl
Documentr=org.apache.xerces.dom.DocumentImpl
SoapMessageFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl
Caused by: java.lang.NoClassDefFoundError: com.sun.org.apache.xerces.internal.dom.DocumentImpl

Thanks
Jon