Hello!

 

I'm working on this problem for a long time now, but I can't get a solution. Maybe someone can help me.

 

I want to add a new QueryDefinition to the DefenitionContainer. It's an example from the OOo Developer Guide (12.2.2 DataSources - Adding and Editing Predefined Queries)

The Method createQuerydefinition() which I'm using is one-to-one from the CodeSamples.java (see code below)

 

The Problem is that the last-but-one command returns null (=> the xStore variable is null).

 

When I look at the XQueryDefinitionsSupplier interface at api.openoffice.org there is nothing about a support of XStorable. But there should be one as the example of the DevelopersGuide and CodeSamples.java explains.

So how else can I retrieve the XStorable interface and then store the query definition?

 

 

Besides:

 

I have read in the api reference that XSingleServiceFactory is deprecated and it is recommended to use the XSingleComponentFactory instead.

So I alter the method (see code below) with this code:

 

XInterface nQuery =null;

         try {

         nQuery = (XInterface) xSingleFac.createInstanceWithContext(xContext);

         } catch (Exception e) {System.out.println(e);}

         XPropertySet xProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,nQuery);

 

Here the NullPointerException is already thrown at the [nQuery= ..........] line.

 

 

 

 

I'm at my wits' end. I have read through the API 100 times but can't find a solution.

 

Greets Stefan

 

 

 

Code:  

 

public static void main(String[] args) {

      

      /********* create service factory ******************************/

      //get the remote office component context

      com.sun.star.uno.XComponentContext xContext = null;

      com.sun.star.lang.XMultiComponentFactory xMCF = null;

      try {

         xContext = com.sun.star.comp.helper.Bootstrap.bootstrap();

         System.out.println("Connected to a running office ...");

         //get the Service Factory

         xMCF =   xContext.getServiceManager();

      } catch (BootstrapException e) { e.printStackTrace(); }

      /***************************************************************/

      

      try {

         createQuerydefinition(xContext, xMCF);

      } catch (Exception e) {

         e.printStackTrace();

      }

      

   }

      public static void createQuerydefinition(com.sun.star.uno.XComponentContext xContext, com.sun.star.lang.XMultiComponentFactory xMCF) throws com.sun.star.uno.Exception

      {

         XNameAccess xNameAccess = (XNameAccess)UnoRuntime.queryInterface(

               XNameAccess.class,

               xMCF.createInstanceWithContext("com.sun.star.sdb.DatabaseContext",

                                              xContext));

         // we use the first datasource

         XQueryDefinitionsSupplier xQuerySup = (XQueryDefinitionsSupplier)

                                    UnoRuntime.queryInterface(XQueryDefinitionsSupplier.class,

                                    xNameAccess.getByName( "Bibliography" ));

         XNameAccess xQDefs = xQuerySup.getQueryDefinitions();

         // create new query definition

         XSingleServiceFactory xSingleFac =   (XSingleServiceFactory) UnoRuntime.queryInterface(XSingleServiceFactory.class, xQDefs);

         

         XPropertySet xProp = (XPropertySet) UnoRuntime.queryInterface(

                  XPropertySet.class,xSingleFac.createInstance());

         

         xProp.setPropertyValue("Command","SELECT * FROM biblio");

         xProp.setPropertyValue("EscapeProcessing",new Boolean(true));

 

         XNameContainer xCont = (XNameContainer) UnoRuntime.queryInterface(XNameContainer.class, xQDefs);

                   try

                   {

                       if ( xCont.hasByName("Query1") )

                           xCont.removeByName("Query1");

                   }

                   catch(com.sun.star.uno.Exception e)

                   {}

         xCont.insertByName("Query1",xProp);

                   XStorable xStore = (XStorable)UnoRuntime.queryInterface(XStorable.class,xQuerySup);

                   System.out.println(xStore);

                   xStore.store();           

      }

 

 

Reply via email to