View Javadoc

1   /* 
2    * Copyright 1999-2006 The Apache Software Foundation
3    * Licensed  under the  Apache License,  Version 2.0  (the "License");
4    * you may not use  this file  except in  compliance with the License.
5    * You may obtain a copy of the License at 
6    * 
7    *   http://www.apache.org/licenses/LICENSE-2.0
8    * 
9    * Unless required by applicable law or agreed to in writing, software
10   * distributed  under the  License is distributed on an "AS IS" BASIS,
11   * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
12   * implied.
13   * 
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.james.util.io;
19  
20  import java.io.IOException;
21  import java.io.InputStream;
22  import java.io.ObjectInputStream;
23  import java.io.ObjectStreamClass;
24  import java.io.StreamCorruptedException;
25  
26  /***
27   * A special ObjectInputStream to handle highly transient classes hosted
28   * by Avalon components that are juggling many classloaders.
29   *
30   * @author <a href="mailto:paul_hammant@yahoo.com">Paul Hammant</a>
31   * @version $Revision: 365582 $ $Date: 2006-01-03 08:51:21 +0000 (mar, 03 gen 2006) $
32   */
33  public class ClassLoaderObjectInputStream
34      extends ObjectInputStream
35  {
36      private ClassLoader m_classLoader;
37  
38      public ClassLoaderObjectInputStream( final ClassLoader classLoader,
39                                           final InputStream inputStream )
40          throws IOException, StreamCorruptedException
41      {
42          super( inputStream );
43          m_classLoader = classLoader;
44      }
45  
46      protected Class resolveClass( final ObjectStreamClass objectStreamClass )
47          throws IOException, ClassNotFoundException
48      {
49          final Class clazz =
50              Class.forName( objectStreamClass.getName(), false, m_classLoader );
51  
52          if( null != clazz )
53          {
54              return clazz; // the classloader knows of the class
55          }
56          else
57          {
58              // classloader knows not of class, let the super classloader do it
59              return super.resolveClass( objectStreamClass );
60          }
61      }
62  }