You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-dev@xerces.apache.org by bu...@apache.org on 2004/02/02 20:42:27 UTC
DO NOT REPLY [Bug 26613] New: -
AbstractDOMParser setDocumentClassName ClassLoader problem
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=26613>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=26613
AbstractDOMParser setDocumentClassName ClassLoader problem
Summary: AbstractDOMParser setDocumentClassName ClassLoader
problem
Product: Xerces2-J
Version: 2.6.1
Platform: All
OS/Version: All
Status: NEW
Severity: Major
Priority: Other
Component: DOM
AssignedTo: xerces-j-dev@xml.apache.org
ReportedBy: mister_farkas@yahoo.com
We are using Websphere 5.0.2, and have deployed a prior version of Xerces (to
support other 3rd party jars we use)
The problem is manifested as an IllegalArgumentException
with message :
PAR002 Class, "org.apache.xerces.dom.DocumentImpl", is not of type
org.w3c.dom.Document.
org.apache.xerces.dom.DocumentImpl
this is thrown from:
org.apache.xerces.parsers.AbstractDOMParser.setDocumentClassName(String)
AbstractDOMParser was loaded by the System ClassLoader
Our investigation reveals that the expression:
Document.class.isAssignableFrom (_class):
evaluates to false because _class represents the
class 'org.apache.xerces.dom.DocumentImpl' loaded from the context class
loader, while Document.class is from the same class loader as this.getClass()
this is because a few lines above:
ObjectFactory.findClassLoader()
returns the context class loader
We have a proposed fix (see below) for the immediately obvious problem, which
will make the code consistent with code in public void startDocument(...) { },
but the question of alternate document implementations, and inheritance across
class loaders has not been addressed.
We would suggest some improvements to the exception handling and messages, so
that related problems may be more easily diagnosed.
Please feel free to e-mail us at yoni_livshits@wgcusa.com (or
mister_farkas@yahoo.com) to discuss further.
-- -- -- --
protected void setDocumentClassName (String documentClassName) {
// normalize class name
if (documentClassName == null) {
documentClassName = DEFAULT_DOCUMENT_CLASS_NAME;
}
if (!documentClassName.equals(DEFAULT_DOCUMENT_CLASS_NAME)) {
// verify that this class exists and is of the right
type
try {
Class _class = ObjectFactory.findProviderClass
(documentClassName,
ObjectFactory.findClassLoader (), true);
//if (!_class.isAssignableFrom(Document.class))
{
if (!Document.class.isAssignableFrom (_class)) {
// REVISIT: message
throw new IllegalArgumentException
("PAR002 Class, \"" +
documentClassName +
"\", is not of type
org.w3c.dom.Document.\n" +
documentClassName);
}
}
catch (ClassNotFoundException e) {
// REVISIT: message
throw new IllegalArgumentException ("PAR003
Class, \"" +
documentClassName +
"\", not found.\n" +
documentClassName);
}
}
// set document class name
fDocumentClassName = documentClassName;
if (!documentClassName.equals (DEFAULT_DOCUMENT_CLASS_NAME)) {
fDeferNodeExpansion = false;
}
} // setDocumentClassName(String)
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-j-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-j-dev-help@xml.apache.org