elena 2003/06/10 11:09:39
Modified: java/src/org/apache/xerces/dom
CoreDOMImplementationImpl.java
CoreDocumentImpl.java DOMImplementationImpl.java
DOMImplementationSourceImpl.java EntityImpl.java
NodeImpl.java
java/src/org/apache/xerces/dom3/bootstrap
DOMImplementationListImpl.java
DOMImplementationRegistry.java
java/src/org/apache/xerces/impl/xs/opti DefaultDocument.java
DefaultNode.java
java/src/org/apache/xerces/parsers AbstractDOMParser.java
Log:
Sink up with the DOM Level 3 Core Last Call interfaces. Also add a hook to support
XPath DOM API if Xalan implementation can be found in the classpath.
Revision Changes Path
1.25 +26 -18
xml-xerces/java/src/org/apache/xerces/dom/CoreDOMImplementationImpl.java
Index: CoreDOMImplementationImpl.java
===================================================================
RCS file:
/home/cvs/xml-xerces/java/src/org/apache/xerces/dom/CoreDOMImplementationImpl.java,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- CoreDOMImplementationImpl.java 25 Mar 2003 20:49:14 -0000 1.24
+++ CoreDOMImplementationImpl.java 10 Jun 2003 18:09:38 -0000 1.25
@@ -55,23 +55,20 @@
* <http://www.apache.org/>.
*/
package org.apache.xerces.dom;
+import org.apache.xerces.impl.RevalidationHandler;
+import org.apache.xerces.parsers.DOMBuilderImpl;
+import org.apache.xerces.util.ObjectFactory;
+import org.apache.xerces.util.XMLChar;
+import org.apache.xml.serialize.DOMWriterImpl;
import org.w3c.dom.DOMException;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentType;
import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-// DOM L3 LS
-import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.DOMBuilder;
-import org.w3c.dom.ls.DOMWriter;
+import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.DOMInputSource;
-import org.apache.xerces.parsers.DOMBuilderImpl;
-import org.apache.xerces.util.XMLChar;
-import org.apache.xml.serialize.DOMWriterImpl;
-// DOM Revalidation
-import org.apache.xerces.impl.RevalidationHandler;
-import org.apache.xerces.util.ObjectFactory;
+import org.w3c.dom.ls.DOMWriter;
/**
* The DOMImplementation class is description of a particular
* implementation of the Document Object Model. As such its data is
@@ -136,6 +133,19 @@
public boolean hasFeature(String feature, String version) {
// Currently, we support only XML Level 1 version 1.0
boolean anyVersion = version == null || version.length() == 0;
+ // check if Xalan implementation is around and if yes report true for
supporting
+ // XPath API
+ if ((feature.equalsIgnoreCase("XPath") ||
feature.equalsIgnoreCase("+XPath"))&& version.equals("3.0")){
+ try{
+ Class xpathClass = ObjectFactory.findProviderClass(
+ "org.apache.xpath.domapi.XPathEvaluatorImpl",
+ ObjectFactory.findClassLoader(), true);
+ }
+ catch (Exception e){
+ return false;
+ }
+ return true;
+ }
return (
feature.equalsIgnoreCase("Core")
&& (anyVersion || version.equals("1.0") ||
version.equals("2.0")))
@@ -272,13 +282,11 @@
/**
* DOM Level 3 WD - Experimental.
*/
- public Node getFeature(String feature, String version) {
- String msg =
- DOMMessageFormatter.formatMessage(
- DOMMessageFormatter.DOM_DOMAIN,
- "NOT_SUPPORTED_ERR",
- null);
- throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);
+ public Object getFeature(String feature, String version) {
+ if (singleton.hasFeature(feature, version)){
+ return singleton;
+ }
+ return null;
}
// DOM L3 LS
1.41 +36 -9 xml-xerces/java/src/org/apache/xerces/dom/CoreDocumentImpl.java
Index: CoreDocumentImpl.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/CoreDocumentImpl.java,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -r1.40 -r1.41
--- CoreDocumentImpl.java 25 Mar 2003 20:49:38 -0000 1.40
+++ CoreDocumentImpl.java 10 Jun 2003 18:09:38 -0000 1.41
@@ -63,6 +63,7 @@
import org.apache.xerces.dom3.DOMConfiguration;
import org.apache.xerces.dom3.UserDataHandler;
+import org.apache.xerces.util.ObjectFactory;
import org.apache.xerces.util.XMLChar;
import org.apache.xerces.xni.NamespaceContext;
import org.w3c.dom.Attr;
@@ -161,7 +162,10 @@
// DOM Level 3: normalizeDocument
transient DOMNormalizer domNormalizer = null;
- transient DOMConfigurationImpl fConfiguration= null;
+ transient DOMConfigurationImpl fConfiguration= null;
+
+ // support of XPath API
+ transient Object fXPathEvaluator = null;
/** Table for quick check of child insertion. */
private final static int[] kidOK;
@@ -264,7 +268,7 @@
* since it has to operate in terms of a particular implementation.
*/
public CoreDocumentImpl() {
- this(false);
+ this(false);
}
/** Constructor. */
@@ -489,6 +493,29 @@
throws DOMException {
// no-op
}
+
+ /**
+ * @since DOM Level 3
+ */
+ public Object getFeature(String feature, String version) {
+ if ((feature.equalsIgnoreCase("XPath")
+ || feature.equalsIgnoreCase("+XPath"))&& version.equals("3.0")){
+ try{
+ Class xpathClass = ObjectFactory.findProviderClass(
+ "org.apache.xpath.domapi.XPathEvaluatorImpl",
+ ObjectFactory.findClassLoader(), true);
+ fXPathEvaluator = xpathClass.newInstance();
+ java.lang.reflect.Method setDocument =
xpathClass.getMethod("setDoc", new Class[]{Document.class});
+ setDocument.invoke(fXPathEvaluator, new
Object[]{this});
+ return fXPathEvaluator;
+ }
+ catch (Exception e){
+ e.printStackTrace();
+ return null;
+ }
+ }
+ return super.getFeature(feature, version);
+ }
//
// Document methods
@@ -763,7 +790,7 @@
* An attribute specifying, as part of the XML declaration,
* the encoding of this document. This is null when unspecified.
*/
- public void setEncoding(String value) {
+ public void setXmlEncoding(String value) {
encoding = value;
}
@@ -771,7 +798,7 @@
* DOM Level 3 WD - Experimental.
* The encoding of this document (part of XML Declaration)
*/
- public String getEncoding() {
+ public String getXmlEncoding() {
return encoding;
}
@@ -780,7 +807,7 @@
* version - An attribute specifying, as part of the XML declaration,
* the version number of this document. This is null when unspecified
*/
- public void setVersion(String value) {
+ public void setXmlVersion(String value) {
version = value;
}
@@ -788,7 +815,7 @@
* DOM Level 3 WD - Experimental.
* The version of this document (part of XML Declaration)
*/
- public String getVersion() {
+ public String getXmlVersion() {
return version;
}
@@ -797,7 +824,7 @@
* standalone - An attribute specifying, as part of the XML declaration,
* whether this document is standalone
*/
- public void setStandalone(boolean value) {
+ public void setXmlStandalone(boolean value) {
standalone = value;
}
@@ -806,7 +833,7 @@
* standalone that specifies whether this document is standalone
* (part of XML Declaration)
*/
- public boolean getStandalone() {
+ public boolean getXmlStandalone() {
return standalone;
}
1.27 +15 -1
xml-xerces/java/src/org/apache/xerces/dom/DOMImplementationImpl.java
Index: DOMImplementationImpl.java
===================================================================
RCS file:
/home/cvs/xml-xerces/java/src/org/apache/xerces/dom/DOMImplementationImpl.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- DOMImplementationImpl.java 19 Nov 2002 01:41:36 -0000 1.26
+++ DOMImplementationImpl.java 10 Jun 2003 18:09:38 -0000 1.27
@@ -57,6 +57,7 @@
package org.apache.xerces.dom;
+import org.apache.xerces.util.ObjectFactory;
import org.w3c.dom.DOMException;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
@@ -122,6 +123,19 @@
// Currently, we support only XML Level 1 version 1.0
boolean anyVersion = version == null || version.length() == 0;
+ // check if Xalan implementation is around and if yes report true for
supporting
+ // XPath API
+ if ((feature.equalsIgnoreCase("XPath") ||
feature.equalsIgnoreCase("+XPath"))&& version.equals("3.0")){
+ try{
+ Class xpathClass = ObjectFactory.findProviderClass(
+ "org.apache.xpath.domapi.XPathEvaluatorImpl",
+ ObjectFactory.findClassLoader(), true);
+ }
+ catch (Exception e){
+ return false;
+ }
+ return true;
+ }
return
(feature.equalsIgnoreCase("Core")
&& (anyVersion
1.10 +2 -1
xml-xerces/java/src/org/apache/xerces/dom/DOMImplementationSourceImpl.java
Index: DOMImplementationSourceImpl.java
===================================================================
RCS file:
/home/cvs/xml-xerces/java/src/org/apache/xerces/dom/DOMImplementationSourceImpl.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- DOMImplementationSourceImpl.java 8 May 2003 19:52:40 -0000 1.9
+++ DOMImplementationSourceImpl.java 10 Jun 2003 18:09:38 -0000 1.10
@@ -61,6 +61,7 @@
import org.apache.xerces.dom3.DOMImplementationList;
import org.apache.xerces.dom3.DOMImplementationSource;
+import org.apache.xerces.dom3.bootstrap.DOMImplementationListImpl;
import org.w3c.dom.DOMImplementation;
/**
1.22 +5 -5 xml-xerces/java/src/org/apache/xerces/dom/EntityImpl.java
Index: EntityImpl.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/EntityImpl.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- EntityImpl.java 8 May 2003 19:52:40 -0000 1.21
+++ EntityImpl.java 10 Jun 2003 18:09:38 -0000 1.22
@@ -209,7 +209,7 @@
* DOM Level 3 WD - experimental
* the version number of this entity, when it is an external parsed entity.
*/
- public String getVersion() {
+ public String getXmlVersion() {
if (needsSyncData()) {
synchronizeData();
@@ -223,7 +223,7 @@
* DOM Level 3 WD - experimental
* the encoding of this entity, when it is an external parsed entity.
*/
- public String getEncoding() {
+ public String getXmlEncoding() {
if (needsSyncData()) {
synchronizeData();
@@ -273,7 +273,7 @@
* the encoding of this entity, when it is an external parsed entity.
* This is null otherwise
*/
- public void setEncoding(String value) {
+ public void setXmlEncoding(String value) {
if (needsSyncData()) {
synchronizeData();
@@ -312,7 +312,7 @@
* the version number of this entity, when it is an external parsed entity.
* This is null otherwise
*/
- public void setVersion(String value) {
+ public void setXmlVersion(String value) {
if (needsSyncData()) {
synchronizeData();
}
1.68 +2 -19 xml-xerces/java/src/org/apache/xerces/dom/NodeImpl.java
Index: NodeImpl.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/NodeImpl.java,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -r1.67 -r1.68
--- NodeImpl.java 8 May 2003 19:52:40 -0000 1.67
+++ NodeImpl.java 10 Jun 2003 18:09:38 -0000 1.68
@@ -1791,26 +1791,9 @@
}
/**
- * This method returns a specialized object which implements the
- * specialized APIs of the specified feature and version. The
- * specialized object may also be obtained by using binding-specific
- * casting methods but is not necessarily expected to, as discussed in Mixed
DOM implementations.
- * @param feature The name of the feature requested (case-insensitive).
- * @param version This is the version number of the feature to test. If
- * the version is <code>null</code> or the empty string, supporting
- * any version of the feature will cause the method to return an
- * object that supports at least one version of the feature.
- * @return Returns an object which implements the specialized APIs of
- * the specified feature and version, if any, or <code>null</code> if
- * there is no object which implements interfaces associated with that
- * feature. If the <code>DOMObject</code> returned by this method
- * implements the <code>Node</code> interface, it must delegate to the
- * primary core <code>Node</code> and not return results inconsistent
- * with the primary core <code>Node</code> such as attributes,
- * childNodes, etc.
* @since DOM Level 3
*/
- public Node getFeature(String feature, String version) {
+ public Object getFeature(String feature, String version) {
// we don't have any alternate node, either this node does the job
// or we don't have anything that does
return isSupported(feature, version) ? this : null;
1.2 +1 -2
xml-xerces/java/src/org/apache/xerces/dom3/bootstrap/DOMImplementationListImpl.java
Index: DOMImplementationListImpl.java
===================================================================
RCS file:
/home/cvs/xml-xerces/java/src/org/apache/xerces/dom3/bootstrap/DOMImplementationListImpl.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DOMImplementationListImpl.java 20 Mar 2003 00:38:30 -0000 1.1
+++ DOMImplementationListImpl.java 10 Jun 2003 18:09:39 -0000 1.2
@@ -24,7 +24,6 @@
import org.apache.xerces.dom3.DOMImplementationList;
import org.w3c.dom.DOMImplementation;
-
public class DOMImplementationListImpl
implements DOMImplementationList {
@@ -69,7 +68,7 @@
/**
* Add a <code>DOMImplementation</code> in the list.
*/
- protected void add(DOMImplementation domImpl) {
+ public void add(DOMImplementation domImpl) {
sources.add(domImpl);
}
}
1.2 +16 -8
xml-xerces/java/src/org/apache/xerces/dom3/bootstrap/DOMImplementationRegistry.java
Index: DOMImplementationRegistry.java
===================================================================
RCS file:
/home/cvs/xml-xerces/java/src/org/apache/xerces/dom3/bootstrap/DOMImplementationRegistry.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DOMImplementationRegistry.java 20 Mar 2003 00:38:30 -0000 1.1
+++ DOMImplementationRegistry.java 10 Jun 2003 18:09:39 -0000 1.2
@@ -20,10 +20,17 @@
* Applications may also register DOMImplementationSource
* implementations by using a method on this class. They may then
* query instances of the registry for implementations supporting
- * specific features.</p>
+ * specific features.
*
+ * <p>Example:</p>
+ * <pre class='example'>
+ * // get an instance of the DOMImplementation registry
+ * DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance();
+ * // get a DOM implementation the Level 3 XML module
+ * DOMImplementation domImpl = registry.getDOMImplementation("XML 3.0");
+ * </pre>
* <p>This provides an application with an implementation-independent
- * starting point.
+ * starting point.</p>
*
* @see DOMImplementation
* @see DOMImplementationSource
@@ -32,17 +39,18 @@
package org.apache.xerces.dom3.bootstrap;
-import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.ClassLoader;
+import java.lang.String;
+import java.util.StringTokenizer;
import java.util.Enumeration;
import java.util.Hashtable;
-import java.util.StringTokenizer;
-import org.apache.xerces.dom3.DOMImplementationList;
import org.apache.xerces.dom3.DOMImplementationSource;
+import org.apache.xerces.dom3.DOMImplementationList;
import org.w3c.dom.DOMImplementation;
-
public class DOMImplementationRegistry {
// The system property to specify the DOMImplementationSource class names.
@@ -100,7 +108,7 @@
* This is a space separated list in which each feature is
* specified by its name optionally followed by a space
* and a version number.
- * This is something like: "XML 1.0 Traversal Events 2.0"
+ * This is something like: "XML 1.0 Traversal +Events 2.0"
* @return An implementation that has the desired features, or
* <code>null</code> if this source has none.
*/
@@ -131,7 +139,7 @@
* This is a space separated list in which each feature is
* specified by its name optionally followed by a space
* and a version number.
- * This is something like: "XML 1.0 Traversal Events 2.0"
+ * This is something like: "XML 1.0 Traversal +Events 2.0"
* @return A list of DOMImplementations that support the desired features.
*/
public DOMImplementationList getDOMImplementations(String features)
1.4 +7 -7
xml-xerces/java/src/org/apache/xerces/impl/xs/opti/DefaultDocument.java
Index: DefaultDocument.java
===================================================================
RCS file:
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/opti/DefaultDocument.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DefaultDocument.java 30 Dec 2002 21:21:08 -0000 1.3
+++ DefaultDocument.java 10 Jun 2003 18:09:39 -0000 1.4
@@ -184,7 +184,7 @@
throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not
supported");
}
- public String getEncoding(){
+ public String getXmlEncoding(){
return null;
}
@@ -194,7 +194,7 @@
* of this document. This is <code>null</code> when unspecified.
* @since DOM Level 3
*/
- public void setEncoding(String encoding){
+ public void setXmlEncoding(String encoding){
throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not
supported");
}
@@ -204,7 +204,7 @@
* <br> This attribute represents the property [standalone] defined in .
* @since DOM Level 3
*/
- public boolean getStandalone(){
+ public boolean getXmlStandalone(){
throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not
supported");
}
/**
@@ -213,7 +213,7 @@
* <br> This attribute represents the property [standalone] defined in .
* @since DOM Level 3
*/
- public void setStandalone(boolean standalone){
+ public void setXmlStandalone(boolean standalone){
throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not
supported");
}
@@ -226,7 +226,7 @@
* not supported by this <code>Document</code>.
* @since DOM Level 3
*/
- public String getVersion(){
+ public String getXmlVersion(){
return null;
}
/**
@@ -238,7 +238,7 @@
* not supported by this <code>Document</code>.
* @since DOM Level 3
*/
- public void setVersion(String version) throws DOMException{
+ public void setXmlVersion(String version) throws DOMException{
throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Method not
supported");
}
1.6 +2 -2
xml-xerces/java/src/org/apache/xerces/impl/xs/opti/DefaultNode.java
Index: DefaultNode.java
===================================================================
RCS file:
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/opti/DefaultNode.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- DefaultNode.java 20 Mar 2003 00:38:30 -0000 1.5
+++ DefaultNode.java 10 Jun 2003 18:09:39 -0000 1.6
@@ -240,7 +240,7 @@
}
- public Node getFeature(String feature, String version){
+ public Object getFeature(String feature, String version){
return null;
}
public Object setUserData(String key, Object data, UserDataHandler handler){
1.88 +9 -9
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.87
retrieving revision 1.88
diff -u -r1.87 -r1.88
--- AbstractDOMParser.java 26 May 2003 17:50:45 -0000 1.87
+++ AbstractDOMParser.java 10 Jun 2003 18:09:39 -0000 1.88
@@ -584,8 +584,8 @@
}
if (!fDeferNodeExpansion) {
if (fCurrentEntityDecl != null && !fFilterReject) {
- fCurrentEntityDecl.setEncoding(encoding);
- fCurrentEntityDecl.setVersion(version);
+ fCurrentEntityDecl.setXmlEncoding(encoding);
+ fCurrentEntityDecl.setXmlVersion(version);
}
}
else {
@@ -854,15 +854,15 @@
// REVISIT: when DOM Level 3 is REC rely on Document.support
// instead of specific class
if (fDocumentImpl != null) {
- fDocumentImpl.setVersion(version);
- fDocumentImpl.setEncoding(encoding);
- fDocumentImpl.setStandalone("yes".equals(standalone));
+ fDocumentImpl.setXmlVersion(version);
+ fDocumentImpl.setXmlEncoding(encoding);
+ fDocumentImpl.setXmlStandalone("yes".equals(standalone));
}
}
else {
- fDeferredDocumentImpl.setVersion(version);
- fDeferredDocumentImpl.setEncoding(encoding);
- fDeferredDocumentImpl.setStandalone("yes".equals(standalone));
+ fDeferredDocumentImpl.setXmlVersion(version);
+ fDeferredDocumentImpl.setXmlEncoding(encoding);
+ fDeferredDocumentImpl.setXmlStandalone("yes".equals(standalone));
}
} // xmlDecl(String,String,String)
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]