You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2004/11/11 14:57:42 UTC

cvs commit: db-ojb/src/java/org/apache/ojb/broker/metadata RepositoryPersistor.java

arminw      2004/11/11 05:57:42

  Modified:    src/java/org/apache/ojb/broker/metadata Tag: OJB_1_0_RELEASE
                        RepositoryPersistor.java
  Log:
  minor SAXParser instantiation refactoring
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.24.2.1  +65 -37    db-ojb/src/java/org/apache/ojb/broker/metadata/RepositoryPersistor.java
  
  Index: RepositoryPersistor.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/metadata/RepositoryPersistor.java,v
  retrieving revision 1.24
  retrieving revision 1.24.2.1
  diff -u -r1.24 -r1.24.2.1
  --- RepositoryPersistor.java	1 Jun 2004 19:15:23 -0000	1.24
  +++ RepositoryPersistor.java	11 Nov 2004 13:57:42 -0000	1.24.2.1
  @@ -15,6 +15,20 @@
    * limitations under the License.
    */
   
  +import javax.xml.parsers.ParserConfigurationException;
  +import javax.xml.parsers.SAXParser;
  +import javax.xml.parsers.SAXParserFactory;
  +import java.io.File;
  +import java.io.FileInputStream;
  +import java.io.FileOutputStream;
  +import java.io.IOException;
  +import java.io.InputStream;
  +import java.io.OutputStream;
  +import java.io.PrintWriter;
  +import java.net.MalformedURLException;
  +import java.net.URL;
  +import java.util.Date;
  +
   import org.apache.commons.lang.SerializationUtils;
   import org.apache.commons.lang.SystemUtils;
   import org.apache.ojb.broker.util.ClassHelper;
  @@ -25,25 +39,12 @@
   import org.apache.ojb.broker.util.logging.Logger;
   import org.apache.ojb.broker.util.logging.LoggerFactory;
   import org.xml.sax.ContentHandler;
  +import org.xml.sax.ErrorHandler;
   import org.xml.sax.InputSource;
   import org.xml.sax.SAXException;
  -import org.xml.sax.SAXNotSupportedException;
  +import org.xml.sax.SAXParseException;
   import org.xml.sax.XMLReader;
   
  -import javax.xml.parsers.ParserConfigurationException;
  -import javax.xml.parsers.SAXParser;
  -import javax.xml.parsers.SAXParserFactory;
  -import java.io.File;
  -import java.io.FileInputStream;
  -import java.io.FileOutputStream;
  -import java.io.IOException;
  -import java.io.OutputStream;
  -import java.io.PrintWriter;
  -import java.io.InputStream;
  -import java.net.MalformedURLException;
  -import java.net.URL;
  -import java.util.Date;
  -
   /**
    * This class is responsible for reading and writing DescriptorRepository objects
    * from and to persistent media.
  @@ -246,7 +247,8 @@
       }
   
       /**
  -     * @todo We should re-design the configuration file reading
  +     *
  +     * TODO: We should re-design the configuration file reading
        */
       private Object buildRepository(String repositoryFileName, Class targetRepository)
               throws MalformedURLException, ParserConfigurationException, SAXException, IOException
  @@ -272,30 +274,21 @@
       private Object readMetadataFromXML(InputSource source, Class target)
               throws MalformedURLException, ParserConfigurationException, SAXException, IOException
       {
  -        // get a xml reader instance:
  -        SAXParser p = SAXParserFactory.newInstance().newSAXParser();
  +        // TODO: make this configurable
  +        boolean validate = false;
           
  -        log.debug("RespostoryPersistor using SAXParser : " + p.getClass().getName());
  -        XMLReader reader = p.getXMLReader();
  -        /**
  -         * MBAIRD: It's possible that the SAX implementation doesn't support this feature
  -         * so we try and catch the SAXNotSupportedException and just ignore it.
  -         *
  -         * arminw:
  -         * this ugly workaround - if() statement - was necessary, because when setFeature(..) was
  -         * called on crimson parser, the parser does not find any relative path
  -         * TODO better solution
  -         */
  -        try
  +        // get a xml reader instance:
  +        SAXParserFactory factory = SAXParserFactory.newInstance();
  +        log.info("RespostoryPersistor using SAXParserFactory : " + factory.getClass().getName());
  +        if (validate)
           {
  -            if (reader.getClass().getName().indexOf("crimson") != -1)
  -            {
  -                reader.setFeature("http://xml.org/sax/features/validation", true);
  -            }
  +            factory.setValidating(true);
           }
  -        catch (SAXNotSupportedException snse)
  +        SAXParser p = factory.newSAXParser();
  +        XMLReader reader = p.getXMLReader();
  +        if (validate)
           {
  -            // ignore
  +            reader.setErrorHandler(new OJBErrorHandler());
           }
   
           Object result = null;
  @@ -354,5 +347,40 @@
               throw new MalformedURLException("did not find resource " + repositoryFileName);
           }
           return url;
  +    }
  +
  +    // inner class
  +    class OJBErrorHandler implements ErrorHandler
  +    {
  +        public void warning(SAXParseException exception)
  +                throws SAXException
  +        {
  +            logMessage(exception, false);
  +        }
  +
  +        public void error(SAXParseException exception)
  +                throws SAXException
  +        {
  +            logMessage(exception, false);
  +        }
  +
  +        public void fatalError(SAXParseException exception)
  +                throws SAXException
  +        {
  +            logMessage(exception, true);
  +        }
  +
  +        void logMessage(SAXParseException e, boolean isFatal)
  +        {
  +            String msg = e.getMessage();
  +            if (isFatal)
  +            {
  +                log.error("## " + e.getSystemId() + " - line " + e.getLineNumber() +  ": " + msg + " ##");
  +            }
  +            else
  +            {
  +                log.warn(e.getSystemId() + " - line " + e.getLineNumber() + ": " + msg);
  +            }
  +        }
       }
   }
  
  
  

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