User: mikesr  
  Date: 02/02/08 07:19:52

  Modified:    src/main/org/jboss/metadata XmlFileLoader.java
  Log:
  Added local resolution for new jboss_3_0.dtd
  
  Revision  Changes    Path
  1.25      +411 -411  jboss/src/main/org/jboss/metadata/XmlFileLoader.java
  
  Index: XmlFileLoader.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/metadata/XmlFileLoader.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- XmlFileLoader.java        2 Feb 2002 19:46:48 -0000       1.24
  +++ XmlFileLoader.java        8 Feb 2002 15:19:52 -0000       1.25
  @@ -1,411 +1,411 @@
  -/*
  - * JBoss, the OpenSource J2EE webOS
  - *
  - * Distributable under LGPL license.
  - * See terms of license at gnu.org.
  - */
  -package org.jboss.metadata;
  -
  -import java.net.URL;
  -import java.io.IOException;
  -import java.io.Reader;
  -import java.io.InputStreamReader;
  -import java.io.InputStream;
  -import java.util.Hashtable;
  -
  -import javax.xml.parsers.DocumentBuilderFactory;
  -import javax.xml.parsers.DocumentBuilder;
  -
  -import org.w3c.dom.Document;
  -import org.w3c.dom.Element;
  -import org.xml.sax.EntityResolver;
  -import org.xml.sax.ErrorHandler;
  -import org.xml.sax.InputSource;
  -import org.xml.sax.SAXException;
  -import org.xml.sax.SAXParseException;
  -
  -import org.jboss.deployment.DeploymentException;
  -import org.jboss.logging.Logger;
  -
  -/**
  - *   XmlFileLoader class is used to read ejb-jar.xml, standardjboss.xml, jboss.xml
  - *   files, process them using DTDs and create ApplicationMetaData object for 
future using
  - *
  - *   @see <related>
  - *   @author <a href="mailto:[EMAIL PROTECTED]";>Bill Burke</a>
  - *   @author <a href="mailto:[EMAIL PROTECTED]";>Sebastien Alborini</a>
  - *   @author <a href="mailto:[EMAIL PROTECTED]";>Wolfgang Werner</a>
  - *   @author <a href="mailto:[EMAIL PROTECTED]";>Darius Davidavicius</a>
  - *   @author <a href="mailto:[EMAIL PROTECTED]";>Scott Stark</a>
  - *   @version $Revision: 1.24 $
  - *
  - *   Revisions:
  - *   20010620 Bill Burke: Print an error message when failing to load 
standardjboss.xml
  - *                        or jboss.xml.  It was a pain to debug a standardjboss.xml
  - *                        syntax error.
  - */
  -public class XmlFileLoader
  -{
  -    // Constants -----------------------------------------------------
  -
  -    // Attributes ----------------------------------------------------
  -    private static boolean defaultValidateDTDs = false;
  -    private static Logger log = Logger.getLogger(XmlFileLoader.class);
  -    private ClassLoader classLoader;
  -    private ApplicationMetaData metaData;
  -    private boolean validateDTDs;
  -
  -    // Static --------------------------------------------------------
  -    public static boolean getDefaultValidateDTDs()
  -    {
  -        return defaultValidateDTDs;
  -    }
  -    public static void setDefaultValidateDTDs(boolean validate)
  -    {
  -        defaultValidateDTDs = validate;
  -    }
  -
  -    // Constructors --------------------------------------------------
  -    public XmlFileLoader()
  -    {
  -        this(defaultValidateDTDs);
  -    }
  -    public XmlFileLoader(boolean validateDTDs)
  -    {
  -        this.validateDTDs = validateDTDs;
  -    }
  -
  -    // Public --------------------------------------------------------
  -    public ApplicationMetaData getMetaData() {
  -        return metaData;
  -    }
  -
  -   /**
  -   Set the class loader
  -   @param ClassLoader cl - class loader
  -   */
  -    public void setClassLoader(ClassLoader cl) {
  -        classLoader = cl;
  -    }
  -
  -   /**
  -   Gets the class loader
  -   @return ClassLoader - the class loader
  -   */
  -   public ClassLoader getClassLoader() {
  -        return classLoader;
  -    }
  -
  -   /** Get the flag indicating that ejb-jar.dtd, jboss.dtd &
  -    jboss-web.dtd conforming documents should be validated
  -    against the DTD.
  -    */
  -   public boolean getValidateDTDs()
  -   {
  -       return validateDTDs;
  -   }
  -   /** Set the flag indicating that ejb-jar.dtd, jboss.dtd &
  -    jboss-web.dtd conforming documents should be validated
  -    against the DTD.
  -    */
  -   public void setValidateDTDs(boolean validate)
  -   {
  -       this.validateDTDs = validate;
  -   }
  -
  -    /**
  -    * load()
  -    *
  -    * This method creates the ApplicationMetaData.
  -    * The configuration files are found in the classLoader.
  -    * The default jboss.xml and jaws.xml files are always read first, then we 
override
  -    * the defaults if the user provides them
  -    *
  -    */
  -    public ApplicationMetaData load() throws Exception {
  -        // create the metadata
  -        metaData = new ApplicationMetaData();
  -
  -        // Load ejb-jar.xml
  -
  -        // we can always find the files in the classloader
  -        URL ejbjarUrl = getClassLoader().getResource("META-INF/ejb-jar.xml");
  -
  -        if (ejbjarUrl == null) {
  -            throw new DeploymentException("no ejb-jar.xml found");
  -        }
  -
  -        Document ejbjarDocument = getDocumentFromURL(ejbjarUrl);
  -
  -        // the url may be used to report errors
  -        metaData.setUrl(ejbjarUrl);
  -        metaData.importEjbJarXml(ejbjarDocument.getDocumentElement());
  -
  -        // Load jbossdefault.xml from the default classLoader
  -        // we always load defaults first
  -        // we use the context classloader, because this guy has to know where
  -        // this file is
  -        URL defaultJbossUrl = 
Thread.currentThread().getContextClassLoader().getResource("standardjboss.xml");
  -
  -        if (defaultJbossUrl == null) {
  -            throw new DeploymentException("no standardjboss.xml found");
  -        }
  -
  -        Document defaultJbossDocument = null;
  -
  -        try
  -        {
  -            defaultJbossDocument = getDocumentFromURL(defaultJbossUrl);
  -        
  -            metaData.setUrl(defaultJbossUrl);
  -            metaData.importJbossXml(defaultJbossDocument.getDocumentElement());
  -        }
  -        catch (Exception ex)
  -        {
  -            log.error("failed to load standardjboss.xml.  There could be a syntax 
error.", ex);
  -            throw ex;
  -        }
  -        // Load jboss.xml
  -        // if this file is provided, then we override the defaults
  -        try
  -        {
  -            URL jbossUrl = getClassLoader().getResource("META-INF/jboss.xml");
  -        
  -            if (jbossUrl != null) {
  -            //          Logger.debug(jbossUrl.toString() + " found. Overriding 
defaults");
  -            Document jbossDocument = getDocumentFromURL(jbossUrl);
  -            
  -            metaData.setUrl(jbossUrl);
  -            metaData.importJbossXml(jbossDocument.getDocumentElement());
  -            }
  -        }
  -        catch (Exception ex)
  -        {
  -            log.error("failed to load jboss.xml.  There could be a syntax error.", 
ex);
  -            throw ex;
  -        }
  -
  -        return metaData;
  -    }
  -
  -    /** Invokes getDocument(url, defaultValidateDTDs)
  -     */
  -    public static Document getDocument(URL url) throws DeploymentException
  -    {
  -        return getDocument(url, defaultValidateDTDs);
  -    }
  -    /** Get the xml file from the URL and parse it into a Document object.
  -     Calls new XmlFileLoader(validateDTDs).getDocumentFromURL(url);
  -     @param url, the URL from which the xml doc is to be obtained.
  -    @return Document
  -    */
  -    public static Document getDocument(URL url, boolean validateDTDs) throws 
DeploymentException
  -    {
  -        XmlFileLoader loader = new XmlFileLoader(validateDTDs);
  -        return loader.getDocumentFromURL(url);
  -    }
  -
  -    /** Get the xml file from the URL and parse it into a Document object.
  -     Calls getDocument(url.openStream(), url.getPath());
  -     @param url, the URL from which the xml doc is to be obtained.
  -    @return Document
  -    */
  -    public Document getDocumentFromURL(URL url) throws DeploymentException
  -    {
  -        try
  -        {
  -            InputStream is = url.openStream();
  -            String docPath = url.getPath();
  -            return getDocument(is, docPath);
  -        } catch (IOException e) {
  -            throw new DeploymentException("Failed to obtain xml doc from URL", e);
  -        }
  -    }
  -
  -    /** Parses the xml document in is and created the DOM Document. DTD validation
  -    is enabled if validateDTDs is true and we install an EntityResolver and
  -    ErrorHandler to resolve J2EE DTDs and handle errors.
  -    @param is, the InputStream container the xml descriptor to parse
  -    @param inPath, the path information for the xml doc. This is used for
  -    only for error reporting.
  -    @return Document
  -    */
  -    public Document getDocument(InputStream is, String inPath) throws 
DeploymentException
  -    {
  -        try
  -        {
  -            DocumentBuilderFactory docBuilderFactory = 
DocumentBuilderFactory.newInstance();
  -            // Enable DTD validation based on our validateDTDs flag
  -            docBuilderFactory.setValidating(validateDTDs);
  -            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
  -
  -            LocalResolver lr = new LocalResolver();
  -            ErrorHandler eh = new LocalErrorHandler( inPath, lr );
  -            docBuilder.setEntityResolver(lr);
  -            docBuilder.setErrorHandler(eh );
  -
  -            Document doc = docBuilder.parse(is);
  -            return doc;
  -        } catch (SAXParseException e) {
  -        
System.out.println(e.getMessage()+":"+e.getColumnNumber()+":"+e.getLineNumber());
  -            e.printStackTrace();
  -            throw new DeploymentException(e.getMessage(), e);
  -        } catch (SAXException e) {
  -            System.out.println(e.getException());
  -            throw new DeploymentException(e.getMessage(), e);
  -        } catch (Exception e) {
  -            throw new DeploymentException(e.getMessage(), e);
  -        }
  -    }
  -
  -    // Package protected ---------------------------------------------
  -
  -    // Protected -----------------------------------------------------
  -
  -
  -    // Private -------------------------------------------------------
  -
  -    // Inner classes -------------------------------------------------
  -    /**
  -    * Local entity resolver to handle J2EE DTDs. With this a http connection
  -    * to sun is not needed during deployment.
  -    * Function boolean hadDTD() is here to avoid validation errors in
  -    * descriptors that do not have a DOCTYPE declaration.
  -    * @author <a href="mailto:[EMAIL PROTECTED]";>Wolfgang Werner</a>
  -    * @author <a href="mailto:[EMAIL PROTECTED]";>Darius Davidavicius</a>
  -    **/
  -    private static class LocalResolver implements EntityResolver
  -    {
  -        private Hashtable dtds = new Hashtable();
  -        private boolean hasDTD = false;
  -
  -        public LocalResolver() {
  -            registerDTD("-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 
1.1//EN", "ejb-jar.dtd");
  -            registerDTD("-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 
2.0//EN", "ejb-jar_2_0.dtd");
  -            registerDTD("-//Sun Microsystems, Inc.//DTD J2EE Application 1.2//EN", 
"application_1_2.dtd");
  -            registerDTD("-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN", 
"application_1_3.dtd");
  -            registerDTD("-//Sun Microsystems, Inc.//DTD Connector 1.0//EN", 
"connector_1_0.dtd");
  -            registerDTD("-//JBoss//DTD JAWS//EN", "jaws.dtd");
  -            registerDTD("-//JBoss//DTD JAWS 2.4//EN", "jaws_2_4.dtd");
  -            registerDTD("-//JBoss//DTD JAWS 3.0//EN", "jaws_3_0.dtd");
  -            registerDTD("-//JBoss//DTD JBOSS//EN","jboss.dtd");
  -            registerDTD("-//JBoss//DTD JBOSS 2.4//EN","jboss_2_4.dtd");
  -
  -            registerDTD("-//JBoss//DTD JBOSSCMP-JDBC 3.0//EN",
  -                  "jbosscmp-jdbc_3_0.dtd");
  -        }
  -
  -        /**
  -        Registers available DTDs
  -        @param String publicId    - Public ID of DTD
  -        @param String dtdFileName - the file name of DTD
  -        */
  -        public void registerDTD(String publicId, String dtdFileName) {
  -            dtds.put(publicId, dtdFileName);
  -        }
  -
  -        /**
  -        Returns DTD inputSource. Is DTD was found in the hashtable and inputSource 
was created
  -        flad hasDTD is ser to true.
  -        @param String publicId    - Public ID of DTD
  -        @param String dtdFileName - the file name of DTD
  -        @return InputSource of DTD
  -        */
  -        public InputSource resolveEntity (String publicId, String systemId)
  -        {
  -            hasDTD = false;
  -            String dtd = (String)dtds.get(publicId);
  -
  -            if (dtd != null)
  -            {
  -                hasDTD = true;
  -                try
  -                {
  -                    InputStream dtdStream = getClass().getResourceAsStream(dtd);
  -                    InputSource aInputSource = new InputSource(dtdStream);
  -                    return aInputSource;
  -                } catch( Exception ex ) {
  -                    // ignore
  -                }
  -            }
  -            return null;
  -        }
  -
  -      /**
  -      Returns the boolean value to inform id DTD was found in the XML file or not
  -      @return boolean - true if DTD was found in XML
  -      */
  -      public boolean hasDTD ()
  -      {
  -          return hasDTD;
  -      }
  -
  -    }
  -
  -    /** Local error handler for entity resolver to DocumentBuilder parser.
  -    Error is printed to output just if DTD was detected in the XML file.
  -    If DTD was not found in XML file it is assumed that the EJB builder
  -    doesn't want to use DTD validation. Validation may have been enabled via
  -    validateDTDs flag so we look to the hasDTD() function in the LocalResolver
  -    and reject errors if DTD not used.
  -    @author <a href="mailto:[EMAIL PROTECTED]";>Wolfgang Werner</a>
  -    @author <a href="mailto:[EMAIL PROTECTED]";>Darius Davidavicius</a>
  -    **/
  -    private static class LocalErrorHandler implements ErrorHandler
  -    {
  -        // The xml file being parsed
  -        private String theFileName;
  -        private LocalResolver localResolver;
  -        public LocalErrorHandler( String inFileName, LocalResolver localResolver )
  -        {
  -            this.theFileName = inFileName;
  -            this.localResolver = localResolver;
  -        }
  -
  -        public void error(SAXParseException exception)
  -        {
  -            if ( localResolver.hasDTD() )
  -            {
  -                System.out.println("XmlFileLoader: File "
  -                                  + theFileName
  -                                  + " process error. Line: "
  -                                  + String.valueOf(exception.getLineNumber())
  -                                  + ". Error message: "
  -                                  + exception.getMessage()
  -                                 );
  -            }//end if
  -        }
  -        public void fatalError(SAXParseException exception)
  -        {
  -            if ( localResolver.hasDTD() )
  -            {
  -                System.out.println("XmlFileLoader: File "
  -                                  + theFileName
  -                                  + " process fatal error. Line: "
  -                                  + String.valueOf(exception.getLineNumber())
  -                                  + ". Error message: "
  -                                  + exception.getMessage()
  -                                );
  -            }//end if
  -        }
  -        public void warning(SAXParseException exception)
  -        {
  -            if ( localResolver.hasDTD() )
  -            {
  -                System.out.println("XmlFileLoader: File "
  -                                  + theFileName
  -                                  + " process warning. Line: "
  -                                  + String.valueOf(exception.getLineNumber())
  -                                  + ". Error message: "
  -                                  + exception.getMessage()
  -                                );
  -            }//end if
  -        }
  -    }// end class LocalErrorHandler
  -
  -}
  -/* Change log:
  -
  - * Author: starksm, Date: Thu Jun 14 17:14:14  2001 GMT
  - Incorporated Darius Davidavicius changes to support DTD validation.
  - */
  +/*
  + * JBoss, the OpenSource J2EE webOS
  + *
  + * Distributable under LGPL license.
  + * See terms of license at gnu.org.
  + */
  +package org.jboss.metadata;
  +
  +import java.net.URL;
  +import java.io.IOException;
  +import java.io.Reader;
  +import java.io.InputStreamReader;
  +import java.io.InputStream;
  +import java.util.Hashtable;
  +
  +import javax.xml.parsers.DocumentBuilderFactory;
  +import javax.xml.parsers.DocumentBuilder;
  +
  +import org.w3c.dom.Document;
  +import org.w3c.dom.Element;
  +import org.xml.sax.EntityResolver;
  +import org.xml.sax.ErrorHandler;
  +import org.xml.sax.InputSource;
  +import org.xml.sax.SAXException;
  +import org.xml.sax.SAXParseException;
  +
  +import org.jboss.deployment.DeploymentException;
  +import org.jboss.logging.Logger;
  +
  +/**
  + *   XmlFileLoader class is used to read ejb-jar.xml, standardjboss.xml, jboss.xml
  + *   files, process them using DTDs and create ApplicationMetaData object for 
future using
  + *
  + *   @see <related>
  + *   @author <a href="mailto:[EMAIL PROTECTED]";>Bill Burke</a>
  + *   @author <a href="mailto:[EMAIL PROTECTED]";>Sebastien Alborini</a>
  + *   @author <a href="mailto:[EMAIL PROTECTED]";>Wolfgang Werner</a>
  + *   @author <a href="mailto:[EMAIL PROTECTED]";>Darius Davidavicius</a>
  + *   @author <a href="mailto:[EMAIL PROTECTED]";>Scott Stark</a>
  + *   @version $Revision: 1.25 $
  + *
  + *   Revisions:
  + *   20010620 Bill Burke: Print an error message when failing to load 
standardjboss.xml
  + *                        or jboss.xml.  It was a pain to debug a standardjboss.xml
  + *                        syntax error.
  + */
  +public class XmlFileLoader
  +{
  +    // Constants -----------------------------------------------------
  +
  +    // Attributes ----------------------------------------------------
  +    private static boolean defaultValidateDTDs = false;
  +    private static Logger log = Logger.getLogger(XmlFileLoader.class);
  +    private ClassLoader classLoader;
  +    private ApplicationMetaData metaData;
  +    private boolean validateDTDs;
  +
  +    // Static --------------------------------------------------------
  +    public static boolean getDefaultValidateDTDs()
  +    {
  +        return defaultValidateDTDs;
  +    }
  +    public static void setDefaultValidateDTDs(boolean validate)
  +    {
  +        defaultValidateDTDs = validate;
  +    }
  +
  +    // Constructors --------------------------------------------------
  +    public XmlFileLoader()
  +    {
  +        this(defaultValidateDTDs);
  +    }
  +    public XmlFileLoader(boolean validateDTDs)
  +    {
  +        this.validateDTDs = validateDTDs;
  +    }
  +
  +    // Public --------------------------------------------------------
  +    public ApplicationMetaData getMetaData() {
  +        return metaData;
  +    }
  +
  +   /**
  +   Set the class loader
  +   @param ClassLoader cl - class loader
  +   */
  +    public void setClassLoader(ClassLoader cl) {
  +        classLoader = cl;
  +    }
  +
  +   /**
  +   Gets the class loader
  +   @return ClassLoader - the class loader
  +   */
  +   public ClassLoader getClassLoader() {
  +        return classLoader;
  +    }
  +
  +   /** Get the flag indicating that ejb-jar.dtd, jboss.dtd &
  +    jboss-web.dtd conforming documents should be validated
  +    against the DTD.
  +    */
  +   public boolean getValidateDTDs()
  +   {
  +       return validateDTDs;
  +   }
  +   /** Set the flag indicating that ejb-jar.dtd, jboss.dtd &
  +    jboss-web.dtd conforming documents should be validated
  +    against the DTD.
  +    */
  +   public void setValidateDTDs(boolean validate)
  +   {
  +       this.validateDTDs = validate;
  +   }
  +
  +    /**
  +    * load()
  +    *
  +    * This method creates the ApplicationMetaData.
  +    * The configuration files are found in the classLoader.
  +    * The default jboss.xml and jaws.xml files are always read first, then we 
override
  +    * the defaults if the user provides them
  +    *
  +    */
  +    public ApplicationMetaData load() throws Exception {
  +        // create the metadata
  +        metaData = new ApplicationMetaData();
  +
  +        // Load ejb-jar.xml
  +
  +        // we can always find the files in the classloader
  +        URL ejbjarUrl = getClassLoader().getResource("META-INF/ejb-jar.xml");
  +
  +        if (ejbjarUrl == null) {
  +            throw new DeploymentException("no ejb-jar.xml found");
  +        }
  +
  +        Document ejbjarDocument = getDocumentFromURL(ejbjarUrl);
  +
  +        // the url may be used to report errors
  +        metaData.setUrl(ejbjarUrl);
  +        metaData.importEjbJarXml(ejbjarDocument.getDocumentElement());
  +
  +        // Load jbossdefault.xml from the default classLoader
  +        // we always load defaults first
  +        // we use the context classloader, because this guy has to know where
  +        // this file is
  +        URL defaultJbossUrl = 
Thread.currentThread().getContextClassLoader().getResource("standardjboss.xml");
  +
  +        if (defaultJbossUrl == null) {
  +            throw new DeploymentException("no standardjboss.xml found");
  +        }
  +
  +        Document defaultJbossDocument = null;
  +
  +        try
  +        {
  +            defaultJbossDocument = getDocumentFromURL(defaultJbossUrl);
  +        
  +            metaData.setUrl(defaultJbossUrl);
  +            metaData.importJbossXml(defaultJbossDocument.getDocumentElement());
  +        }
  +        catch (Exception ex)
  +        {
  +            log.error("failed to load standardjboss.xml.  There could be a syntax 
error.", ex);
  +            throw ex;
  +        }
  +        // Load jboss.xml
  +        // if this file is provided, then we override the defaults
  +        try
  +        {
  +            URL jbossUrl = getClassLoader().getResource("META-INF/jboss.xml");
  +        
  +            if (jbossUrl != null) {
  +            //          Logger.debug(jbossUrl.toString() + " found. Overriding 
defaults");
  +            Document jbossDocument = getDocumentFromURL(jbossUrl);
  +            
  +            metaData.setUrl(jbossUrl);
  +            metaData.importJbossXml(jbossDocument.getDocumentElement());
  +            }
  +        }
  +        catch (Exception ex)
  +        {
  +            log.error("failed to load jboss.xml.  There could be a syntax error.", 
ex);
  +            throw ex;
  +        }
  +
  +        return metaData;
  +    }
  +
  +    /** Invokes getDocument(url, defaultValidateDTDs)
  +     */
  +    public static Document getDocument(URL url) throws DeploymentException
  +    {
  +        return getDocument(url, defaultValidateDTDs);
  +    }
  +    /** Get the xml file from the URL and parse it into a Document object.
  +     Calls new XmlFileLoader(validateDTDs).getDocumentFromURL(url);
  +     @param url, the URL from which the xml doc is to be obtained.
  +    @return Document
  +    */
  +    public static Document getDocument(URL url, boolean validateDTDs) throws 
DeploymentException
  +    {
  +        XmlFileLoader loader = new XmlFileLoader(validateDTDs);
  +        return loader.getDocumentFromURL(url);
  +    }
  +
  +    /** Get the xml file from the URL and parse it into a Document object.
  +     Calls getDocument(url.openStream(), url.getPath());
  +     @param url, the URL from which the xml doc is to be obtained.
  +    @return Document
  +    */
  +    public Document getDocumentFromURL(URL url) throws DeploymentException
  +    {
  +        try
  +        {
  +            InputStream is = url.openStream();
  +            String docPath = url.getPath();
  +            return getDocument(is, docPath);
  +        } catch (IOException e) {
  +            throw new DeploymentException("Failed to obtain xml doc from URL", e);
  +        }
  +    }
  +
  +    /** Parses the xml document in is and created the DOM Document. DTD validation
  +    is enabled if validateDTDs is true and we install an EntityResolver and
  +    ErrorHandler to resolve J2EE DTDs and handle errors.
  +    @param is, the InputStream container the xml descriptor to parse
  +    @param inPath, the path information for the xml doc. This is used for
  +    only for error reporting.
  +    @return Document
  +    */
  +    public Document getDocument(InputStream is, String inPath) throws 
DeploymentException
  +    {
  +        try
  +        {
  +            DocumentBuilderFactory docBuilderFactory = 
DocumentBuilderFactory.newInstance();
  +            // Enable DTD validation based on our validateDTDs flag
  +            docBuilderFactory.setValidating(validateDTDs);
  +            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
  +
  +            LocalResolver lr = new LocalResolver();
  +            ErrorHandler eh = new LocalErrorHandler( inPath, lr );
  +            docBuilder.setEntityResolver(lr);
  +            docBuilder.setErrorHandler(eh );
  +
  +            Document doc = docBuilder.parse(is);
  +            return doc;
  +        } catch (SAXParseException e) {
  +        
System.out.println(e.getMessage()+":"+e.getColumnNumber()+":"+e.getLineNumber());
  +            e.printStackTrace();
  +            throw new DeploymentException(e.getMessage(), e);
  +        } catch (SAXException e) {
  +            System.out.println(e.getException());
  +            throw new DeploymentException(e.getMessage(), e);
  +        } catch (Exception e) {
  +            throw new DeploymentException(e.getMessage(), e);
  +        }
  +    }
  +
  +    // Package protected ---------------------------------------------
  +
  +    // Protected -----------------------------------------------------
  +
  +
  +    // Private -------------------------------------------------------
  +
  +    // Inner classes -------------------------------------------------
  +    /**
  +    * Local entity resolver to handle J2EE DTDs. With this a http connection
  +    * to sun is not needed during deployment.
  +    * Function boolean hadDTD() is here to avoid validation errors in
  +    * descriptors that do not have a DOCTYPE declaration.
  +    * @author <a href="mailto:[EMAIL PROTECTED]";>Wolfgang Werner</a>
  +    * @author <a href="mailto:[EMAIL PROTECTED]";>Darius Davidavicius</a>
  +    **/
  +    private static class LocalResolver implements EntityResolver
  +    {
  +        private Hashtable dtds = new Hashtable();
  +        private boolean hasDTD = false;
  +
  +        public LocalResolver() {
  +            registerDTD("-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 
1.1//EN", "ejb-jar.dtd");
  +            registerDTD("-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 
2.0//EN", "ejb-jar_2_0.dtd");
  +            registerDTD("-//Sun Microsystems, Inc.//DTD J2EE Application 1.2//EN", 
"application_1_2.dtd");
  +            registerDTD("-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN", 
"application_1_3.dtd");
  +            registerDTD("-//Sun Microsystems, Inc.//DTD Connector 1.0//EN", 
"connector_1_0.dtd");
  +            registerDTD("-//JBoss//DTD JAWS//EN", "jaws.dtd");
  +            registerDTD("-//JBoss//DTD JAWS 2.4//EN", "jaws_2_4.dtd");
  +            registerDTD("-//JBoss//DTD JAWS 3.0//EN", "jaws_3_0.dtd");
  +            registerDTD("-//JBoss//DTD JBOSS//EN","jboss.dtd");
  +            registerDTD("-//JBoss//DTD JBOSS 2.4//EN","jboss_2_4.dtd");
  +            registerDTD("-//JBoss//DTD JBOSS 3.0//EN","jboss_3_0.dtd");
  +            registerDTD("-//JBoss//DTD JBOSSCMP-JDBC 3.0//EN",
  +                  "jbosscmp-jdbc_3_0.dtd");
  +        }
  +
  +        /**
  +        Registers available DTDs
  +        @param String publicId    - Public ID of DTD
  +        @param String dtdFileName - the file name of DTD
  +        */
  +        public void registerDTD(String publicId, String dtdFileName) {
  +            dtds.put(publicId, dtdFileName);
  +        }
  +
  +        /**
  +        Returns DTD inputSource. Is DTD was found in the hashtable and inputSource 
was created
  +        flad hasDTD is ser to true.
  +        @param String publicId    - Public ID of DTD
  +        @param String dtdFileName - the file name of DTD
  +        @return InputSource of DTD
  +        */
  +        public InputSource resolveEntity (String publicId, String systemId)
  +        {
  +            hasDTD = false;
  +            String dtd = (String)dtds.get(publicId);
  +
  +            if (dtd != null)
  +            {
  +                hasDTD = true;
  +                try
  +                {
  +                    InputStream dtdStream = getClass().getResourceAsStream(dtd);
  +                    InputSource aInputSource = new InputSource(dtdStream);
  +                    return aInputSource;
  +                } catch( Exception ex ) {
  +                    // ignore
  +                }
  +            }
  +            return null;
  +        }
  +
  +      /**
  +      Returns the boolean value to inform id DTD was found in the XML file or not
  +      @return boolean - true if DTD was found in XML
  +      */
  +      public boolean hasDTD ()
  +      {
  +          return hasDTD;
  +      }
  +
  +    }
  +
  +    /** Local error handler for entity resolver to DocumentBuilder parser.
  +    Error is printed to output just if DTD was detected in the XML file.
  +    If DTD was not found in XML file it is assumed that the EJB builder
  +    doesn't want to use DTD validation. Validation may have been enabled via
  +    validateDTDs flag so we look to the hasDTD() function in the LocalResolver
  +    and reject errors if DTD not used.
  +    @author <a href="mailto:[EMAIL PROTECTED]";>Wolfgang Werner</a>
  +    @author <a href="mailto:[EMAIL PROTECTED]";>Darius Davidavicius</a>
  +    **/
  +    private static class LocalErrorHandler implements ErrorHandler
  +    {
  +        // The xml file being parsed
  +        private String theFileName;
  +        private LocalResolver localResolver;
  +        public LocalErrorHandler( String inFileName, LocalResolver localResolver )
  +        {
  +            this.theFileName = inFileName;
  +            this.localResolver = localResolver;
  +        }
  +
  +        public void error(SAXParseException exception)
  +        {
  +            if ( localResolver.hasDTD() )
  +            {
  +                System.out.println("XmlFileLoader: File "
  +                                  + theFileName
  +                                  + " process error. Line: "
  +                                  + String.valueOf(exception.getLineNumber())
  +                                  + ". Error message: "
  +                                  + exception.getMessage()
  +                                 );
  +            }//end if
  +        }
  +        public void fatalError(SAXParseException exception)
  +        {
  +            if ( localResolver.hasDTD() )
  +            {
  +                System.out.println("XmlFileLoader: File "
  +                                  + theFileName
  +                                  + " process fatal error. Line: "
  +                                  + String.valueOf(exception.getLineNumber())
  +                                  + ". Error message: "
  +                                  + exception.getMessage()
  +                                );
  +            }//end if
  +        }
  +        public void warning(SAXParseException exception)
  +        {
  +            if ( localResolver.hasDTD() )
  +            {
  +                System.out.println("XmlFileLoader: File "
  +                                  + theFileName
  +                                  + " process warning. Line: "
  +                                  + String.valueOf(exception.getLineNumber())
  +                                  + ". Error message: "
  +                                  + exception.getMessage()
  +                                );
  +            }//end if
  +        }
  +    }// end class LocalErrorHandler
  +
  +}
  +/* Change log:
  +
  + * Author: starksm, Date: Thu Jun 14 17:14:14  2001 GMT
  + Incorporated Darius Davidavicius changes to support DTD validation.
  + */
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to