196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/* 296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * this work for additional information regarding copyright ownership. 596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * (the "License"); you may not use this file except in compliance with 796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * the License. You may obtain a copy of the License at 896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 1096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 1196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * See the License for the specific language governing permissions and 1596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * limitations under the License. 1696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 1796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpackage org.apache.commons.io.input; 1896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 1996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.IOException; 2096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.InputStream; 2196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.ObjectInputStream; 2296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.ObjectStreamClass; 2396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.StreamCorruptedException; 2496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/** 2696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * A special ObjectInputStream that loads a class based on a specified 2796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <code>ClassLoader</code> rather than the system default. 2896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p> 2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * This is useful in dynamic container environments. 3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Paul Hammant 3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @version $Id: ClassLoaderObjectInputStream.java 437567 2006-08-28 06:39:07Z bayard $ 3396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @since Commons IO 1.1 3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpublic class ClassLoaderObjectInputStream extends ObjectInputStream { 3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 3796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** The class loader to use. */ 3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private ClassLoader classLoader; 3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 4196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Constructs a new ClassLoaderObjectInputStream. 4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 4396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param classLoader the ClassLoader from which classes should be loaded 4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param inputStream the InputStream to work on 4596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException in case of an I/O error 4696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws StreamCorruptedException if the stream is corrupted 4796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 4896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public ClassLoaderObjectInputStream( 4996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ClassLoader classLoader, InputStream inputStream) 5096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException, StreamCorruptedException { 5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project super(inputStream); 5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project this.classLoader = classLoader; 5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 5696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Resolve a class specified by the descriptor using the 5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * specified ClassLoader or the super ClassLoader. 5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param objectStreamClass descriptor of the class 6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the Class object described by the ObjectStreamClass 6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException in case of an I/O error 6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws ClassNotFoundException if the Class cannot be found 6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project protected Class resolveClass(ObjectStreamClass objectStreamClass) 6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throws IOException, ClassNotFoundException { 6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Class clazz = Class.forName(objectStreamClass.getName(), false, classLoader); 6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if (clazz != null) { 7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // the classloader knows of the class 7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return clazz; 7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } else { 7396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // classloader knows not of class, let the super classloader do it 7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return super.resolveClass(objectStreamClass); 7596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 7696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 7796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project} 78