Author: richard.opalka(a)jboss.com
Date: 2011-04-13 05:08:41 -0400 (Wed, 13 Apr 2011)
New Revision: 14084
Modified:
common/trunk/src/main/java/org/jboss/wsf/spi/tools/cmd/SecurityActions.java
common/trunk/src/main/java/org/jboss/wsf/spi/tools/cmd/WSConsume.java
common/trunk/src/main/java/org/jboss/wsf/spi/tools/cmd/WSProvide.java
Log:
[JBWS-3222] implement temporary reflection based hack for AS7 jbossws integration module
lookup
Modified: common/trunk/src/main/java/org/jboss/wsf/spi/tools/cmd/SecurityActions.java
===================================================================
--- common/trunk/src/main/java/org/jboss/wsf/spi/tools/cmd/SecurityActions.java 2011-04-13
02:16:40 UTC (rev 14083)
+++ common/trunk/src/main/java/org/jboss/wsf/spi/tools/cmd/SecurityActions.java 2011-04-13
09:08:41 UTC (rev 14084)
@@ -57,7 +57,66 @@
});
}
}
+
+ /**
+ * Set context classloader.
+ *
+ * @param classLoader the classloader
+ */
+ static void setContextClassLoader(final ClassLoader classLoader)
+ {
+ if (System.getSecurityManager() == null)
+ {
+ Thread.currentThread().setContextClassLoader(classLoader);
+ }
+ else
+ {
+ AccessController.doPrivileged(new PrivilegedAction<Object>()
+ {
+ public Object run()
+ {
+ Thread.currentThread().setContextClassLoader(classLoader);
+ return null;
+ }
+ });
+ }
+ }
+ static ClassLoader getModulesClassLoader()
+ {
+ SecurityManager sm = System.getSecurityManager();
+ if (sm == null)
+ {
+ return getModulesClassLoaderInternal();
+ }
+ else
+ {
+ return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
{
+ public ClassLoader run()
+ {
+ return getModulesClassLoaderInternal();
+ }
+ });
+ }
+ }
+
+ private static ClassLoader getModulesClassLoaderInternal()
+ {
+ // TODO: use SPI class loader facade, not reflection!
+ try {
+ Class<?> moduleClass =
Class.forName("org.jboss.modules.Module");
+ Class<?> moduleIdentifierClass =
Class.forName("org.jboss.modules.ModuleIdentifier");
+ Class<?> moduleLoaderClass =
Class.forName("org.jboss.modules.ModuleLoader");
+ Object moduleLoader =
moduleClass.getMethod("getBootModuleLoader").invoke(null);
+ Object moduleIdentifier = moduleIdentifierClass.getMethod("create",
String.class).invoke(null, "org.jboss.as.webservices.server.integration");
+ Object module = moduleLoaderClass.getMethod("loadModule",
moduleIdentifierClass).invoke(moduleLoader, moduleIdentifier);
+ return
(ClassLoader)moduleClass.getMethod("getClassLoader").invoke(module);
+ } catch (Exception e) {
+ //ignore, JBoss Modules might not be available at all
+ return null;
+ }
+ }
+
/**
* Load a class using the provided classloader
*
Modified: common/trunk/src/main/java/org/jboss/wsf/spi/tools/cmd/WSConsume.java
===================================================================
--- common/trunk/src/main/java/org/jboss/wsf/spi/tools/cmd/WSConsume.java 2011-04-13
02:16:40 UTC (rev 14083)
+++ common/trunk/src/main/java/org/jboss/wsf/spi/tools/cmd/WSConsume.java 2011-04-13
09:08:41 UTC (rev 14084)
@@ -68,6 +68,7 @@
*/
public class WSConsume
{
+ private static final ClassLoader MODULES_LOADER;
private List<File> bindingFiles = new ArrayList<File>();
private File outputDir = new File("output");
private boolean generateSource;
@@ -82,15 +83,41 @@
private boolean noCompile;
private File sourceDir;
private String target;
-
+
+ static
+ {
+ MODULES_LOADER = SecurityActions.getModulesClassLoader();
+ }
+
public static final String PROGRAM_NAME =
SecurityActions.getSystemProperty("program.name", WSConsume.class.getName());
public static void main(String[] args)
{
- WSConsume importer = new WSConsume();
- URL wsdl = importer.parseArguments(args);
- System.exit(importer.importServices(wsdl));
+ if (MODULES_LOADER != null)
+ {
+ final ClassLoader origLoader = SecurityActions.getContextClassLoader();
+ try
+ {
+ SecurityActions.setContextClassLoader(MODULES_LOADER);
+ mainInternal(args);
+ }
+ finally
+ {
+ SecurityActions.setContextClassLoader(origLoader);
+ }
+ }
+ else
+ {
+ mainInternal(args);
+ }
}
+
+ private static void mainInternal(final String[] args)
+ {
+ WSConsume importer = new WSConsume();
+ URL wsdl = importer.parseArguments(args);
+ System.exit(importer.importServices(wsdl));
+ }
private URL parseArguments(String[] args)
{
Modified: common/trunk/src/main/java/org/jboss/wsf/spi/tools/cmd/WSProvide.java
===================================================================
--- common/trunk/src/main/java/org/jboss/wsf/spi/tools/cmd/WSProvide.java 2011-04-13
02:16:40 UTC (rev 14083)
+++ common/trunk/src/main/java/org/jboss/wsf/spi/tools/cmd/WSProvide.java 2011-04-13
09:08:41 UTC (rev 14084)
@@ -64,7 +64,8 @@
*/
public class WSProvide
{
- private ClassLoader loader = SecurityActions.getContextClassLoader();
+ private static final ClassLoader DEFAULT_LOADER;
+ private ClassLoader loader = DEFAULT_LOADER;
private File outputDir = new File("output");
private boolean generateSource;
private boolean generateWsdl;
@@ -74,6 +75,13 @@
private boolean loadProvider;
private File resourceDir;
private File sourceDir;
+
+ static
+ {
+ final ClassLoader modulesLoader = SecurityActions.getModulesClassLoader();
+ final ClassLoader contextLoader = SecurityActions.getContextClassLoader();
+ DEFAULT_LOADER = modulesLoader != null ? modulesLoader : contextLoader;
+ }
public static final String PROGRAM_NAME =
SecurityActions.getSystemProperty("program.name",
WSProvide.class.getSimpleName());
Show replies by date