Remoting.Corba Mapping

Remoting.CorbaのIDLとC#のmappingのまとめ。 内容はRemoting.Corba WikiTypeMappingsの抜粋である。

Primitive Type

Remoting.CorbaのCORBA typeとC# typeのmappingは以下の通り

CORBA type C#
void System.Void
octet System.Byte
short System,Int16
unsigned short System.UInt16
long System.Int32
unsigned long System.UInt32
longlong System.Int64
unsigned longlong System.UInt64
float System.Single
double System.Double
long double -
boolean System.Boolean
char System.Byte
string System.String
wchar -
wstring -

enum

デフォルトではSystem.Int32で0からナンバリングされる。

struct

構造体は、publicのメンバ変数を持つクラスにmappingされる。

//IDL
struct Customer
{
    string name;
    string address;
    boolean hasGoodCredit;
};

//C#
[CorbaTypeId("IDL:Customer:1.0")]
[Serializable]
public class Customer{
    public System.String name;
    public System.String address;
    public System.Boolean hasGoodCredit;
}

配列としてのSequence

sequenceを配列としてmapすることができる。

// IDL
....
typedef sequence<octet> OctetSeq;
....
OctetSeq string_to_octets(in string input);



// C#
byte[] string_to_octets(System.String input);

Array

配列はクラスにmappingされる。

// IDL
typedef long LongTriplet[3];



// C#
[Serializable]
public class LongTriplet{
    public System.Int32 element0;
    public System.Int32 element1;
    public System.Int32 element2;
}

Any

anyは、Remoting.Corba.Any型にmappingされる。Remoting.Corba version 1.3では、以下の型がサポートされている。

Method

Methodは、同じ名前で戻り値および引数が同じメンバ関数にmappingされる。

// IDL
interface ServerObject
{
    string int_to_string(in int i);
};



// C#
public class ServerObject
{
    public System.String int_to_string(System.Int16 i);
}

Attribute

Attributeは、_set_hogehoge、_get_hogehogeという関数にmappingされる。

// IDL
interface ServerObject{
    string name;
};



// C#
public class ServerObject{
    System.tring _get_name();
    void _set_name(System.String value);
}

Object Reference Mapping

Proxy Mapping

// IDL
interface ServerObject{
    string get_data();
};

interface ServerObjectFactory{
    ServerObject create();
    void destroy(ServerObject obj);
};



// C#
public class ServerObject : ICorbaObject
{
    public System.String get_data();
}


public class ServerObjectFactory : ICorbaObject
{
    ServerObject create();
    void destroy(ServerObject obj);
}

IOR Mapping

// IDL
    // CORBA IDL
    interface ServerObject
    {
        string return_data();
    };
    interface ServerObjectFactory
    {
        ServerObject create();
        void destroy(in ServerObject);
    };




   // C#
    interface ServerObject: ICorbaObject
    {
        string return_data();
    }
    interface ServerObjectFactory: ICorbaObject
    {
        Ior create();
        void destroy(Ior serverObjectIor);
    }


  Ior returnedObjectIor = factory.create();
    ServerObject returnedObject = (ServerObject) Activator.GetObject(
        typeof(ServerObject), returnedObjectIor.ToString();
    string data = returnedObject.get_data();
    factory.destroy(returnedObjectIor);

User Exception

Remoting.Corba version 1.2以降では、次のようにmappingされる。

// CORBA IDL
interface FooObject
{
    exception BadParameter
    {
        string param_name;
    };

    exception InternalError
    {
        string reason;
        long error_code;
    };

    string process_data(in string data)
        raises(BadParameter, InternalError);
};



// C#

[CorbaTypeId("IDL:FooObject/BadParameter:1.0")]
class FooObject_BadParameter: CorbaUserException
{
    public string param_name;

    public FooObject_BadParameter(string param_name)

        : base(typeof(FooObject_BadParameter))
    {
        this.param_name = param_name;
    }
}

[CorbaTypeId("IDL:FooObject/InternalError:1.0")]
class FooObject_InternalError: CorbaUserException
{
    public string reason;
    public Int32 error_code;

    public FooObject_InternalError(string reason, Int32 error_code)
        : base(typeof(FooObject_InternalError))
    {
        this.reason = reason;
        this.error_code = error_code;
    }
}

[CorbaTypeId("IDL:FooObject:1.0")]
interface FooObject: ICorbaObject
{
    [CorbaRaises(typeof(FooObject_BadParameter), typeof(FooObject_InternalError))]
    string process_data(string data);
}

// example usage
FooObject foo = (FooObject) Activator.GetObject(typeof(FooObject), "corbaloc::server:12345/Foo");
try
{
    string result = foo.process_data("This is my data");
    Console.WriteLine("Result is " + result);
}
catch (FooObject_BadParameter bp)
{
    Console.Error.WriteLine("BadParameter: " + bp.param_name);
}
catch (FooObject_InternalError ie)
{
    Console.Error.WriteLine("InternalError: " + ie.reason + "; error code = " + ie.error_code);
}
Valid HTML 4.01 Strict