Replace DOMParser with calls to pool or helper class.
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / common / OriginConfig.java
1 /*
2  * The Shibboleth License, Version 1. Copyright (c) 2002 University Corporation for Advanced Internet Development, Inc.
3  * All rights reserved Redistribution and use in source and binary forms, with or without modification, are permitted
4  * provided that the following conditions are met: Redistributions of source code must retain the above copyright
5  * notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the
6  * above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other
7  * materials provided with the distribution, if any, must include the following acknowledgment: "This product includes
8  * software developed by the University Corporation for Advanced Internet Development <http://www.ucaid.edu> Internet2
9  * Project. Alternately, this acknowledegement may appear in the software itself, if and wherever such third-party
10  * acknowledgments normally appear. Neither the name of Shibboleth nor the names of its contributors, nor Internet2,
11  * nor the University Corporation for Advanced Internet Development, Inc., nor UCAID may be used to endorse or promote
12  * products derived from this software without specific prior written permission. For written permission, please
13  * contact shibboleth@shibboleth.org Products derived from this software may not be called Shibboleth, Internet2,
14  * UCAID, or the University Corporation for Advanced Internet Development, nor may Shibboleth appear in their name,
15  * without prior written permission of the University Corporation for Advanced Internet Development. THIS SOFTWARE IS
16  * PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES,
17  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
18  * NON-INFRINGEMENT ARE DISCLAIMED AND THE ENTIRE RISK OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS
19  * WITH LICENSEE. IN NO EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY CORPORATION FOR ADVANCED
20  * INTERNET DEVELOPMENT, INC. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
23  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24  * POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 package edu.internet2.middleware.shibboleth.common;
28
29 import javax.servlet.ServletContext;
30 import org.apache.log4j.Logger;
31 import org.w3c.dom.Document;
32
33 import edu.internet2.middleware.shibboleth.xml.Parser;
34
35 /**
36  * Constructs a DOM tree for the origin configuration XML file.
37  * 
38  * @author Walter Hoehn
39  * @author Noah Levitt
40  */
41 public class OriginConfig {
42
43         private static Logger   log                                     = Logger.getLogger(OriginConfig.class);
44         private static Document originConfig            = null;
45         private static String   originConfigFile        = null;
46
47         // never returns null
48         private static String getOriginConfigFile(ServletContext context) {
49                 if (context.getInitParameter("OriginConfigFile") != null) {
50                         return context.getInitParameter("OriginConfigFile");
51                 } else {
52                         return "/conf/origin.xml";
53                 }
54         }
55
56         /**
57          * Loads the Origin Configuration file into a DOM tree.
58          * 
59          * @param configFileLocation
60          *            URL of the configuration file
61          * @return the DOM Document
62          * @throws ShibbolethConfigurationException
63          *             if there was an error loading the file
64          */
65         public static synchronized Document getOriginConfig(String configFileLocation)
66                         throws ShibbolethConfigurationException {
67                 if (configFileLocation.equals(originConfigFile)) {
68                         return originConfig;
69                 } else if (originConfigFile == null) {
70                         originConfigFile = configFileLocation;
71                 } else {
72                         log.error("Previously read origin configuration from (" + originConfigFile + "), re-reading from ("
73                                         + configFileLocation + "). This probably indicates a bug in shibboleth.");
74                         originConfigFile = configFileLocation;
75                 }
76                 
77                 originConfig = Parser.loadDom(configFileLocation, true);
78                 if (originConfig==null)
79                     throw new ShibbolethConfigurationException("Problem in "+XML.ORIGIN_SHEMA_ID+" see log");
80
81                 return originConfig;
82         }
83
84         /**
85          * Loads the Origin Configuration file into a DOM tree.
86          * 
87          * @param context
88          *            {@link ServletContext}from which to figure out the location of origin.xml
89          * @return the DOM Document
90          * @throws ShibbolethConfigurationException
91          *             if there was an error loading the file
92          */
93         public static Document getOriginConfig(ServletContext context) throws ShibbolethConfigurationException {
94                 return getOriginConfig(getOriginConfigFile(context));
95
96         }
97 }