Difference between revisions of "D-Bus examples"
Jump to navigation
Jump to search
(→Java) |
(→Java: Pruned the Java section to a snippet.) |
||
Line 28: | Line 28: | ||
==Java== |
==Java== |
||
+ | {{Java_D-Bus_snippet}} |
||
− | ''Read the guide to [[Installing_the_Java_D-Bus_bindings|installing the Java D-Bus bindings]] if you don't have the library installed already.'' |
||
+ | We have a guide to [[Installing the Java D-Bus bindings|installing the Java D-Bus bindings]] and a guide to [[Compiling a Java D-Bus program|compiling a small Java application which uses an Apertium D-Bus service]]. |
||
− | Since both D-Bus and Java use statically typed systems, Java needs to have the D-Bus interface descriptions of the objects it will use available at compile time. The 'CreateInterface' program in the Java D-Bus distribution creates Java interfaces by introspecting D-Bus objects. |
||
− | |||
− | We will create a Java interface corresponding to the info.apertium.Info interface and we will store it under the file org/apertium/Info.java. To do this, execute: |
||
− | <pre>CreateInterface org.apertium.info / > org/apertium/Info.java</pre> |
||
− | (and remember to use <code>dbus-launch --exit-with-session</code> if this does not work). |
||
− | |||
− | The contents out the newly created file should look something like: |
||
− | <pre> |
||
− | /* File: org/apertium/Info.java */ |
||
− | package org.apertium; |
||
− | import java.util.List; |
||
− | import org.freedesktop.dbus.DBusInterface; |
||
− | public interface Info extends DBusInterface |
||
− | { |
||
− | |||
− | public String directory(); |
||
− | public List<List<String>> get_pipeline(String mode); |
||
− | public List<String> get_filters(String _type); |
||
− | public List<String> modes(); |
||
− | public String mode_directory(); |
||
− | |||
− | } |
||
− | </pre> |
||
− | |||
− | The next step is to create our minimal Java program. Create a file called <code>TestDBus</code> with the following contents: |
||
− | <pre> |
||
− | import org.freedesktop.DBus; |
||
− | import org.freedesktop.dbus.DBusConnection; |
||
− | import org.freedesktop.dbus.exceptions.DBusException; |
||
− | |||
− | import org.apertium.Info; // The interface we use to access org.apertium.info/ |
||
− | |||
− | class TestDBus { |
||
− | |||
− | public static void main(String[] args) throws org.freedesktop.dbus.exceptions.DBusException { |
||
− | DBusConnection bus = null; |
||
− | Info info = null; |
||
− | |||
− | bus = DBusConnection.getConnection(DBusConnection.SESSION); |
||
− | info = bus.getRemoteObject("org.apertium.info", "/", Info.class); |
||
− | |||
− | for (String s : info.modes()) { |
||
− | System.out.println(s); |
||
− | } |
||
− | |||
− | bus.disconnect(); |
||
− | } |
||
− | } |
||
− | </pre> |
||
− | |||
− | To compile this program, we need to include the current path on the class path as well as the jar files needed by the Java D-Bus binding. To compile, execute (you should modify the directories to suit your installation): |
||
− | <pre> |
||
− | javac -cp .:/usr/local/share/java/dbus.jar:/usr/local/share/java/unix.jar:\ |
||
− | /usr/local/share/java/debug-disable.jar TestDBus.java |
||
− | </pre> |
||
− | |||
− | To run the program, you need to specify the class paths specified above, as well as the JNI code (which installs to <code>/usr/local/lib/jni</code> by default (if you are using TCP instead of UNIX domain sockets for transport, then this won't be needed). You can run the program using: |
||
− | <pre> |
||
− | java -cp .:/usr/local/share/java/dbus.jar:\ |
||
− | /usr/local/share/java/unix.jar:/usr/local/share/java/debug-disable.jar\ |
||
− | -Djava.library.path=/usr/local/lib/jni TestDBus |
||
− | </pre> |
||
− | (and if it does not work, prefix the command with <code>dbus-launch --exit-with-session</code>). |
||
− | |||
− | Of course, if you are writing an application, you would hide all of these flags in a wrapper script. |
||
[[Category:Development]] |
[[Category:Development]] |
Revision as of 13:00, 19 December 2007
Here are some code snippets for various programming languages (complete with completely unnecessary comments) showing how you can interface with Apertium by means of D-Bus. You'll need to install the D-Bus service for Apertium.
Python
#!/usr/bin/python # coding=utf-8 # -*- encoding: utf-8 -*- import dbus, sys, codecs; sys.stdin = codecs.getwriter('utf-8')(sys.stdin); sys.stdout = codecs.getwriter('utf-8')(sys.stdout); mode_name = 'en-af'; # The name of the installed mode dbus_mode_name = '/' + '_'.join(pair_name.split('-')); # Some mandatory mangling bus = dbus.SessionBus(); # Create a new session bus translator = dbus.Interface(bus.get_object('org.apertium.mode', dbus_mode_name), 'org.apertium.Mode'); # Get the translator input = sys.stdin.read(); # Read the data print translator.translate({}, input); # Print the translation
Java
import org.freedesktop.DBus; import org.freedesktop.dbus.DBusConnection; import org.freedesktop.dbus.exceptions.DBusException; import org.apertium.Info; // The interface we use to access org.apertium.info/ class TestDBus { public static void main(String[] args) throws org.freedesktop.dbus.exceptions.DBusException { DBusConnection bus = null; Info info = null; bus = DBusConnection.getConnection(DBusConnection.SESSION); info = bus.getRemoteObject("org.apertium.info", "/", Info.class); for (String s : info.modes()) { System.out.println(s); } bus.disconnect(); } }
We have a guide to installing the Java D-Bus bindings and a guide to compiling a small Java application which uses an Apertium D-Bus service.