Thanks. I'll try it.
And no, I'm not the wildlife photographer.
Andy
On Sat, Jun 7, 2008 at 10:08 AM, Stephan Wunderlich <
[EMAIL PROTECTED]> wrote:
> Hi Andy,
>
> you are not by any chance the wildlife photographer, are you ?
>
> I am trying to use the API from my portal on one Linux server to access
> > OpenOffice running on a separate Linux server. I took all the jars from
> > OpenOffice and made them part my portal but I could only get the API to
> > work
> > after I installed OpenOffice.org on the portal server as well. And I see
> > that when I use the API for the first time on the portal server,
> OpenOffice
> > is started up on the portal server.
> >
> > Do you have to have the complete OpenOffice.org application installed on
> > the
> > API client server and why does it start OpenOffice automatically on the
> > client server?
> >
> > BTW I am using OpenOffice.org 2.4.
> >
> > Thanks for any info on this.
>
>
> if you use something along the lines
>
> xContext = com.sun.star.comp.helper.Bootstrap.bootstrap();
>
> and then get the MultiComponentFactory from this context the API will
> attempt to connect a local running office and in case it can't find one
> start an Office instance.
>
> To connect a running office on another machine you will have to start it on
> that machine with command line parameters like
>
> soffice -accept=socket,host=0,port=<PORT>;urp;
>
> and in your java program on the client you will have to use something like
>
> --------------------------------------
> public static void main(String args[]) {
>
>
> String sConnectionString =
> "uno:socket,host=<HOST>,port=<PORT>;urp;StarOffice.NamingService";
>
> XMultiServiceFactory xMSF = null;
>
> // create connection(s) and get multiservicefactory
> System.out.println( "getting MultiServiceFactory" );
>
> try {
> xMSF = connect( sConnectionString );
> } catch( Exception Ex ) {
> System.out.println( "Couldn't get MSF"+ Ex );
> return;
> }
> System.out.println("Opening an empty Writer document");
> myDoc = openWriter(xMSF);
>
> }
>
> public static XTextDocument openWriter(XMultiServiceFactory oMSF) {
>
>
> //define variables
> XInterface oInterface;
> XDesktop oDesktop;
> XComponentLoader oCLoader;
> XTextDocument oDoc = null;
> XComponent aDoc = null;
>
> try {
>
> oInterface = (XInterface) oMSF.createInstance(
> "com.sun.star.frame.Desktop" );
> oDesktop = ( XDesktop ) UnoRuntime.queryInterface(
> XDesktop.class, oInterface );
> oCLoader = ( XComponentLoader ) UnoRuntime.queryInterface(
> XComponentLoader.class, oDesktop );
> PropertyValue [] szEmptyArgs = new PropertyValue [0];
> String doc = "private:factory/swriter";
> aDoc = oCLoader.loadComponentFromURL(doc, "_blank", 0,
> szEmptyArgs );
> oDoc = (XTextDocument)
> UnoRuntime.queryInterface(XTextDocument.class, aDoc);
>
> } // end of try
>
> catch(Exception e){
>
> System.out.println(" Exception " + e);
>
> } // end of catch
>
>
> return oDoc;
> }//end of openWriter
>
> public static XMultiServiceFactory connect( String connectStr )
> throws com.sun.star.uno.Exception,
> com.sun.star.uno.RuntimeException, Exception {
> // Get component context
> XComponentContext xcomponentcontext =
> com.sun.star.comp.helper.Bootstrap.createInitialComponentContext(
> null );
>
> // initial serviceManager
> XMultiComponentFactory xLocalServiceManager =
> xcomponentcontext.getServiceManager();
>
> // create a connector, so that it can contact the office
> Object xUrlResolver =
> xLocalServiceManager.createInstanceWithContext(
> "com.sun.star.bridge.UnoUrlResolver", xcomponentcontext );
> XUnoUrlResolver urlResolver =
> (XUnoUrlResolver)UnoRuntime.queryInterface(
> XUnoUrlResolver.class, xUrlResolver );
>
> Object rInitialObject = urlResolver.resolve( connectStr );
>
> XNamingService rName = (XNamingService)UnoRuntime.queryInterface(
> XNamingService.class, rInitialObject );
>
> XMultiServiceFactory xMSF = null;
> if( rName != null ) {
> System.err.println( "got the remote naming service !" );
> Object rXsmgr =
> rName.getRegisteredObject("StarOffice.ServiceManager" );
>
> xMSF = (XMultiServiceFactory)
> UnoRuntime.queryInterface( XMultiServiceFactory.class, rXsmgr );
> }
>
> return ( xMSF );
> }
> --------------------------------------
>
> which should open a writer document on your remote machine.
>
> Hope that helps
>
> Regards
>
> Stephan
>