Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * $Id$ */ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.security.AccessController; import java.security.PrivilegedAction; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; /** * This class is duplicated for each Xalan-Java subpackage so keep it in sync. * It is package private and therefore is not exposed as part of the Xalan-Java * API. * * Base class with security related methods that work on JDK 1.1. */ class SecuritySupport { /* * Make this of type Object so that the verifier won't try to * prove its type, thus possibly trying to load the SecuritySupport12 * class. */ private static final Object securitySupport; static { SecuritySupport ss = null; try { Class c = Class.forName("java.security.AccessController"); // if that worked, we're on 1.2. /* // don't reference the class explicitly so it doesn't // get dragged in accidentally. c = Class.forName("javax.mail.SecuritySupport12"); Constructor cons = c.getConstructor(new Class[] { }); ss = (SecuritySupport)cons.newInstance(new Object[] { }); */ /* * Unfortunately, we can't load the class using reflection * because the class is package private. And the class has * to be package private so the APIs aren't exposed to other * code that could use them to circumvent security. Thus, * we accept the risk that the direct reference might fail * on some JDK 1.1 JVMs, even though we would never execute * this code in such a case. Sigh... */ ss = new SecuritySupport12(); } catch (Exception ex) { // ignore it } finally { if (ss == null) ss = new SecuritySupport(); securitySupport = ss; } } /** * Return an appropriate instance of this class, depending on whether * we're on a JDK 1.1 or J2SE 1.2 (or later) system. */ static SecuritySupport getInstance() { return (SecuritySupport) securitySupport; } ClassLoader getContextClassLoader() { return null; } ClassLoader getSystemClassLoader() { return null; } ClassLoader getParentClassLoader(ClassLoader cl) { return null; } String getSystemProperty(String propName) { return System.getProperty(propName); } FileInputStream getFileInputStream(File file) throws FileNotFoundException { return new FileInputStream(file); } InputStream getResourceAsStream(ClassLoader cl, String name) { InputStream ris; if (cl == null) { ris = ClassLoader.getSystemResourceAsStream(name); } else { ris = cl.getResourceAsStream(name); } return ris; } boolean getFileExists(File f) { return f.exists(); } long getLastModified(File f) { return f.lastModified(); } } /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * $Id$ */ /** * This class is duplicated for each Xalan-Java subpackage so keep it in sync. * It is package private and therefore is not exposed as part of the Xalan-Java * API. * * Security related methods that only work on J2SE 1.2 and newer. */ class SecuritySupport12 extends SecuritySupport { ClassLoader getContextClassLoader() { return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() { public Object run() { ClassLoader cl = null; try { cl = Thread.currentThread().getContextClassLoader(); } catch (SecurityException ex) { } return cl; } }); } ClassLoader getSystemClassLoader() { return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() { public Object run() { ClassLoader cl = null; try { cl = ClassLoader.getSystemClassLoader(); } catch (SecurityException ex) { } return cl; } }); } ClassLoader getParentClassLoader(final ClassLoader cl) { return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() { public Object run() { ClassLoader parent = null; try { parent = cl.getParent(); } catch (SecurityException ex) { } // eliminate loops in case of the boot // ClassLoader returning itself as a parent return (parent == cl) ? null : parent; } }); } String getSystemProperty(final String propName) { return (String) AccessController.doPrivileged(new PrivilegedAction() { public Object run() { return System.getProperty(propName); } }); } FileInputStream getFileInputStream(final File file) throws FileNotFoundException { try { return (FileInputStream) AccessController.doPrivileged(new PrivilegedExceptionAction() { public Object run() throws FileNotFoundException { return new FileInputStream(file); } }); } catch (PrivilegedActionException e) { throw (FileNotFoundException) e.getException(); } } InputStream getResourceAsStream(final ClassLoader cl, final String name) { return (InputStream) AccessController.doPrivileged(new PrivilegedAction() { public Object run() { InputStream ris; if (cl == null) { ris = ClassLoader.getSystemResourceAsStream(name); } else { ris = cl.getResourceAsStream(name); } return ris; } }); } boolean getFileExists(final File f) { return ((Boolean) AccessController.doPrivileged(new PrivilegedAction() { public Object run() { return new Boolean(f.exists()); } })).booleanValue(); } long getLastModified(final File f) { return ((Long) AccessController.doPrivileged(new PrivilegedAction() { public Object run() { return new Long(f.lastModified()); } })).longValue(); } }