Author: vgritsenko Date: Fri Mar 25 13:10:11 2005 New Revision: 159063 URL: http://svn.apache.org/viewcvs?view=rev&rev=159063 Log: don't fail when accessing system properties
Modified: cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/Cocoon.java Modified: cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/Cocoon.java URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/Cocoon.java?view=diff&r1=159062&r2=159063 ============================================================================== --- cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/Cocoon.java (original) +++ cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/Cocoon.java Fri Mar 25 13:10:11 2005 @@ -23,6 +23,7 @@ import java.util.Collections; import java.util.Enumeration; import java.util.Map; +import java.util.Properties; import org.apache.avalon.excalibur.component.ComponentProxyGenerator; import org.apache.avalon.excalibur.component.DefaultRoleManager; @@ -172,15 +173,15 @@ this.classpath = (String)context.get(Constants.CONTEXT_CLASSPATH); this.workDir = (File)context.get(Constants.CONTEXT_WORK_DIR); try { - // FIXME : add a configuration option for the refresh delay. + // FIXME: add a configuration option for the refresh delay. // for now, hard-coded to 1 second. URLSource urlSource = new URLSource(); urlSource.init((URL) context.get(Constants.CONTEXT_CONFIG_URL), null); this.configurationFile = new DelayedRefreshSourceWrapper(urlSource, 1000L); - } catch (IOException ioe) { - throw new ContextException("Could not open configuration file.", ioe); + } catch (IOException e) { + throw new ContextException("Could not open configuration file.", e); } catch (Exception e) { throw new ContextException("contextualize(..) Exception", e); } @@ -233,12 +234,12 @@ // Setup the default parser, for parsing configuration. // If one need to use a different parser, set the given system property // first check for deprecated property to be compatible: - String parser = System.getProperty(Constants.DEPRECATED_PARSER_PROPERTY, Constants.DEFAULT_PARSER); - if ( !Constants.DEFAULT_PARSER.equals( parser ) ) { + String parser = getSystemProperty(Constants.DEPRECATED_PARSER_PROPERTY, Constants.DEFAULT_PARSER); + if (!Constants.DEFAULT_PARSER.equals(parser)) { getLogger().warn("Deprecated property " + Constants.DEPRECATED_PARSER_PROPERTY + " is used. Please use " + Constants.PARSER_PROPERTY + " instead."); - if ( "org.apache.cocoon.components.parser.XercesParser".equals(parser) ) { + if ("org.apache.cocoon.components.parser.XercesParser".equals(parser)) { parser = XercesParser.class.getName(); } else { getLogger().warn("Unknown value for deprecated property: " + @@ -246,7 +247,7 @@ ". If you experience problems during startup, check the parser configuration section of the documentation."); } } else { - parser = System.getProperty(Constants.PARSER_PROPERTY, Constants.DEFAULT_PARSER); + parser = getSystemProperty(Constants.PARSER_PROPERTY, Constants.DEFAULT_PARSER); } if (getLogger().isDebugEnabled()) { getLogger().debug("Using parser: " + parser); @@ -426,29 +427,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); } /**