alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

/*   
 *  Copyright 1999-2004 The Apache Sofware Foundation.
 *
 *  Licensed 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.
 */

package org.apache.tomcat.modules.generators;

import org.apache.tomcat.core.BaseInterceptor;
import org.apache.tomcat.core.Context;
import org.apache.tomcat.core.ContextManager;
import org.apache.tomcat.core.Handler;
import org.apache.tomcat.core.Request;
import org.apache.tomcat.core.Response;
import org.apache.tomcat.core.TomcatException;
import org.apache.tomcat.util.compat.Jdk11Compat;

/**
 *  JDK1.2 specific options. Fix the class loader, etc.
 */
public final class Jdk12Interceptor extends  BaseInterceptor {
    private ContextManager cm;
    private int debug=0;

    public Jdk12Interceptor() {
    }

    public void preServletInit( Context ctx, Handler sw )
	throws TomcatException
    {
	fixJDKContextClassLoader(ctx);
    }

    public int preInitCheck( Request req, Handler sw )
	throws TomcatException
    {
        fixJDKContextClassLoader(req.getContext());
	return 0;
    }

    /** Servlet Destroy  notification
     */
    public void preServletDestroy( Context ctx, Handler sw )
	throws TomcatException
    {
	fixJDKContextClassLoader(ctx);
    }

    public void postServletDestroy( Context ctx, Handler sw )
	throws TomcatException
    {
	jdk11Compat.setContextClassLoader(this.getClass().getClassLoader());
    }
    
    public void postServletInit( Context ctx, Handler sw )
	throws TomcatException
    {
	jdk11Compat.setContextClassLoader(this.getClass().getClassLoader());
    }
    
    public int postInitCheck( Request req, Handler sw )
	throws TomcatException
    {
	jdk11Compat.setContextClassLoader(this.getClass().getClassLoader());
	return 0;
    }
    /** Called before service method is invoked. 
     */
    public int preService(Request request, Response response) {
	if( request.getContext() == null ) return 0;
	// fix for 1112
	Request child=request.getChild();
	if( child!=null ) {
	    request=child;
	}
	fixJDKContextClassLoader(request.getContext());
	return 0;
    }

    public int postService(Request request, Response response) {
	Request child=request.getChild();
	if( child==null ) return 0;

	// after include, reset the class loader
	// fix for 1112
	request=child.getParent();
	if( request != null )
	    fixJDKContextClassLoader(request.getContext());
	else
	    jdk11Compat.setContextClassLoader(this.getClass().getClassLoader());
	return 0;
    }

    static Jdk11Compat jdk11Compat=Jdk11Compat.getJdkCompat();
    
    
    // Before we do init() or service(), we need to do some tricks
    // with the class loader - see bug #116.
    // some JDK1.2 code will not work without this fix
    // we save the originalCL because we might be in include
    // and we need to revert to it when we finish
    // that will set a new (JDK)context class loader, and return the old one
    // if we are in JDK1.2
    // XXX move it to interceptor !!!
    final private void fixJDKContextClassLoader( Context ctx ) {
	final ClassLoader cl=ctx.getClassLoader();
	if( cl==null ) {
	    log("ERROR: Jdk12Interceptor: classloader==null");
	    return;
	}
	if( cl == jdk11Compat.getContextClassLoader() )
	    return; // nothing to do - or in include if same context
	
	jdk11Compat.setContextClassLoader(cl);
    }
    
}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.