diff options
-rw-r--r-- | scripting/java/com/sun/star/script/framework/provider/ClassLoaderFactory.java | 4 | ||||
-rw-r--r-- | scripting/java/com/sun/star/script/framework/provider/java/ScriptProviderForJava.java | 91 |
2 files changed, 43 insertions, 52 deletions
diff --git a/scripting/java/com/sun/star/script/framework/provider/ClassLoaderFactory.java b/scripting/java/com/sun/star/script/framework/provider/ClassLoaderFactory.java index 0974b8874110..b5e6e3085bd2 100644 --- a/scripting/java/com/sun/star/script/framework/provider/ClassLoaderFactory.java +++ b/scripting/java/com/sun/star/script/framework/provider/ClassLoaderFactory.java @@ -33,7 +33,7 @@ public class ClassLoaderFactory { private ClassLoaderFactory() {} - public static URLClassLoader getURLClassLoader(ScriptMetaData scriptData) { + public static ClassLoader getURLClassLoader(ScriptMetaData scriptData) { ClassLoader parent = scriptData.getClass().getClassLoader(); URL[] classPath = scriptData.getClassPath(); LogUtils.DEBUG("Classpath has length " + classPath.length); @@ -45,7 +45,7 @@ public class ClassLoaderFactory { return getURLClassLoader(parent, classPath); } - public static URLClassLoader getURLClassLoader(final ClassLoader parent, + public static ClassLoader getURLClassLoader(final ClassLoader parent, final URL[] classpath) { return AccessController.doPrivileged( new PrivilegedAction<URLClassLoader>() { diff --git a/scripting/java/com/sun/star/script/framework/provider/java/ScriptProviderForJava.java b/scripting/java/com/sun/star/script/framework/provider/java/ScriptProviderForJava.java index 63dc3169f759..eeea0d49ebe5 100644 --- a/scripting/java/com/sun/star/script/framework/provider/java/ScriptProviderForJava.java +++ b/scripting/java/com/sun/star/script/framework/provider/java/ScriptProviderForJava.java @@ -45,8 +45,6 @@ import com.sun.star.uno.Any; import com.sun.star.uno.Type; import com.sun.star.uno.XComponentContext; -import java.io.IOException; -import java.net.URLClassLoader; import java.util.ArrayList; public class ScriptProviderForJava { @@ -184,63 +182,56 @@ class ScriptImpl implements XScript { ScriptDescriptor scriptDesc = new ScriptDescriptor(metaData.getLanguageName()); + LogUtils.DEBUG("Classloader starting..."); + + ClassLoader scriptLoader = + ClassLoaderFactory.getURLClassLoader(metaData); + + LogUtils.DEBUG("Classloader finished..."); + + ArrayList<Object> invocationArgList = new ArrayList<Object>(); Object[] invocationArgs = null; - ScriptProxy script = null; - LogUtils.DEBUG("Classloader starting..."); + LogUtils.DEBUG("Parameter Mapping..."); - try (URLClassLoader scriptLoader = ClassLoaderFactory.getURLClassLoader(metaData)) { - LogUtils.DEBUG("Classloader finished..."); + // Setup Context Object + XScriptContext xSc = + ScriptContext.createContext(m_xModel, m_xInvocContext, + m_xContext, m_xMultiComponentFactory); - ArrayList<Object> invocationArgList = new ArrayList<Object>(); + scriptDesc.addArgumentType(XScriptContext.class); + invocationArgList.add(xSc); - LogUtils.DEBUG("Parameter Mapping..."); + for (int i = 0; i < params.length; i++) { + scriptDesc.addArgumentType(params[ i ].getClass()); + invocationArgList.add(params[ i ]); + } - // Setup Context Object - XScriptContext xSc = - ScriptContext.createContext(m_xModel, m_xInvocContext, - m_xContext, m_xMultiComponentFactory); + if (!invocationArgList.isEmpty()) { + invocationArgs = invocationArgList.toArray(); + } - scriptDesc.addArgumentType(XScriptContext.class); - invocationArgList.add(xSc); + LogUtils.DEBUG("ScriptProxy starting... "); + ScriptProxy script = null; - for (int i = 0; i < params.length; i++) { - scriptDesc.addArgumentType(params[ i ].getClass()); - invocationArgList.add(params[ i ]); - } + try { - if (!invocationArgList.isEmpty()) { - invocationArgs = invocationArgList.toArray(); - } + String className = metaData.getLanguageName().substring(0, + metaData.getLanguageName().lastIndexOf('.')); - LogUtils.DEBUG("ScriptProxy starting... "); + LogUtils.DEBUG("About to load Class " + className + " starting... "); - try { + long start = new java.util.Date().getTime(); + Class<?> c = scriptLoader.loadClass(className); + long end = new java.util.Date().getTime(); - String className = metaData.getLanguageName().substring(0, - metaData.getLanguageName().lastIndexOf('.')); - - LogUtils.DEBUG("About to load Class " + className + " starting... "); - - long start = new java.util.Date().getTime(); - Class<?> c = scriptLoader.loadClass(className); - long end = new java.util.Date().getTime(); - - LogUtils.DEBUG("loadClass took: " + (end - start) + "milliseconds"); - - try { - LogUtils.DEBUG("class loaded ... "); - script = m_resolutionPolicy.getProxy(scriptDesc, c); - LogUtils.DEBUG("script resolved ... "); - } catch (NoSuchMethodException e) { - // Framework error - ScriptFrameworkErrorException e2 = new ScriptFrameworkErrorException( - e.toString(), null, metaData.getLanguageName(), - metaData.getLanguage(), ScriptFrameworkErrorType.NO_SUCH_SCRIPT); - e2.initCause(e); - throw e2; - } - } catch (ClassNotFoundException e) { + LogUtils.DEBUG("loadClass took: " + (end - start) + "milliseconds"); + + try { + LogUtils.DEBUG("class loaded ... "); + script = m_resolutionPolicy.getProxy(scriptDesc, c); + LogUtils.DEBUG("script resolved ... "); + } catch (NoSuchMethodException e) { // Framework error ScriptFrameworkErrorException e2 = new ScriptFrameworkErrorException( e.toString(), null, metaData.getLanguageName(), @@ -248,11 +239,11 @@ class ScriptImpl implements XScript { e2.initCause(e); throw e2; } - } catch (IOException e) { + } catch (ClassNotFoundException e) { // Framework error ScriptFrameworkErrorException e2 = new ScriptFrameworkErrorException( - e.toString(), null, metaData.getLanguageName(), metaData.getLanguage(), - ScriptFrameworkErrorType.NO_SUCH_SCRIPT); + e.toString(), null, metaData.getLanguageName(), + metaData.getLanguage(), ScriptFrameworkErrorType.NO_SUCH_SCRIPT); e2.initCause(e); throw e2; } |