Hi Jürgen, thanks for your answer. According to my version of the developer's guide there is no need for a function named _getComponentFactory. Maybe I misunderstood something here... For a better understanding I'm posting my 3 classes. As you can see there is no "real" language implemented. That's because I just want to try if I can get that thing working. --------------------------- import com.sun.star.uno.Type; import com.sun.star.uno.Any; import com.sun.star.lang.IllegalArgumentException; import com.sun.star.lang.WrappedTargetException; import com.sun.star.reflection.InvocationTargetException; import com.sun.star.script.CannotConvertException;
import com.sun.star.script.provider.XScriptContext; import com.sun.star.script.provider.XScript; import com.sun.star.script.provider.ScriptFrameworkErrorException; import com.sun.star.script.provider.ScriptFrameworkErrorType; import com.sun.star.script.framework.provider.ClassLoaderFactory; import com.sun.star.script.framework.container.ScriptMetaData; public class JavaScript implements XScript { private XScriptContext xScriptContext; private ScriptMetaData scriptMetaData; public JavaScript(XScriptContext xsc, ScriptMetaData smd) { this.xScriptContext = xsc; this.scriptMetaData = smd; } public Object invoke(Object[] aParams, short[][] aOutParamIndex, Object[][] aOutParam) throws com.sun.star.script.provider.ScriptFrameworkErrorException, com.sun.star.reflection.InvocationTargetException { aOutParamIndex[0] = new short[0]; aOutParam[0] = new Object[0]; ClassLoader cl = null; try { cl = ClassLoaderFactory.getURLClassLoader(scriptMetaData); } catch (java.lang.Exception e) { throw new ScriptFrameworkErrorException(e.getMessage(), null, scriptMetaData.getLanguageName(), scriptMetaData.getLanguage(), ScriptFrameworkErrorType.UNKNOWN); } scriptMetaData.loadSource(); String source = scriptMetaData.getSource(); Any result = null; if (result == null) { return new Any(new Type(), null); } else { return result; } } } --------------------------- import com.sun.star.script.framework.provider.ScriptEditor; import com.sun.star.script.provider.XScriptContext; import com.sun.star.script.framework.container.ScriptMetaData; import javax.swing.*; public class ScriptEditorForJava implements ScriptEditor { public Object execute() throws Exception { return null; } public void indicateErrorLine(int lineNum) { return; } public void edit(XScriptContext context, ScriptMetaData entry) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); JTextArea ts = new JTextArea(); entry.loadSource(); ts.setText(entry.getSource()); frame.getContentPane().add(ts); frame.setSize(400, 400); frame.show(); } public String getTemplate() { return "the code for Java script"; } public String getExtension() { return "y1"; } } --------------------------- import com.sun.star.uno.XComponentContext; import com.sun.star.lang.XMultiServiceFactory; import com.sun.star.lang.XSingleServiceFactory; import com.sun.star.registry.XRegistryKey; import com.sun.star.comp.loader.FactoryHelper; import com.sun.star.lang.XServiceInfo; import com.sun.star.lang.XInitialization; import com.sun.star.script.provider.ScriptFrameworkErrorException; import com.sun.star.script.provider.XScriptContext; import com.sun.star.script.provider.XScript; import com.sun.star.script.framework.provider.ScriptProvider; import com.sun.star.script.framework.provider.ScriptEditor; import com.sun.star.script.framework.container.ScriptMetaData; public class ScriptProviderForJava { public static class _ScriptProviderForJava extends ScriptProvider { public _ScriptProviderForJava(XComponentContext ctx) { super(ctx, "Java"); } public XScript getScript(String scriptURI) throws com.sun.star.uno.RuntimeException, ScriptFrameworkErrorException { JavaScript script = null; try { ScriptMetaData scriptMetaData = getScriptData(scriptURI); XScriptContext xScriptContext = getScriptingContext(); script = new JavaScript(xScriptContext, scriptMetaData); } catch (com.sun.star.uno.Exception e) { System.err.println("Failed to get script: " + scriptURI); } return script; } public boolean hasScriptEditor() { return true; } public ScriptEditor getScriptEditor() { return new ScriptEditorForJava(); } } public static XSingleServiceFactory _getServiceFactory(String implName, XMultiServiceFactory multiFactory, XRegistryKey regKey) { XSingleServiceFactory xSingleServiceFactory = null; if(implName.equals(ScriptProviderForJava._ScriptProviderForJava.class.getName())) { xSingleServiceFactory = FactoryHelper.getServiceFactory(ScriptProviderForJava._ScriptProviderForJava.class, "com.sun.star.script.provider.ScriptProviderForJava", multiFactory, regKey); } return xSingleServiceFactory; } public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) { String impl = "ScriptProviderForJava$_ScriptProvderForJava"; String service1 = "com.sun.star.script.provider.ScriptProvider"; String service2 = "com.sun.star.script.provider.LanguageScriptProvider"; String service3= "com.sun.star.script.provider.JavaScriptProvider"; FactoryHelper.writeRegistryServiceInfo(impl, service1, regKey); FactoryHelper.writeRegistryServiceInfo(impl, service2, regKey); FactoryHelper.writeRegistryServiceInfo(impl, service3, regKey); return true; } } Greeting,- Rainer Hahnekamp Jürgen Schmidt: > Hi Rainer, > > Rainer Hahnekamp wrote: > > Hello, > > > > I've tried to write my own ScriptProvider component in Java according to > > the Developer's Guide instructions in chapter 18.5. I managed to compile > > all four classes and packed them into a jar file called > > ScriptProviderForJava.jar. Further more I appended the subdirectory > > META-INF which has just one file called MANIFEST.MF with following two > > rows: > > Built-By: Rainer Hahnekamp > > RegistrationClassName: ScriptProviderForJava > > Then I packed this jar-file into a zip file named > > ScriptProviderForJava.uno.pkg including a the subfolder META-INF and the > > file manifest.xml with following content: > > <manifest:file-entry > > manifest:media-type="application/vnd.sun.star.uno-component;type=Java" > > manifest:full-path="ScriptProviderForJava.jar"/> > > Finally I added the package via > > unopkg add ScriptProviderForJava.uno.pkg > > Unfortunately it did not succeed. Still in OpenOffice.org under > > Tools->Package Manager... it is listed as disabled. When I want to > > enable it I get the error message: > > Enable: Cannot determine registration class. > > If the registration class is the entry in MANIFEST.MF OpenOffice should > > be able to find it, since there exists a class called > > ScriptProviderForJava. > > > > Are you sure that ScriptProviderForJava is the correct name of your > implemention class and that this class does implement the necessary > component helper funtions (__getComponentFactory, > __writeRegistryServiceInfo)? If your file is defined in a package you > have to use the full qualified class name. All dependencies to external > Java files have to be resolved. Either by extending the office class > path manually or or you put all dependecies in the package as well. A > further solution is to provide an own classlaoder for external classes > and load them explicitly from your package. > > Juergen --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]