001: /*
002: * The Apache Software License, Version 1.1
003: *
004: *
005: * Copyright (c) 2002 The Apache Software Foundation. All rights
006: * reserved.
007: *
008: * Redistribution and use in source and binary forms, with or without
009: * modification, are permitted provided that the following conditions
010: * are met:
011: *
012: * 1. Redistributions of source code must retain the above copyright
013: * notice, this list of conditions and the following disclaimer.
014: *
015: * 2. Redistributions in binary form must reproduce the above copyright
016: * notice, this list of conditions and the following disclaimer in
017: * the documentation and/or other materials provided with the
018: * distribution.
019: *
020: * 3. The end-user documentation included with the redistribution,
021: * if any, must include the following acknowledgment:
022: * "This product includes software developed by the
023: * Apache Software Foundation (http://www.apache.org/)."
024: * Alternately, this acknowledgment may appear in the software itself,
025: * if and wherever such third-party acknowledgments normally appear.
026: *
027: * 4. The name "Apache Software Foundation" must not be used to endorse or
028: * promote products derived from this software without prior written
029: * permission. For written permission, please contact apache@apache.org.
030: *
031: * 5. Products derived from this software may not be called "Apache",
032: * nor may "Apache" appear in their name, without prior written
033: * permission of the Apache Software Foundation.
034: *
035: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
036: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
037: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
038: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
039: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
040: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
041: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
042: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
043: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
044: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
045: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
046: * SUCH DAMAGE.
047: * ====================================================================
048: *
049: * This software consists of voluntary contributions made by many
050: * individuals on behalf of the Apache Software Foundation and was
051: * originally based on software copyright (c) 1999-2002, Sun Microsystems,
052: * Inc., http://www.sun.com. For more information on the Apache Software
053: * Foundation, please see <http://www.apache.org/>.
054: */
055:
056: package com.sun.xml.stream.xerces.util;
057:
058: import java.io.*;
059:
060: /**
061: * This class is duplicated for each JAXP subpackage so keep it in sync.
062: * It is package private and therefore is not exposed as part of the JAXP
063: * API.
064: *
065: * Base class with security related methods that work on JDK 1.1.
066: */
067: class SecuritySupport {
068:
069: /*
070: * Make this of type Object so that the verifier won't try to
071: * prove its type, thus possibly trying to load the SecuritySupport12
072: * class.
073: */
074: private static final Object securitySupport;
075:
076: static {
077: SecuritySupport ss = null;
078: try {
079: Class c = Class.forName("java.security.AccessController");
080: // if that worked, we're on 1.2.
081: /*
082: // don't reference the class explicitly so it doesn't
083: // get dragged in accidentally.
084: c = Class.forName("javax.mail.SecuritySupport12");
085: Constructor cons = c.getConstructor(new Class[] { });
086: ss = (SecuritySupport)cons.newInstance(new Object[] { });
087: */
088: /*
089: * Unfortunately, we can't load the class using reflection
090: * because the class is package private. And the class has
091: * to be package private so the APIs aren't exposed to other
092: * code that could use them to circumvent security. Thus,
093: * we accept the risk that the direct reference might fail
094: * on some JDK 1.1 JVMs, even though we would never execute
095: * this code in such a case. Sigh...
096: */
097: ss = new SecuritySupport12();
098: } catch (Exception ex) {
099: // ignore it
100: } finally {
101: if (ss == null)
102: ss = new SecuritySupport();
103: securitySupport = ss;
104: }
105: }
106:
107: /**
108: * Return an appropriate instance of this class, depending on whether
109: * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
110: */
111: public static SecuritySupport getInstance() {
112: return (SecuritySupport) securitySupport;
113: }
114:
115: public ClassLoader getContextClassLoader() {
116: return null;
117: }
118:
119: public String getSystemProperty(String propName) {
120: return System.getProperty(propName);
121: }
122:
123: public FileInputStream getFileInputStream(File file)
124: throws FileNotFoundException {
125: return new FileInputStream(file);
126: }
127:
128: public InputStream getResourceAsStream(ClassLoader cl, String name) {
129: InputStream ris;
130: if (cl == null) {
131: ris = ClassLoader.getSystemResourceAsStream(name);
132: } else {
133: ris = cl.getResourceAsStream(name);
134: }
135: return ris;
136: }
137: }
|