Kaydet (Commit) 7ea7fb00 authored tarafından Stephan Bergmann's avatar Stephan Bergmann

fdo#49517: Revert "fdo#46102: Load Java scripts with class loaders [...]"

This reverts commit dd6c4f4d "fdo#46102: Load
Java scripts with class loaders that actually find them."  That commit broke
support for macros embedded in documents (as
new java.net.URL("vnd.sun.star.tdoc:...") throws a MalformedURLExcetpion), and
it looks like that commit was not necessary after all -- or rather that what it
tried to work around must have been some other problem that has been fixed
meanwhile.  "It is unclear to me how the Java script provider shall ever have
found the script jars in the past" indicates that something must have been
fishy, and what I failed to notice back then is that createURL creates
java.net.URL instances with a UCBStreamHandler that does allow to obtain content
from weird-looking URLs.

Anyway, with that reverted, all three following scenarios work on both current
master (towards LO 3.7) and libreoffice-3-6 (towards LO 3.6.4); I haven't yet
come around to test on libreoffice-3-5:

1  Stock macros, "Tools - Macros - Run Macro... - LibreOffice Macros -
HelloWorld", running all of the four "helloworld.bsh", "helloworld.js",
"HelloWorldPyhton", and
"org.libreoffice.example.java_scripts.HelloWorld.printHW".

2  Per-document macros, loading test.odt attached to fdo#49517, then "Tools -
Macros - Run Macro... - test.odt - HelloWorld", running
"org.libreoffice.example.java_scripts.HelloWorld.printHW".

3  Extension macros, installing ScriptDispatch.oxt attached to fdo#46012 as
shared extension, then loading StartScriptDispatch.odt attached to fdo#46012 and
pressing the "Start Java via ScriptProvider" button.

