Author: veithen Date: Wed Feb 29 20:37:59 2012 New Revision: 1295256 URL: http://svn.apache.org/viewvc?rev=1295256&view=rev Log: Eliminated the static class name -> class loader map in ClassUtils and use class loaders (and Class objects) as they are intended to be used.
Modified: axis/axis1/java/trunk/axis-ant/src/main/java/org/apache/axis/tools/ant/wsdl/Java2WsdlAntTask.java axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/providers/BasicProvider.java axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/utils/ClassUtils.java axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/wsdl/Java2WSDL.java axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/wsdl/fromJava/Emitter.java axis/axis1/java/trunk/axis/src/main/resources/org/apache/axis/i18n/resource.properties axis/axis1/java/trunk/maven/maven-java2wsdl-plugin/src/main/java/org/apache/axis/maven/java2wsdl/AbstractGenerateWsdlMojo.java Modified: axis/axis1/java/trunk/axis-ant/src/main/java/org/apache/axis/tools/ant/wsdl/Java2WsdlAntTask.java URL: http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis-ant/src/main/java/org/apache/axis/tools/ant/wsdl/Java2WsdlAntTask.java?rev=1295256&r1=1295255&r2=1295256&view=diff ============================================================================== --- axis/axis1/java/trunk/axis-ant/src/main/java/org/apache/axis/tools/ant/wsdl/Java2WsdlAntTask.java (original) +++ axis/axis1/java/trunk/axis-ant/src/main/java/org/apache/axis/tools/ant/wsdl/Java2WsdlAntTask.java Wed Feb 29 20:37:59 2012 @@ -18,7 +18,6 @@ package org.apache.axis.tools.ant.wsdl; import org.apache.axis.encoding.TypeMappingImpl; import org.apache.axis.encoding.TypeMappingRegistryImpl; import org.apache.axis.encoding.TypeMappingDelegate; -import org.apache.axis.utils.ClassUtils; import org.apache.axis.wsdl.fromJava.Emitter; import org.apache.tools.ant.AntClassLoader; import org.apache.tools.ant.BuildException; @@ -37,7 +36,6 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.StringTokenizer; /* * Important. we autogenerate the ant task docs from this. @@ -149,16 +147,6 @@ public class Java2WsdlAntTask extends Ta classpath == null ? createClasspath() : classpath, false); - ClassUtils.setDefaultClassLoader(cl); - //add extra classes to the classpath when the classpath attr is not null - if (extraClasses != null) { - StringTokenizer tokenizer = new StringTokenizer(extraClasses, " ,"); - while (tokenizer.hasMoreTokens()) { - String clsName = tokenizer.nextToken(); - ClassUtils.setClassLoader(clsName, cl); - } - } - CommandlineJava.SysProperties sysProperties = commandline.getSystemProperties(); if (sysProperties != null) { @@ -185,9 +173,9 @@ public class Java2WsdlAntTask extends Ta emitter.setBindingName(bindingName); } log("Java2WSDL " + className, Project.MSG_INFO); - emitter.setCls(className); + emitter.setCls(cl.loadClass(className)); if (implClass != null) { - emitter.setImplCls(implClass); + emitter.setImplCls(cl.loadClass(implClass)); } if (exclude != null) { emitter.setDisallowedMethods(exclude); @@ -196,7 +184,7 @@ public class Java2WsdlAntTask extends Ta emitter.setStopClasses(stopClasses); } if (extraClasses != null) { - emitter.setExtraClasses(extraClasses); + emitter.setExtraClasses(extraClasses, cl); } TypeMappingRegistryImpl tmr = new TypeMappingRegistryImpl(); Modified: axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/providers/BasicProvider.java URL: http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/providers/BasicProvider.java?rev=1295256&r1=1295255&r2=1295256&view=diff ============================================================================== --- axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/providers/BasicProvider.java (original) +++ axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/providers/BasicProvider.java Wed Feb 29 20:37:59 2012 @@ -232,7 +232,7 @@ public abstract class BasicProvider exte } if (extraClasses != null && extraClasses.length() > 0) { - emitter.setExtraClasses(extraClasses); + emitter.setExtraClasses(extraClasses, msgContext.getClassLoader()); } if (msgContext.isPropertyTrue(AxisEngine.PROP_EMIT_ALL_TYPES)) { Modified: axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/utils/ClassUtils.java URL: http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/utils/ClassUtils.java?rev=1295256&r1=1295255&r2=1295256&view=diff ============================================================================== --- axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/utils/ClassUtils.java (original) +++ axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/utils/ClassUtils.java Wed Feb 29 20:37:59 2012 @@ -34,9 +34,6 @@ public final class ClassUtils { private static ClassLoader defaultClassLoader = ClassUtils.class.getClassLoader(); - /** hash table of class loaders */ - private static java.util.Hashtable classloaders = new java.util.Hashtable(); - /** * Set the default ClassLoader. If loader is null, the default loader is * not changed. @@ -53,42 +50,6 @@ public final class ClassUtils { } /** - * Set the ClassLoader associated with the given className. If either the - * class name or the loader are null, no action is performed. - * - * @param className the name of a class - * @param loader the ClassLoader for the class - */ - public static void setClassLoader(String className, ClassLoader loader) { - if (className != null && loader != null) - classloaders.put(className, loader); - } - - /** - * Obtain the ClassLoader (if any) associated with the given - * className. - * - * @param className the name of a class - * @return class loader - */ - public static ClassLoader getClassLoader(String className) { - if (className == null) { - return null; - } - return (ClassLoader) classloaders.get(className); - } - - /** - * Deregister the ClassLoader for a given className. - * - * @param className the name of a class - */ - public static void removeClassLoader(String className) { - classloaders.remove(className); - } - - - /** * Use this method instead of Class.forName * * @param className Class name @@ -162,15 +123,6 @@ public final class ClassUtils { new PrivilegedAction() { public Object run() { try { - // Check if the class is a registered class then - // use the classloader for that class. - ClassLoader classLoader = getClassLoader(className); - return Class.forName(className, true, classLoader); - } catch (ClassNotFoundException cnfe) { - } catch (SecurityException cnfe) { - } - - try { // Try the context class loader ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); Modified: axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/wsdl/Java2WSDL.java URL: http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/wsdl/Java2WSDL.java?rev=1295256&r1=1295255&r2=1295256&view=diff ============================================================================== --- axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/wsdl/Java2WSDL.java (original) +++ axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/wsdl/Java2WSDL.java Wed Feb 29 20:37:59 2012 @@ -264,6 +264,11 @@ public class Java2WSDL { protected boolean isDeploy = false; /** + * The class loader to use to load classes specified on the command line. + */ + private ClassLoader classLoader = Java2WSDL.class.getClassLoader(); + + /** * Instantiate a Java2WSDL emitter. */ protected Java2WSDL() { @@ -336,7 +341,14 @@ public class Java2WSDL { break; case IMPL_CLASS_OPT: - emitter.setImplCls(option.getArgument()); + try { + emitter.setImplCls(classLoader.loadClass(option.getArgument())); + } catch (ClassNotFoundException e) { + System.out.println(Messages.getMessage("j2woptBadClass01", + e.toString())); + + status = false; + } break; case HELP_OPT: @@ -474,7 +486,7 @@ public class Java2WSDL { case EXTRA_CLASSES_OPT: try { - emitter.setExtraClasses(option.getArgument()); + emitter.setExtraClasses(option.getArgument(), classLoader); } catch (ClassNotFoundException e) { System.out.println(Messages.getMessage("j2woptBadClass00", e.toString())); @@ -488,9 +500,9 @@ public class Java2WSDL { break; case CLASSPATH_OPT: - ClassUtils.setDefaultClassLoader(ClassUtils.createClassLoader( + classLoader = ClassUtils.createClassLoader( option.getArgument(), - this.getClass().getClassLoader())); + this.getClass().getClassLoader()); break; case DEPLOY_OPT: @@ -581,7 +593,7 @@ public class Java2WSDL { emitter.setTypeMappingRegistry(tmr); // Find the class using the name - emitter.setCls(className); + emitter.setCls(classLoader.loadClass(className)); // Generate a full wsdl, or interface & implementation wsdls if (wsdlImplFilename == null) { Modified: axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/wsdl/fromJava/Emitter.java URL: http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/wsdl/fromJava/Emitter.java?rev=1295256&r1=1295255&r2=1295256&view=diff ============================================================================== --- axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/wsdl/fromJava/Emitter.java (original) +++ axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/wsdl/fromJava/Emitter.java Wed Feb 29 20:37:59 2012 @@ -35,7 +35,6 @@ import org.apache.axis.description.Servi import org.apache.axis.encoding.TypeMapping; import org.apache.axis.encoding.TypeMappingRegistry; import org.apache.axis.encoding.TypeMappingRegistryImpl; -import org.apache.axis.utils.ClassUtils; import org.apache.axis.utils.JavaUtils; import org.apache.axis.utils.Messages; import org.apache.axis.utils.XMLUtils; @@ -2070,16 +2069,6 @@ public class Emitter { } /** - * Sets the <code>Class</code> to export - * - * @param className the name of the <code>Class</code> to export - * @throws ClassNotFoundException - */ - public void setCls(String className) throws ClassNotFoundException { - cls = ClassUtils.forName(className); - } - - /** * Returns the implementation <code>Class</code> if set * * @return the implementation Class or null @@ -2098,20 +2087,6 @@ public class Emitter { } /** - * Sets the implementation <code>Class</code> - * - * @param className the name of the implementation <code>Class</code> - */ - public void setImplCls(String className) { - - try { - implCls = ClassUtils.forName(className); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - /** * Returns the interface namespace * * @return interface target namespace @@ -2706,14 +2681,17 @@ public class Emitter { } /** - * Provide a comma or space seperated list of classes which - * the emitter will produce WSDL type definitions for. - * The classes will be added to the current list. - * - * @param text - * @throws ClassNotFoundException + * Convenience method that processes a comma or space separated list of classes which the + * emitter will produce WSDL type definitions for. The classes will be added to the current + * list. + * + * @param text + * a comma or space separated list of class names + * @param classLoader + * the class loader that should be used to load the classes + * @throws ClassNotFoundException */ - public void setExtraClasses(String text) throws ClassNotFoundException { + public void setExtraClasses(String text, ClassLoader classLoader) throws ClassNotFoundException { ArrayList clsList = new ArrayList(); @@ -2724,7 +2702,7 @@ public class Emitter { String clsName = tokenizer.nextToken(); // Let the caller handler ClassNotFoundException - Class cls = ClassUtils.forName(clsName); + Class cls = classLoader.loadClass(clsName); clsList.add(cls); } Modified: axis/axis1/java/trunk/axis/src/main/resources/org/apache/axis/i18n/resource.properties URL: http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis/src/main/resources/org/apache/axis/i18n/resource.properties?rev=1295256&r1=1295255&r2=1295256&view=diff ============================================================================== --- axis/axis1/java/trunk/axis/src/main/resources/org/apache/axis/i18n/resource.properties (original) +++ axis/axis1/java/trunk/axis/src/main/resources/org/apache/axis/i18n/resource.properties Wed Feb 29 20:37:59 2012 @@ -925,6 +925,7 @@ j2woptUse00=The use of items in the bind j2woptBadUse00=The value of the use option must be LITERAL or ENCODED j2woptExtraClasses00=A space or comma separated list of class names to be added to the type section. j2woptBadClass00=Invalid class provided for --extraClasses option: {0} +j2woptBadClass01=Invalid class provided for -i option: {0} operationAlreadySet=Can''t modify settings on a Call whose OperationDesc was set by setOperation() illegalStateException00=IllegalStateException: Modified: axis/axis1/java/trunk/maven/maven-java2wsdl-plugin/src/main/java/org/apache/axis/maven/java2wsdl/AbstractGenerateWsdlMojo.java URL: http://svn.apache.org/viewvc/axis/axis1/java/trunk/maven/maven-java2wsdl-plugin/src/main/java/org/apache/axis/maven/java2wsdl/AbstractGenerateWsdlMojo.java?rev=1295256&r1=1295255&r2=1295256&view=diff ============================================================================== --- axis/axis1/java/trunk/maven/maven-java2wsdl-plugin/src/main/java/org/apache/axis/maven/java2wsdl/AbstractGenerateWsdlMojo.java (original) +++ axis/axis1/java/trunk/maven/maven-java2wsdl-plugin/src/main/java/org/apache/axis/maven/java2wsdl/AbstractGenerateWsdlMojo.java Wed Feb 29 20:37:59 2012 @@ -26,14 +26,12 @@ import java.util.List; import org.apache.axis.maven.shared.nsmap.Mapping; import org.apache.axis.maven.shared.nsmap.MappingUtil; -import org.apache.axis.utils.ClassUtils; import org.apache.axis.wsdl.fromJava.Emitter; import org.apache.maven.artifact.DependencyResolutionRequiredException; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.project.MavenProject; -import org.codehaus.plexus.util.StringUtils; import com.github.veithen.ulog.PlexusLoggerInjector; @@ -140,49 +138,41 @@ public abstract class AbstractGenerateWs } } ClassLoader cl = new URLClassLoader(urls); - // TODO: this will likely make the plugin non thread safe - ClassUtils.setDefaultClassLoader(cl); - if (extraClasses != null) { - for (int i=0; i<extraClasses.length; i++) { - ClassUtils.setClassLoader(extraClasses[i], cl); - } + Emitter emitter = new Emitter(); + if (mappings != null && mappings.length > 0) { + emitter.setNamespaceMap(MappingUtil.getPackageToNamespaceMap(mappings)); } try { - Emitter emitter = new Emitter(); - if (mappings != null && mappings.length > 0) { - emitter.setNamespaceMap(MappingUtil.getPackageToNamespaceMap(mappings)); - } - try { - emitter.setCls(className); - } catch (ClassNotFoundException ex) { - throw new MojoFailureException("Class " + className + " not found"); - } - if (extraClasses != null) { + emitter.setCls(cl.loadClass(className)); + } catch (ClassNotFoundException ex) { + throw new MojoFailureException("Class " + className + " not found"); + } + if (extraClasses != null) { + Class[] loadedExtraClasses = new Class[extraClasses.length]; + for (int i=0; i<extraClasses.length; i++) { try { - emitter.setExtraClasses(StringUtils.join(extraClasses, ",")); + loadedExtraClasses[i] = cl.loadClass(extraClasses[i]); } catch (ClassNotFoundException ex) { - throw new MojoExecutionException("Extra class not found: " + ex.getMessage()); + throw new MojoExecutionException("Extra class not found: " + extraClasses[i]); } } - if (style != null) { - emitter.setStyle(style); - } - if (use != null) { - emitter.setUse(use); - } - emitter.setIntfNamespace(namespace); - emitter.setLocationUrl(location); - output.getParentFile().mkdirs(); - try { - emitter.emit(output.getAbsolutePath(), Emitter.MODE_ALL); - } catch (Exception ex) { - throw new MojoFailureException("java2wsdl failed", ex); - } - postProcess(emitter, output); - } finally { - // TODO: apparently this is a no-op - ClassUtils.setDefaultClassLoader(null); + emitter.setExtraClasses(loadedExtraClasses); + } + if (style != null) { + emitter.setStyle(style); + } + if (use != null) { + emitter.setUse(use); + } + emitter.setIntfNamespace(namespace); + emitter.setLocationUrl(location); + output.getParentFile().mkdirs(); + try { + emitter.emit(output.getAbsolutePath(), Emitter.MODE_ALL); + } catch (Exception ex) { + throw new MojoFailureException("java2wsdl failed", ex); } + postProcess(emitter, output); } protected abstract void postProcess(Emitter emitter, File wsdlFile) throws MojoExecutionException, MojoFailureException;