001 package org.apache.fulcrum.factory.utils;
002
003
004 /*
005 * Licensed to the Apache Software Foundation (ASF) under one
006 * or more contributor license agreements. See the NOTICE file
007 * distributed with this work for additional information
008 * regarding copyright ownership. The ASF licenses this file
009 * to you under the Apache License, Version 2.0 (the
010 * "License"); you may not use this file except in compliance
011 * with the License. You may obtain a copy of the License at
012 *
013 * http://www.apache.org/licenses/LICENSE-2.0
014 *
015 * Unless required by applicable law or agreed to in writing,
016 * software distributed under the License is distributed on an
017 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
018 * KIND, either express or implied. See the License for the
019 * specific language governing permissions and limitations
020 * under the License.
021 */
022
023
024 import java.io.InputStream;
025 import java.io.ObjectInputStream;
026 import java.io.ObjectStreamClass;
027 import java.io.IOException;
028
029 /**
030 * A deserialization stream for a specific class loader context.
031 *
032 * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
033 * @version $Id: ObjectInputStreamForContext.java 535465 2007-05-05 06:58:06Z tv $
034 */
035 public class ObjectInputStreamForContext extends ObjectInputStream
036 {
037 /**
038 * The class loader of the context.
039 */
040 private ClassLoader classLoader;
041
042 // this is to make the proxy happy.
043 public ObjectInputStreamForContext()
044 throws IOException
045 {
046 }
047
048 /**
049 * Contructs a new object stream for a context.
050 *
051 * @param in the serialized input stream.
052 * @param loader the class loader of the context.
053 * @throws IOException on errors.
054 */
055 public ObjectInputStreamForContext(InputStream in,
056 ClassLoader loader)
057 throws IOException
058 {
059 super(in);
060 classLoader = loader;
061 }
062
063 protected Class resolveClass(ObjectStreamClass v)
064 throws IOException,
065 ClassNotFoundException
066 {
067 return classLoader == null ?
068 super.resolveClass(v) : classLoader.loadClass(v.getName());
069 }
070 }