OMG IDL |
Java |
interface MyInterface {
attribute short anAttribute; } |
Public interface MyInterface extends org.omg.CORBA.Object
{
Public void anAttribute(short anAttribute); Public short anAttribute(); } |
Eine Sequence wird zu einem Java Array mit dem gleichen Namen transformiert.
OMG IDL |
Java |
interface seqExample {
//unbegrenzte Sequenz von typedef sequence<Count> MyUnboundedSeq;
void seqtest(in MyUnBoundedSeq val1, out MyUnBoundedSeq val2); }; |
public interface seqExample extends org.omg.CORBA.Object
{
public void seqtest( seq.Count[] val1, seq.seqExamplePackage.MyUnboundedSeqHolder val2 ); } |
SEQ\SEQ\_example_seqExample.java
SEQ\SEQ\_seqExampleImplBase.java
SEQ\SEQ\seqExampleOperations.java
SEQ\SEQ\seqExamplePackage\MyBoundedSeqHelper.java
SEQ\SEQ\seqExamplePackage\MyBoundedSeqHolder.java
SEQ\SEQ\seqExamplePackage\MyUnboundedSeqHelper.java
SEQ\SEQ\seqExamplePackage\MyUnboundedSeqHolder.java
CORBA Arrays werden auf die gleiche Weise wie eine begrenzte Sequence transformiert. In beiden Fällen findet eine Transformation in einen gleichnamigen Java Array statt.
OMG IDL |
Java |
Interface arrayExample
{
Const long ArrayBound = 76; Typedef Count MyArray[ArrayBound]; Void arrayTest(in MyArray value); }; |
Public interface arrayExample
extends org.omg.CORBA.Object {
Final public static int ArrayBound = (int) 76; Public void arrayTest(Count[] value); } |
Es muß noch angemerkt werden, daß der IDL-to-Java Compiler für jeden definierten Array Holder und Helper Klassen generiert.
OMG IDL |
Java |
struct MyStruct {
short age; string name; }; |
package Struct;
final public class MyStruct { public short age; public java.lang.String name; public MyStruct() { } public MyStruct( short age, java.lang.String name ) { this.age = age; this.name = name; } public java.lang.String toString() { org.omg.CORBA.Any any = org.omg.CORBA.ORB.init().create_any(); Struct.MyStructHelper.insert(any, this); return any.toString(); } } |
Ein ausführlicheres Beispiel:
OMG IDL |
Java |
enum MyEnum {
eins, zwei, drei }; |
Final public class MyEnum {
final public static int _eins = 0; final public static int _zwei = 1; final public static int _drei = 2; final public static MyEnum eins = new MyEnum(_eins); final public static MyEnum zwei = new MyEnum(_zwei); final public static MyEnum drei = new MyEnum(_drei); private int __value; private MyEnum(int value) { this.__value = value; } public int value() { return __value; } public static MyEnum from_int(int $value) { switch($value) { case _eins: return eins; case _zwei: return zwei; case _drei: return drei; default: throw new org.omg.CORBA.BAD_PARAM("Enum out of range: [0.." + (3 - 1) + "]: " + $value); } } public java.lang.String toString() { org.omg.CORBA.Any any = org.omg.CORBA.ORB.init().create_any(); MyEnumHelper.insert(any, this); return any.toString(); } } |
Eine Union wird in eine Java Klasse, die den Namen des Unions besitzt transformiert. Für jedes Element existiert jeweilse eine Methode zum Setzen und Herauslesen des Wertes. Diese Methoden sind nach den entsprechenden Elementen benannt und unterscheiden sich jeweils lediglich durch ihre Signatur voneinander. Über die discriminator Methode kann abgefragt werden, welches Element gerade gehalten wird. Zusätzlich existiert noch eine toString Methode.
OMG IDL |
Java |
union MyUnion switch (short)
{
case 1: short s; case 2: long l; default: long long ll; }; |
final public class MyUnion
{
private java.lang.Object _object; private short _disc; public MyUnion() { } public short discriminator() { return _disc; } public short s() { if( _disc != (short) 1 && true ) { throw new org.omg.CORBA.BAD_OPERATION("s"); } return (short) ((java.lang.Integer) _object).intValue(); } public int l() { if( _disc != (short) 2 && true ) { throw new org.omg.CORBA.BAD_OPERATION("l"); } return ((java.lang.Integer) _object).intValue(); } public long ll() { if( _disc == (short) 1 || _disc == (short) 2 || false ) { throw new org.omg.CORBA.BAD_OPERATION("ll"); } return ((java.lang.Long) _object).longValue(); } public void s(short value) { _disc = (short) 1; _object = new java.lang.Integer(value); } public void l(int value) { _disc = (short) 2; _object = new java.lang.Integer(value); } public void ll(short disc, long value) { _disc = disc; _object = new java.lang.Long(value); } public java.lang.String toString() { org.omg.CORBA.Any any = org.omg.CORBA.ORB.init().create_any(); MyUnionHelper.insert(any, this); return any.toString(); } } |
OMG IDL |
Java |
struct Adress {
string first_name; string last_name; string street; short number; string city; short postcode; };
typedef Adress MyAdress; |
Final public class Adress {
public java.lang.String first_name; public java.lang.String last_name; public java.lang.String street; public short number; public java.lang.String city; public short postcode; public Adress() { } public Adress( java.lang.String first_name, java.lang.String last_name, java.lang.String street, short number, java.lang.String city, short postcode ) { this.first_name = first_name; this.last_name = last_name; this.street = street; this.number = number; this.city = city; this.postcode = postcode; } public java.lang.String toString() { org.omg.CORBA.Any any = org.omg.CORBA.ORB.init().create_any(); AdressHelper.insert(any, this); return any.toString(); } } |
ORBs sind die Fabriken für Any Objekte. Sie werden von ihnen wie folgt erzeugt:
Org.omg.CORBA.Any a = orb.create_any();
Eine Variable vom Typ short läßt sich auf folgende Art in ein Any einfügen:
Short s = 4;
a.insert_short(s);
An den Wert, den das Any beinhaltet, gelangt der Entwickler wie folgt:
Short y = a.extract_short();
Ein Überblick über sämtliche extract_XXX Methoden:
abstract public short extract_short()
abstract public int extract_long()
abstract public long extract_longlong()
abstract public short extract_ushort()
abstract public int extract_ulong()
abstract public long extract_ulonglong()
abstract public float extract_float()
abstract public double extract_double()
abstract public boolean extract_boolean()
abstract public char extract_char()
abstract public char extract_wchar()
abstract public byte extract_octet()
abstract public org.omg.CORBA.Any extract_any()
abstract public org.omg.CORBA.Object extract_Object()
abstract public String extract_string()
abstract public String extract_wstring()
abstract public org.omg.CORBA.TypeCode extract_TypeCode()
abstract public org.omg.CORBA.Principal extract_Principal()
Ein Überblick über sämtliche insert_XXX Methoden:
abstract public void insert_short(short s);
abstract public void insert_long(int i);
abstract public void insert_longlong(long l);
abstract public void insert_ushort(short s);
abstract public void insert_ulong(int i);
abstract public void insert_ulonglong(long l);
abstract public void insert_float(float f);
abstract public void insert_double(double d);
abstract public void insert_boolean(boolean b);
abstract public void insert_char(char c)
abstract public void insert_wchar(char c);
abstract public void insert_octet(byte b);
abstract public void insert_any(org.omg.CORBA.Any a);
abstract public voidinsert_Object(org.omg.CORBA.Object o);
abstract public voidinsert_Object(org.omg.CORBA.Object o,
org.omg.CORBA.TypeCode t)
abstract public voidinsert_string(String s)
abstract public void insert_wstring(String s)
abstract public voidinsert_TypeCode(org.omg.CORBA.TypeCode t);
abstract public void insert_Principal(
org.omg.CORBA.Principal p);
abstract public void insert_Streamable(
org.omg.CORBA.portable.Streamable s);
Außer den extract_XXX und insert_XXX Methoden existieren zusätzlich die folgenden Methoden:
Methode |
Erläuterung |
Public abstract InputStream create_input_stream() | Diese Methode erzeugt einen Inputstream, der den Wert des Any enthält. |
Public abstract OutputStream create_output_stream() | Diese Methode erzeugt einen leeren Outputstream. |
Abstract public boolean equal(Any rhs) | Diese Methode liefert true zurück, wenn der Wert der im Any enthalten ist der gleiche ist wie ihn das Argument Any.rhs enthält. Ist dies nicht der Fall, so wird false zurückgegeben. |
Abstract public TypeCode type() | Diese Methode gibt den TypeCode, der den Typ der im Any gehalten wird, beschreibt zurück. |
Abstract public void type(org.omg.CORBA.TypeCode type) | Diese Methode setzt den Typ des im Any gehaltenen Wertes. |
Public abstract void write_value(OutputStream output) | Diese Methode schreibt den Wert des Anys in einen OutputStream. |