You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sk...@apache.org on 2005/02/06 05:19:17 UTC

svn commit: r151536 - jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/Digester.java

Author: skitching
Date: Sat Feb  5 20:19:16 2005
New Revision: 151536

URL: http://svn.apache.org/viewcvs?view=rev&rev=151536
Log:
* add comments to setValidating re how to validate against an xml schema
* remove method setPublicId; it was always broken
* rename getPublicId --> getDtdPublicId, add getDtdSystemId
* move code that sets up XMLReader callbacks into SAXHandler.initCallbacks
  so it is accessable to users who create XMLReaders directly.

Modified:
    jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/Digester.java

Modified: jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/Digester.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/Digester.java?view=diff&r1=151535&r2=151536
==============================================================================
--- jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/Digester.java (original)
+++ jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/Digester.java Sat Feb  5 20:19:16 2005
@@ -123,15 +123,31 @@
     // ------------------------------------------------------------- Properties
 
     /**
-     * Determine whether we are to validate the xml input against a schema.
+     * Determine whether we are to validate the xml input against a DTD.
      * If so, then an error will be reported by the parse() methods if the
      * input doesn't comply with the schema. If validation is disabled, then
      * performance will be improved, but no error will be reported if the
      * input is not correct.
      * <p>
-     * Note that even when validation is disabled, any external schema or DTD
-     * referenced by the input document must still be read, as it can declare
-     * default attributes and similar items which affect xml parsing.
+     * Note that even when validation is disabled, any external DTD referenced
+     * by the input document must still be read, as it can declare default 
+     * attributes and similar items which affect xml parsing.
+     * <p>
+     * In order to validate a document against an xml schema, all of the
+     * following must be done:
+     * <ul>
+     * <li>Validation must be enabled (using this method or by setting feature
+     *   "http://xml.org/sax/features/validation" on the XMLReader object).
+     * <li>Schema-validation must be enabled in a parser-specific manner. For
+     *  the Xerces parser (which is bundled with java 1.4 and 1.5) the feature
+     *  "http://apache.org/xml/features/validation/schema" must be set on the
+     *  XMLReader object.
+     * <li>The input xml document must declare the schema to use by defining
+     *   xml attribute "xsi:noNamespaceSchemaLocation" or "xsi:schemaLocation"
+     *   on some element (usually the root element)
+     * <li>The DOCTYPE declaration on the top of the input xml element must
+     *   be removed; schema validation is ignored if DOCTYPE is present.
+     * </ul>
      *
      * @param validating The new validating parser flag.
      *
@@ -166,6 +182,10 @@
      *
      * <p>The reader passed here should be configured with namespace-aware
      * parsing enabled, as the digester classes assume this.</p>
+     *
+     * <p>This method does not set up the SAXHandler as the reader's handler
+     *  for content, dtd or other events. You should generally call method
+     *  SAXHandler.initCallbacks before starting the parse.
      */
     public void setXMLReader(XMLReader reader) {
         this.reader = reader;
@@ -174,7 +194,7 @@
     /**
      * Set the class loader to be used for instantiating application objects
      * when required. If a non-null value is passed to this method, then
-     * method {@link #useContextClassLoader} will have no effect.
+     * method {@link #setUseContextClassLoader} will have no effect.
      * <p>
      * When an Action is executed due to some xml input, and that Action
      * wishes to create an object to represent the input, then the class
@@ -254,34 +274,35 @@
     }
 
     /**
-     * Set the publid id of the current file being parsed. This will cause
-     * the declared DOCTYPE (if any) of the input document to be ignored.
-     *
-     * Instead the provided publicId will be looked up in the known entities,
-     * and the resource located at the associated URL will be used as the
-     * DTD for this input document.
+     * Get the public identifier of the DTD associated with the document
+     * currently being parsed, or most recently parsed.
      * <p>
-     * NOTE: if the input document doesn't include a DOCTYPE, then the
-     * DTD specified by this call is not used. There is currently no way
-     * to force an input document to be validated against a specific DTD
-     * (due to a lack of this feature in the xml standard).
-     *
-     * @param publicId the DTD/Schema public's id.
+     * If the input document has no DOCTYPE declaration, then null will
+     * be returned.
+     * <p>
+     * Note that this method requires the underlying xml parser to support
+     * the org.xml.sax.ext.LexicalHandler interface. If the parser does not
+     * provide callbacks via this interface, then no public id information
+     * will be available (null will be returned).
      */
-    public void setPublicId(String publicId){
-        saxHandler.setPublicId(publicId);
+    public String getDTDPublicId() {
+        return saxHandler.getDTDPublicId();
     }
 
     /**
-     * Get the public identifier of the DTD we are currently parsing under,
-     * if any. If setPublicId has been called previously, then the value
-     * returned here will be the one explicitly set. Otherwise, if we have
-     * already seen a DOCTYPE declaration in the input data, then the
-     * public id in that DOCTYPE will be returned. Otherwise (parsing hasn't
-     * started or the input document had no DOCTYPE) null is returned.
+     * Get the system identifier of the DTD associated with the document
+     * currently being parsed, or most recently parsed.
+     * <p>
+     * If the input document has no DOCTYPE declaration, then null will
+     * be returned.
+     * <p>
+     * Note that this method requires the underlying xml parser to support
+     * the org.xml.sax.ext.LexicalHandler interface. If the parser does not
+     * provide callbacks via this interface, then no public id information
+     * will be available (null will be returned).
      */
-    public String getPublicId() {
-        return saxHandler.getPublicId();
+    public String getDTDSystemId() {
+        return saxHandler.getDTDSystemId();
     }
 
     /**
@@ -324,7 +345,7 @@
      * and there is no explicit classloader set, then the same classloader
      * that loaded the Action class is used.
      * <p>
-     * See {@link #setClassLoader}.
+     * See {@link #setExplicitClassLoader}.
      *
      * @param use determines whether to use the Context Classloader.
      */
@@ -626,10 +647,7 @@
             return null;
         }
 
-        reader.setDTDHandler(saxHandler);
-        reader.setContentHandler(saxHandler);
-        reader.setEntityResolver(saxHandler);
-        reader.setErrorHandler(saxHandler);
+        saxHandler.initCallbacks(reader);
         return reader;
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org