View Javadoc

1   // ========================================================================
2   // Copyright (c) 2009 Intalio, Inc.
3   // ------------------------------------------------------------------------
4   // All rights reserved. This program and the accompanying materials
5   // are made available under the terms of the Eclipse Public License v1.0
6   // and Apache License v2.0 which accompanies this distribution.
7   // The Eclipse Public License is available at 
8   // http://www.eclipse.org/legal/epl-v10.html
9   // The Apache License v2.0 is available at
10  // http://www.opensource.org/licenses/apache2.0.php
11  // You may elect to redistribute this code under either of these licenses. 
12  // Contributors:
13  //    Hugues Malphettes - initial API and implementation
14  // ========================================================================
15  package org.eclipse.jetty.osgi.boot.internal.jsp;
16  
17  import java.net.URL;
18  
19  /**
20   * Add a classloader to the
21   * org.apache.jasper.compiler.TldLocatableURLClassloader. Hopefuly not
22   * necessary: still experimenting.
23   * 
24   * @see TldLocatableURLClassloader
25   */
26  public class TldLocatableURLClassloaderWithInsertedJettyClassloader extends TldLocatableURLClassloader
27  {
28  
29      private ClassLoader _internalClassLoader;
30  
31      /**
32       * 
33       * @param osgiClassLoaderParent
34       *            The parent classloader
35       * @param internalClassLoader
36       *            The classloader that will be at the same level than the
37       *            jarsWithTldsInside
38       * @param jarsWithTldsInside
39       *            jars that are scanned for tld files.
40       */
41      public TldLocatableURLClassloaderWithInsertedJettyClassloader(ClassLoader osgiClassLoaderParent, ClassLoader internalClassLoader, URL[] jarsWithTldsInside)
42      {
43          super(osgiClassLoaderParent,jarsWithTldsInside);
44          _internalClassLoader = internalClassLoader;
45      }
46  
47      protected Class<?> findClass(String name) throws ClassNotFoundException
48      {
49          try
50          {
51              return super.findClass(name);
52          }
53          catch (ClassNotFoundException cne)
54          {
55              if (_internalClassLoader != null)
56              {
57                  return _internalClassLoader.loadClass(name);
58              }
59              else
60              {
61                  throw cne;
62              }
63          }
64      }
65  }