You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by am...@apache.org on 2009/05/20 07:12:58 UTC
svn commit: r776555 - in /webservices/axis2/trunk/java/modules:
jaxws/src/org/apache/axis2/jaxws/framework/ kernel/src/org/apache/axis2/
kernel/src/org/apache/axis2/deployment/
kernel/src/org/apache/axis2/deployment/repository/util/
kernel/src/org/apac...
Author: amilas
Date: Wed May 20 05:12:58 2009
New Revision: 776555
URL: http://svn.apache.org/viewvc?rev=776555&view=rev
Log:
applied the patch for AXIS2-4349
Modified:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentClassLoader.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ModuleDeployer.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/POJODeployer.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceDeployer.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/TransportDeployer.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/repository/util/DeploymentFileData.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisDescription.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java?rev=776555&r1=776554&r2=776555&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java Wed May 20 05:12:58 2009
@@ -102,7 +102,8 @@
axisConfig.getSystemClassLoader(),
true,
(File) axisConfig.
- getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR));
+ getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR),
+ axisConfig.isChildFirstClassLoading());
Thread.currentThread().setContextClassLoader(classLoader);
deployClasses("JAXWS-Builtin", file.toURL(), Thread.currentThread().getContextClassLoader(), classList);
} catch (Exception e) {
@@ -151,7 +152,8 @@
axisConfig.getSystemClassLoader(),
true,
(File) axisConfig.
- getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR));
+ getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR),
+ axisConfig.isChildFirstClassLoading());
Thread.currentThread().setContextClassLoader(classLoader);
ArrayList classList = getListOfClasses(deploymentFileData);
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java?rev=776555&r1=776554&r2=776555&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java Wed May 20 05:12:58 2009
@@ -438,6 +438,13 @@
public static final String REST_METHOD_PARAM="RESTMethod";
public static final String REST_INPUTSERIALIZE_PARAM="RESTInputSerialization";
public static final String REST_OUTPUTSERIALIZE_PARAM="RESTOutputSerialization";
-
+
+ /**
+ * this parameter enables child first class loading.
+ * so the modules and services first use the classes in their class loader first
+ */
+
+ public static final String ENABLE_CHILD_FIRST_CLASS_LOADING="EnableChldFirstClassLoading";
+
}
}
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentClassLoader.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentClassLoader.java?rev=776555&r1=776554&r2=776555&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentClassLoader.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentClassLoader.java Wed May 20 05:12:58 2009
@@ -43,6 +43,8 @@
// List of jar files inside the jars in the original url
private List embedded_jars;
+ private boolean isChildFirstClassLoading;
+
/**
* DeploymentClassLoader is extended from URLClassLoader. The constructor
* does not override the super constructor, but takes in an addition list of
@@ -51,10 +53,14 @@
* @param urls <code>URL</code>s
* @param parent parent classloader <code>ClassLoader</code>
*/
- public DeploymentClassLoader(URL[] urls, List embedded_jars, ClassLoader parent) {
+ public DeploymentClassLoader(URL[] urls,
+ List embedded_jars,
+ ClassLoader parent,
+ boolean isChildFirstClassLoading) {
super(urls, parent);
this.urls = urls;
this.embedded_jars = embedded_jars;
+ this.isChildFirstClassLoading = isChildFirstClassLoading;
}
/**
@@ -260,4 +266,21 @@
}
return null;
}
+
+ protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
+ Class c = null;
+ if (!isChildFirstClassLoading) {
+ c = super.loadClass(name, resolve);
+ } else {
+ c = findLoadedClass(name);
+ if (c == null) {
+ try {
+ c = findClass(name);
+ } catch (Exception e) {
+ c = super.loadClass(name, resolve);
+ }
+ }
+ }
+ return c;
+ }
}
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java?rev=776555&r1=776554&r2=776555&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java Wed May 20 05:12:58 2009
@@ -311,7 +311,8 @@
new URL[]{moduleurl},
axisConfig.getModuleClassLoader(),
true,
- (File) axisConfig.getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR));
+ (File) axisConfig.getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR),
+ axisConfig.isChildFirstClassLoading());
AxisModule module = new AxisModule();
module.setModuleClassLoader(deploymentClassLoader);
module.setParent(axisConfig);
@@ -367,7 +368,8 @@
new URL[]{servicesURL},
axisConfig.getServiceClassLoader(),
true,
- (File) axisConfig.getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR));
+ (File) axisConfig.getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR),
+ axisConfig.isChildFirstClassLoading());
String metainf = "meta-inf";
serviceGroup.setServiceGroupClassLoader(serviceClassLoader);
//processing wsdl.list
@@ -1163,7 +1165,8 @@
axismodule = new AxisModule();
ArchiveReader archiveReader = new ArchiveReader();
- currentDeploymentFile.setClassLoader(false, config.getModuleClassLoader(), null);
+ currentDeploymentFile.setClassLoader(false, config.getModuleClassLoader(), null,
+ config.isChildFirstClassLoading());
axismodule.setModuleClassLoader(currentDeploymentFile.getClassLoader());
archiveReader.readModuleArchive(currentDeploymentFile, axismodule,
false, config);
@@ -1266,7 +1269,8 @@
throws AxisFault {
try {
DeploymentFileData currentDeploymentFile = new DeploymentFileData(serviceFile, null);
- DeploymentClassLoader classLoader = Utils.createClassLoader(serviceFile);
+ DeploymentClassLoader classLoader = Utils.createClassLoader(serviceFile,
+ configCtx.getAxisConfiguration().isChildFirstClassLoading());
currentDeploymentFile.setClassLoader(classLoader);
AxisServiceGroup serviceGroup = new AxisServiceGroup();
serviceGroup.setServiceGroupClassLoader(classLoader);
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ModuleDeployer.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ModuleDeployer.java?rev=776555&r1=776554&r2=776555&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ModuleDeployer.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ModuleDeployer.java Wed May 20 05:12:58 2009
@@ -25,9 +25,11 @@
import org.apache.axis2.deployment.repository.util.ArchiveReader;
import org.apache.axis2.deployment.repository.util.DeploymentFileData;
import org.apache.axis2.description.AxisModule;
+import org.apache.axis2.description.Parameter;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.i18n.Messages;
import org.apache.axis2.util.Utils;
+import org.apache.axis2.util.JavaUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -62,9 +64,11 @@
StringWriter errorWriter = new StringWriter();
boolean isDirectory = deploymentFileData.getFile().isDirectory();
try {
+
deploymentFileData.setClassLoader(isDirectory,
axisConfig.getModuleClassLoader(),
- (File)axisConfig.getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR));
+ (File)axisConfig.getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR),
+ this.axisConfig.isChildFirstClassLoading());
AxisModule metaData = new AxisModule();
metaData.setModuleClassLoader(deploymentFileData.getClassLoader());
metaData.setParent(axisConfig);
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/POJODeployer.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/POJODeployer.java?rev=776555&r1=776554&r2=776555&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/POJODeployer.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/POJODeployer.java Wed May 20 05:12:58 2009
@@ -147,7 +147,8 @@
configCtx.getAxisConfiguration().getSystemClassLoader(),
true,
(File)configCtx.getAxisConfiguration().
- getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR));
+ getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR),
+ configCtx.getAxisConfiguration().isChildFirstClassLoading());
Thread.currentThread().setContextClassLoader(classLoader);
className = className.replaceAll(".class", "");
className = className.replaceAll("/", ".");
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceDeployer.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceDeployer.java?rev=776555&r1=776554&r2=776555&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceDeployer.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/ServiceDeployer.java Wed May 20 05:12:58 2009
@@ -63,7 +63,8 @@
try {
deploymentFileData.setClassLoader(isDirectory,
axisConfig.getServiceClassLoader(),
- (File)axisConfig.getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR));
+ (File)axisConfig.getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR),
+ axisConfig.isChildFirstClassLoading());
HashMap wsdlservice = archiveReader.processWSDLs(deploymentFileData);
if (wsdlservice != null && wsdlservice.size() > 0) {
Iterator services = wsdlservice.values().iterator();
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/TransportDeployer.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/TransportDeployer.java?rev=776555&r1=776554&r2=776555&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/TransportDeployer.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/TransportDeployer.java Wed May 20 05:12:58 2009
@@ -53,7 +53,8 @@
try {
deploymentFileData.setClassLoader(isDirectory,
axisConfig.getModuleClassLoader(),
- (File) axisConfig.getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR));
+ (File) axisConfig.getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR),
+ axisConfig.isChildFirstClassLoading());
ClassLoader loader = deploymentFileData.getClassLoader();
Thread.currentThread().setContextClassLoader(loader);
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/repository/util/DeploymentFileData.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/repository/util/DeploymentFileData.java?rev=776555&r1=776554&r2=776555&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/repository/util/DeploymentFileData.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/repository/util/DeploymentFileData.java Wed May 20 05:12:58 2009
@@ -102,7 +102,7 @@
this.classLoader = classLoader;
}
- public void setClassLoader(boolean isDirectory, ClassLoader parent, File file) throws AxisFault {
+ public void setClassLoader(boolean isDirectory, ClassLoader parent, File file, boolean isChildFirstClassLoading) throws AxisFault {
if (!isDirectory) {
if (this.file != null) {
URL[] urlsToLoadFrom;
@@ -112,7 +112,7 @@
this.file.getAbsolutePath()));
}
urlsToLoadFrom = new URL[]{this.file.toURL()};
- classLoader = Utils.createClassLoader(urlsToLoadFrom, parent, true, file);
+ classLoader = Utils.createClassLoader(urlsToLoadFrom, parent, true, file, isChildFirstClassLoading);
} catch (Exception e) {
throw AxisFault.makeFault(e);
}
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java?rev=776555&r1=776554&r2=776555&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java Wed May 20 05:12:58 2009
@@ -667,13 +667,10 @@
DeploymentFileData filedata = new DeploymentFileData(
inputFile);
- filedata
- .setClassLoader(
- false,
+ filedata.setClassLoader(false,
moduleClassLoader,
- (File)axisConfig
- .getParameterValue(
- Constants.Configuration.ARTIFACTS_TEMP_DIR));
+ (File)axisConfig.getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR),
+ axisConfig.isChildFirstClassLoading());
HashMap wsdlservice = archiveReader.processWSDLs(filedata);
if (wsdlservice != null && wsdlservice.size() > 0) {
Iterator servicesitr = wsdlservice.values().iterator();
@@ -846,7 +843,7 @@
excludeList.add("shutDown");
}
- public static DeploymentClassLoader createClassLoader(File serviceFile)
+ public static DeploymentClassLoader createClassLoader(File serviceFile, boolean isChildFirstClassLoading)
throws MalformedURLException {
ClassLoader contextClassLoader =
(ClassLoader)org.apache.axis2.java.security.AccessController
@@ -856,13 +853,14 @@
}
});
return createDeploymentClassLoader(new URL[]{serviceFile.toURL()},
- contextClassLoader, new ArrayList());
+ contextClassLoader, new ArrayList(), isChildFirstClassLoading);
}
public static ClassLoader createClassLoader(ArrayList urls,
ClassLoader serviceClassLoader,
boolean extractJars,
- File tmpDir) {
+ File tmpDir,
+ boolean isChildFirstClassLoading) {
URL url = (URL)urls.get(0);
if (extractJars) {
try {
@@ -871,7 +869,7 @@
urls.addAll(0, Arrays.asList(urls1));
URL[] urls2 = (URL[])urls.toArray(new URL[urls.size()]);
return createDeploymentClassLoader(urls2, serviceClassLoader,
- null);
+ null, isChildFirstClassLoading);
} catch (Exception e) {
log
.warn("Exception extracting jars into temporary directory : "
@@ -883,7 +881,7 @@
List embedded_jars = Utils.findLibJars(url);
URL[] urls2 = (URL[])urls.toArray(new URL[urls.size()]);
return createDeploymentClassLoader(urls2, serviceClassLoader,
- embedded_jars);
+ embedded_jars, isChildFirstClassLoading);
}
public static File toFile(URL url) throws UnsupportedEncodingException {
@@ -894,12 +892,13 @@
public static ClassLoader createClassLoader(URL[] urls,
ClassLoader serviceClassLoader,
boolean extractJars,
- File tmpDir) {
+ File tmpDir,
+ boolean isChildFirstClassLoading) {
if (extractJars) {
try {
URL[] urls1 = Utils.getURLsForAllJars(urls[0], tmpDir);
return createDeploymentClassLoader(urls1, serviceClassLoader,
- null);
+ null, isChildFirstClassLoading);
} catch (Exception e) {
log
.warn("Exception extracting jars into temporary directory : "
@@ -910,17 +909,17 @@
}
List embedded_jars = Utils.findLibJars(urls[0]);
return createDeploymentClassLoader(urls, serviceClassLoader,
- embedded_jars);
+ embedded_jars, isChildFirstClassLoading);
}
private static DeploymentClassLoader createDeploymentClassLoader(
final URL[] urls, final ClassLoader serviceClassLoader,
- final List embeddedJars) {
+ final List embeddedJars, final boolean isChildFirstClassLoading) {
return (DeploymentClassLoader)AccessController
.doPrivileged(new PrivilegedAction() {
public Object run() {
return new DeploymentClassLoader(urls, embeddedJars,
- serviceClassLoader);
+ serviceClassLoader, isChildFirstClassLoading);
}
});
}
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisDescription.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisDescription.java?rev=776555&r1=776554&r2=776555&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisDescription.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisDescription.java Wed May 20 05:12:58 2009
@@ -25,6 +25,7 @@
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.OMText;
import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.i18n.Messages;
import org.apache.axis2.modules.Module;
@@ -566,4 +567,6 @@
return policySubject;
}
+
+
}
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java?rev=776555&r1=776554&r2=776555&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java Wed May 20 05:12:58 2009
@@ -34,6 +34,7 @@
import javax.xml.namespace.QName;
import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
import org.apache.axis2.transaction.TransactionConfiguration;
import org.apache.axis2.builder.Builder;
import org.apache.axis2.builder.unknowncontent.UnknownContentBuilder;
@@ -62,6 +63,7 @@
import org.apache.axis2.util.TargetResolver;
import org.apache.axis2.util.Utils;
import org.apache.axis2.util.FaultyServiceData;
+import org.apache.axis2.util.JavaUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -1426,4 +1428,13 @@
axisService, axisConfiguration);
}
}
+
+ public boolean isChildFirstClassLoading(){
+ boolean childFirstClassLoading = false;
+ Parameter isChildFirstClassLoading = this.getParameter(Constants.Configuration.ENABLE_CHILD_FIRST_CLASS_LOADING);
+ if (isChildFirstClassLoading != null){
+ childFirstClassLoading = JavaUtils.isTrueExplicitly(isChildFirstClassLoading.getValue());
+ }
+ return childFirstClassLoading;
+ }
}