Change-Id: I31cd16b3720ffeb1058722d4d1fdffb773f8a067
üst 7be49c34
...@@ -41,14 +41,7 @@ import com.sun.star.script.framework.io.UCBStreamHandler; ...@@ -41,14 +41,7 @@ import com.sun.star.script.framework.io.UCBStreamHandler;
import com.sun.star.ucb.XSimpleFileAccess2; import com.sun.star.ucb.XSimpleFileAccess2;
import com.sun.star.uno.AnyConverter;
import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
import com.sun.star.uri.UriReferenceFactory;
import com.sun.star.uri.XVndSunStarExpandUrl;
import com.sun.star.util.XMacroExpander;
public class ScriptMetaData extends ScriptEntry implements Cloneable { public class ScriptMetaData extends ScriptEntry implements Cloneable {
private boolean hasSource = false; private boolean hasSource = false;
...@@ -244,8 +237,7 @@ public class ScriptMetaData extends ScriptEntry implements Cloneable { ...@@ -244,8 +237,7 @@ public class ScriptMetaData extends ScriptEntry implements Cloneable {
return "\nParcelLocation = " + getParcelLocation() + "\nLocationPlaceHolder = " + locationPlaceHolder + super.toString(); return "\nParcelLocation = " + getParcelLocation() + "\nLocationPlaceHolder = " + locationPlaceHolder + super.toString();
} }
public URL[] getClassPath(XComponentContext context) public URL[] getClassPath() throws java.net.MalformedURLException
throws java.net.MalformedURLException
{ {
try try
{ {
...@@ -272,7 +264,7 @@ public class ScriptMetaData extends ScriptEntry implements Cloneable { ...@@ -272,7 +264,7 @@ public class ScriptMetaData extends ScriptEntry implements Cloneable {
{ {
String relativeClasspath = stk.nextToken(); String relativeClasspath = stk.nextToken();
String pathToProcess = PathUtils.make_url( parcelPath, relativeClasspath); String pathToProcess = PathUtils.make_url( parcelPath, relativeClasspath);
URL url = expandURL( context, pathToProcess ); URL url = createURL( pathToProcess );
if ( url != null ) if ( url != null )
{ {
classPathVec.add ( url ); classPathVec.add ( url );
...@@ -281,7 +273,7 @@ public class ScriptMetaData extends ScriptEntry implements Cloneable { ...@@ -281,7 +273,7 @@ public class ScriptMetaData extends ScriptEntry implements Cloneable {
} }
if ( classPathVec.size() == 0) if ( classPathVec.size() == 0)
{ {
URL url = expandURL( context, parcelPath ); URL url = createURL( parcelPath );
if ( url != null ) if ( url != null )
{ {
classPathVec.add(url); classPathVec.add(url);
...@@ -298,38 +290,6 @@ public class ScriptMetaData extends ScriptEntry implements Cloneable { ...@@ -298,38 +290,6 @@ public class ScriptMetaData extends ScriptEntry implements Cloneable {
} }
} }
private URL expandURL(XComponentContext context, String url)
throws java.net.MalformedURLException
{
XVndSunStarExpandUrl exp = UnoRuntime.queryInterface(
XVndSunStarExpandUrl.class,
UriReferenceFactory.create(context).parse(url));
String expurl;
if (exp == null) {
expurl = url;
} else {
XMacroExpander expander;
try {
expander = (XMacroExpander) AnyConverter.toObject(
XMacroExpander.class,
context.getValueByName(
"/singletons/com.sun.star.util.theMacroExpander"));
} catch (com.sun.star.lang.IllegalArgumentException e) {
throw new RuntimeException(e);
}
try {
expurl = exp.expand(expander);
} catch (com.sun.star.lang.IllegalArgumentException e) {
java.net.MalformedURLException e2 =
new java.net.MalformedURLException(e.toString());
e2.initCause(e);
throw e2;
}
}
return new URL(expurl);
}
private URL createURL( String path ) throws java.net.MalformedURLException private URL createURL( String path ) throws java.net.MalformedURLException
{ {
URL url = null; URL url = null;
......
...@@ -22,7 +22,6 @@ import java.net.*; ...@@ -22,7 +22,6 @@ import java.net.*;
import com.sun.star.script.framework.log.LogUtils; import com.sun.star.script.framework.log.LogUtils;
import com.sun.star.script.framework.container.ScriptMetaData; import com.sun.star.script.framework.container.ScriptMetaData;
import com.sun.star.uno.XComponentContext;
/** /**
* Class Loader Factory * Class Loader Factory
...@@ -31,12 +30,11 @@ public class ClassLoaderFactory ...@@ -31,12 +30,11 @@ public class ClassLoaderFactory
{ {
private ClassLoaderFactory() {} private ClassLoaderFactory() {}
public static ClassLoader getURLClassLoader( public static ClassLoader getURLClassLoader( ScriptMetaData scriptData )
XComponentContext context, ScriptMetaData scriptData )
throws NoSuitableClassLoaderException, MalformedURLException throws NoSuitableClassLoaderException, MalformedURLException
{ {
ClassLoader parent = scriptData.getClass().getClassLoader(); ClassLoader parent = scriptData.getClass().getClassLoader();
URL[] classPath = scriptData.getClassPath(context); URL[] classPath = scriptData.getClassPath();
LogUtils.DEBUG("Classpath has length " + classPath.length ); LogUtils.DEBUG("Classpath has length " + classPath.length );
for ( int i=0; i < classPath.length; i++ ) for ( int i=0; i < classPath.length; i++ )
{ {
......
...@@ -192,8 +192,7 @@ public class ScriptEditorForBeanShell ...@@ -192,8 +192,7 @@ public class ScriptEditorForBeanShell
try { try {
ClassLoader cl = null; ClassLoader cl = null;
try { try {
cl = ClassLoaderFactory.getURLClassLoader( cl = ClassLoaderFactory.getURLClassLoader( entry );
context.getComponentContext(), entry );
} }
catch (Exception ignore) // TODO re-examine error handling catch (Exception ignore) // TODO re-examine error handling
{ {
......
...@@ -187,8 +187,7 @@ class ScriptImpl implements XScript ...@@ -187,8 +187,7 @@ class ScriptImpl implements XScript
ClassLoader cl = null; ClassLoader cl = null;
URL sourceUrl = null; URL sourceUrl = null;
try { try {
cl = ClassLoaderFactory.getURLClassLoader( cl = ClassLoaderFactory.getURLClassLoader( metaData );
m_xContext, metaData );
sourceUrl = metaData.getSourceURL(); sourceUrl = metaData.getSourceURL();
} }
catch ( java.net.MalformedURLException mfu ) catch ( java.net.MalformedURLException mfu )
......
...@@ -191,7 +191,7 @@ class ScriptImpl implements XScript ...@@ -191,7 +191,7 @@ class ScriptImpl implements XScript
try { try {
LogUtils.DEBUG( "Classloader starting..." ); LogUtils.DEBUG( "Classloader starting..." );
scriptLoader = ClassLoaderFactory.getURLClassLoader( scriptLoader = ClassLoaderFactory.getURLClassLoader(
m_xContext, metaData ); metaData );
LogUtils.DEBUG( "Classloader finished..." ); LogUtils.DEBUG( "Classloader finished..." );
} }
catch (MalformedURLException mfe ) catch (MalformedURLException mfe )
......
...@@ -186,8 +186,7 @@ class ScriptImpl implements XScript ...@@ -186,8 +186,7 @@ class ScriptImpl implements XScript
ClassLoader cl = null; ClassLoader cl = null;
URL sourceUrl = null; URL sourceUrl = null;
try { try {
cl = ClassLoaderFactory.getURLClassLoader( cl = ClassLoaderFactory.getURLClassLoader( metaData );
m_xContext, metaData );
sourceUrl = metaData.getSourceURL(); sourceUrl = metaData.getSourceURL();
} }
catch ( java.net.MalformedURLException mfu ) catch ( java.net.MalformedURLException mfu )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment