mrglavas 2004/02/16 16:01:50
Modified: java/src/org/apache/xerces/parsers AbstractDOMParser.java
Log:
Some improvements. If the document class name is our PSVI
implementation don't go through ObjectFactory. Load it with
the current classloader like we do for DocumentImpl. Also,
made some minor performance fixes. If we're loading some
other Document implementation only lookup the classloader
once instead of three times.
Revision Changes Path
1.107 +21 -5
xml-xerces/java/src/org/apache/xerces/parsers/AbstractDOMParser.java
Index: AbstractDOMParser.java
===================================================================
RCS file:
/home/cvs/xml-xerces/java/src/org/apache/xerces/parsers/AbstractDOMParser.java,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -r1.106 -r1.107
--- AbstractDOMParser.java 16 Feb 2004 05:43:11 -0000 1.106
+++ AbstractDOMParser.java 17 Feb 2004 00:01:50 -0000 1.107
@@ -75,6 +75,7 @@
import org.apache.xerces.dom.NodeImpl;
import org.apache.xerces.dom.NotationImpl;
import org.apache.xerces.dom.PSVIAttrNSImpl;
+import org.apache.xerces.dom.PSVIDocumentImpl;
import org.apache.xerces.dom.PSVIElementNSImpl;
import org.apache.xerces.dom.TextImpl;
import org.apache.xerces.dom3.DOMError;
@@ -368,7 +369,8 @@
documentClassName = DEFAULT_DOCUMENT_CLASS_NAME;
}
- if (!documentClassName.equals(DEFAULT_DOCUMENT_CLASS_NAME)) {
+ if (!documentClassName.equals(DEFAULT_DOCUMENT_CLASS_NAME) &&
+ !documentClassName.equals(PSVI_DOCUMENT_CLASS_NAME)) {
// verify that this class exists and is of the right type
try {
Class _class = ObjectFactory.findProviderClass (documentClassName,
@@ -782,22 +784,36 @@
// set documentURI
fDocumentImpl.setDocumentURI (locator.getExpandedSystemId ());
}
+ else if (fDocumentClassName.equals (PSVI_DOCUMENT_CLASS_NAME)) {
+ fDocument = new PSVIDocumentImpl();
+ fDocumentImpl = (CoreDocumentImpl)fDocument;
+ fStorePSVI = true;
+ // REVISIT: when DOM Level 3 is REC rely on Document.support
+ // instead of specific class
+ // set DOM error checking off
+ fDocumentImpl.setStrictErrorChecking (false);
+ // set actual encoding
+ fDocumentImpl.setInputEncoding (encoding);
+ // set documentURI
+ fDocumentImpl.setDocumentURI (locator.getExpandedSystemId ());
+ }
else {
// use specified document class
try {
+ ClassLoader cl = ObjectFactory.findClassLoader();
Class documentClass = ObjectFactory.findProviderClass
(fDocumentClassName,
- ObjectFactory.findClassLoader (), true);
+ cl, true);
fDocument = (Document)documentClass.newInstance ();
// if subclass of our own class that's cool too
Class defaultDocClass =
ObjectFactory.findProviderClass (CORE_DOCUMENT_CLASS_NAME,
- ObjectFactory.findClassLoader (), true);
+ cl, true);
if (defaultDocClass.isAssignableFrom (documentClass)) {
fDocumentImpl = (CoreDocumentImpl)fDocument;
Class psviDocClass = ObjectFactory.findProviderClass
(PSVI_DOCUMENT_CLASS_NAME,
- ObjectFactory.findClassLoader (), true);
+ cl, true);
if (psviDocClass.isAssignableFrom (documentClass)) {
fStorePSVI = true;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]