Repeat(Plz have a look on this mail):Problem in calling a method of one java application from another java application using DBus.

Shiv Nath Kumar shivnath27 at gmail.com
Thu Mar 4 01:38:36 PST 2010


Hi all,

I am  newbie in DBus programming using java. I am trying to call a method
"myfun" on an object of class "Demo" in a simple java program
(TestDBus.java) from another java program (TestDBus1.java) using DBus
Connection. I am able to connecct both these applications to DBus but my
code is not able to call method "myfun" and I got some exception. My code
and run time exception are as below :
                                     < *Demo.java *>

package pack;
import org.freedesktop.DBus;
import org.freedesktop.dbus.DBusConnection;
import org.freedesktop.dbus.exceptions.DBusException;
import org.freedesktop.dbus.DBusInterface;

interface TestDBusInt extends DBusInterface{
public void myfun();
}

public class Demo implements TestDBusInt{
    public Demo(){}
    public boolean isRemote(){return false;}
    public void myfun(){
        System.out.println("Within myfun of Demo class within
TestDBus.class");
    }
}


                                      <*TestDBus.java* >

import org.freedesktop.DBus;
import org.freedesktop.dbus.exceptions.DBusException;
import org.freedesktop.dbus.*;
import pack.Demo;

public class TestDBus{

        public static void main(String[] args) throws
org.freedesktop.dbus.exceptions.DBusException {
                DBusConnection bus = null;

               // Getting the Bus Connection.

        System.out.println("Connecting Bus........");

                bus = DBusConnection.getConnection(DBusConnection.SESSION);

                System.out.println("Bus Connection Established.");

        //Getting Unique name of this connection.
        String conName=bus.getUniqueName();
        System.out.println("Unique Name of this Bus Connection =>
"+conName);


        //Requesting Bus Name.
        bus.requestBusName("My.FirstBus");


        //Getting the names owned by this connection.
        System.out.println("Names owned by this Bus Connection are =>");
        String []bnames1=bus.getNames();
        for(int i=0;i<bnames1.length;i++)
            System.out.println(bnames1[i]);


        //exporting the Demo class object on the path “/Test”

      *  DBusInterface db1=new Demo();
        bus.exportObject("/Test", db1);*

        while(true){}

        }
}

                                         <*TestDBus1.java*>

import org.freedesktop.DBus;
import org.freedesktop.dbus.*;
import java.lang.reflect.*;
import org.freedesktop.DBus.Introspectable;
import org.freedesktop.*;
import pack.Demo;


public class TestDBus1 {

        public static void main(String[] args) throws
org.freedesktop.dbus.exceptions.DBusException {
        DBusConnection bus1 = null;
        DBusConnection bus2=null;

                System.out.println("Establishing Bus Connection.......");

                bus1 = DBusConnection.getConnection(DBusConnection.SESSION);

                 System.out.println("Bus Connection Established.");

        //Getting Unique name of this connection.
        String conName1=bus1.getUniqueName();
        System.out.println("Unique Name of this Bus Connection =>
"+conName1);


        // Getting and Displaying Introspection data on Remote Object.
       * Introspectable intro = (Introspectable) bus1.getRemoteObject(
                              "My.FirstBus", "/Test",
                               Introspectable.class);

        String data = intro.Introspect();*




        //System.out.println(db.myfun());


        System.out.println("<--------------------------- Introspection Data
Start ----------------------------------->");
        System.out.println(data);
        System.out.println("<--------------------------- Introspection Data
End   ----------------------------------->");


        //Getting the remote object and calling a method of that object.
  *DBusInterface db =bus1.getPeerRemoteObject("**My.FirstBus","/Test");
        DBusAsyncReply<Boolean> stuffreply =bus1.callMethodAsync(db,"**
myfun");*


         while(true){}

        }
}





<*Console Output on running TestDBus.java*>


Connecting Bus........
Bus Connection Established.
Unique Name of this Bus Connection => :1.39
Names owned by this Bus Connection are =>
:1.39
My.FirstBus



< *Console Output on running TestDBus1.java*>

Establishing Bus Connection.......
Bus Connection Established.
Unique Name of this Bus Connection => :1.40
<--------------------------- Introspection Data Start
----------------------------------->
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection
1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node name="/Test">
 <interface name="pack.TestDBusInt">
  <method name="myfun" >
  </method>
 </interface>
 <interface name="org.freedesktop.DBus.Introspectable">
  <method name="Introspect">
   <arg type="s" direction="out"/>
  </method>
 </interface>
 <interface name="org.freedesktop.DBus.Peer">
  <method name="Ping">
  </method>
 </interface>
</node>
<--------------------------- Introspection Data End
----------------------------------->
Exception in thread "main"
org.freedesktop.dbus.exceptions.DBusExecutionException: $Proxy2.myfun()
        at
org.freedesktop.dbus.AbstractConnection.callMethodAsync(AbstractConnection.java:683)
        at TestDBus1.main(TestDBus1.java:48)
<*End of Console Output*>

I am not sure, if I am missing something obvious here and would  appreciate
any advice on this. Plz, help me if I am going wrong in some way. Plz
suggest me what to do to fix such exception and call the method as I want.
Am i doing anything wrong in specifying and using object path and/or bus
name?
Waiting for your reply.

Thanks in Advance !!

-- 
Regards,
Shiv Nath Kumar



-- 
Regards,
Shiv Nath Kumar
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/dbus/attachments/20100304/496df272/attachment.html>


More information about the dbus mailing list