/*
* JBoss, the OpenSource J2EE webOS
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
// $Id: SetClassLoaderHandler.java,v 1.1.4.1 2002/09/12 16:18:03 cgjung Exp $
package org.jboss.net.axis;
import org.apache.axis.MessageContext;
import org.apache.axis.EngineConfiguration;
import javax.xml.namespace.QName;
/**
* This handler is to embed an incoming request into
* the right classloader and should be put into a request
* chain after the service detection handlers. It should be
* complemented by a seperate
* org.jboss.net.axis.ResetClassLoaderHandler
* in the response chain to reinstall the thread association
* in case of success.
* @created 11.03.2002
* @author Christoph G. Jung
* @version $Revision: 1.1.4.1 $
*/
public class SetClassLoaderHandler extends ResetClassLoaderHandler {
//
// API
//
/**
* reroutes the thread associated classloader to
* the one that deployed the corresponding service
* @see Handler#invoke(MessageContext)
*/
public void invoke(MessageContext msgContext) {
EngineConfiguration engineConfig=msgContext.getAxisEngine().getConfig();
if(engineConfig instanceof XMLResourceProvider) {
XMLResourceProvider config=(XMLResourceProvider) engineConfig;
ClassLoader newLoader=config.getMyDeployment().getClassLoader(new QName(null,
msgContext.getTargetService()));
if(newLoader!=null) {
ClassLoader currentLoader=Thread.currentThread().getContextClassLoader();
if(!newLoader.equals(currentLoader)) {
msgContext.setProperty(Constants.OLD_CLASSLOADER_PROPERTY,currentLoader);
Thread.currentThread().setContextClassLoader(newLoader);
}
}
}
}
}