Author: vgritsenko Date: Fri Mar 25 13:13:19 2005 New Revision: 159064 URL: http://svn.apache.org/viewcvs?view=rev&rev=159064 Log: don't fail when accessing system properties
Modified: cocoon/trunk/src/java/org/apache/cocoon/Cocoon.java Modified: cocoon/trunk/src/java/org/apache/cocoon/Cocoon.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/Cocoon.java?view=diff&r1=159063&r2=159064 ============================================================================== --- cocoon/trunk/src/java/org/apache/cocoon/Cocoon.java (original) +++ cocoon/trunk/src/java/org/apache/cocoon/Cocoon.java Fri Mar 25 13:13:19 2005 @@ -15,12 +15,6 @@ */ package org.apache.cocoon; -import java.io.BufferedInputStream; -import java.io.IOException; -import java.net.URL; -import java.util.Enumeration; -import java.util.Map; - import org.apache.avalon.excalibur.logger.LoggerManager; import org.apache.avalon.framework.activity.Disposable; import org.apache.avalon.framework.activity.Initializable; @@ -36,6 +30,7 @@ import org.apache.avalon.framework.service.ServiceManager; import org.apache.avalon.framework.service.Serviceable; import org.apache.avalon.framework.thread.ThreadSafe; + import org.apache.cocoon.components.ContextHelper; import org.apache.cocoon.components.container.CocoonServiceManager; import org.apache.cocoon.components.container.ComponentContext; @@ -51,12 +46,19 @@ import org.apache.cocoon.environment.Session; import org.apache.cocoon.environment.internal.EnvironmentHelper; import org.apache.cocoon.util.log.DeprecationLogger; + import org.apache.commons.lang.SystemUtils; import org.apache.excalibur.source.Source; import org.apache.excalibur.source.SourceResolver; import org.apache.excalibur.source.impl.URLSource; import org.xml.sax.InputSource; +import java.io.BufferedInputStream; +import java.io.IOException; +import java.net.URL; +import java.util.Enumeration; +import java.util.Map; + /** * The Cocoon Object is the main Kernel for the entire Cocoon system. * @@ -149,8 +151,8 @@ this.configurationFile = new DelayedRefreshSourceWrapper(urlSource, settings.getConfigurationReloadDelay()); - } catch (IOException ioe) { - throw new ContextException("Could not open configuration file: " + settings.getConfiguration(), ioe); + } catch (IOException e) { + throw new ContextException("Could not open configuration file: " + settings.getConfiguration(), e); } } @@ -180,7 +182,7 @@ // Log the System Properties. dumpSystemProperties(); - this.configure(); + configure(); // add the logger manager to the component locator @@ -199,7 +201,7 @@ if (this.serviceManager.hasService(RequestListener.ROLE)){ this.requestListener = (RequestListener) this.serviceManager.lookup(RequestListener.ROLE); } - Core.cleanup(); + Core.cleanup(); } /** Dump System Properties */ @@ -222,7 +224,6 @@ /** * Configure this <code>Cocoon</code> instance. * - * @param startupManager an <code>CocoonServiceManager</code> value * @exception ConfigurationException if an error occurs * @exception ContextException if an error occurs */ @@ -263,7 +264,7 @@ } catch (Exception e) { throw new ConfigurationException("Error trying to load user-roles configuration", e); } - + RoleManager urm = new RoleManager(drm); ContainerUtil.enableLogging(urm, getLogger().getChildLogger("roles").getChildLogger("user")); ContainerUtil.configure(urm, roleConfig); @@ -291,29 +292,45 @@ } /** + * Helper method to retrieve system property. + * Returns default value if SecurityException is caught. + */ + public static String getSystemProperty(String property, String value) { + try { + return System.getProperty(property, value); + } catch (SecurityException e) { + System.err.println("Caught a SecurityException reading the system property '" + property + "';" + + " Cocoon will default to '" + value + "' value."); + return value; + } + } + + /** * Sets required system properties. */ protected void setSystemProperties() { - java.util.Properties props = new java.util.Properties(); - // FIXME We shouldn't have to specify the SAXParser... - // This is needed by Xalan2, it is used by org.xml.sax.helpers.XMLReaderFactory - // to locate the SAX2 driver. - props.put("org.xml.sax.driver", "org.apache.xerces.parsers.SAXParser"); - java.util.Properties systemProps = System.getProperties(); - Enumeration propEnum = props.propertyNames(); - while (propEnum.hasMoreElements()) { - String prop = (String)propEnum.nextElement(); - if (!systemProps.containsKey(prop)) { - systemProps.put(prop, props.getProperty(prop)); + try { + // FIXME We shouldn't have to specify the SAXParser... + // This is needed by Xalan2, it is used by org.xml.sax.helpers.XMLReaderFactory + // to locate the SAX2 driver. + if (getSystemProperty("org.xml.sax.driver", null) == null) { + System.setProperty("org.xml.sax.driver", "org.apache.xerces.parsers.SAXParser"); } + } catch (SecurityException e) { + // Ignore security exceptions + System.out.println("Caught a SecurityException writing the system property: " + e); } - // FIXME We shouldn't have to specify these. Needed to override jaxp implementation of weblogic. - if (systemProps.containsKey("javax.xml.parsers.DocumentBuilderFactory") && - systemProps.getProperty("javax.xml.parsers.DocumentBuilderFactory").startsWith("weblogic")) { - systemProps.put("javax.xml.parsers.DocumentBuilderFactory", "org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"); - systemProps.put("javax.xml.parsers.SAXParserFactory","org.apache.xerces.jaxp.SAXParserFactoryImpl"); + + try { + // FIXME We shouldn't have to specify these. Needed to override jaxp implementation of weblogic. + if (getSystemProperty("javax.xml.parsers.DocumentBuilderFactory", "").startsWith("weblogic")) { + System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"); + System.setProperty("javax.xml.parsers.SAXParserFactory","org.apache.xerces.jaxp.SAXParserFactoryImpl"); + } + } catch (SecurityException e) { + // Ignore security exceptions + System.out.println("Caught a SecurityException writing the system property: " + e); } - System.setProperties(systemProps); } /* (non-Javadoc)