[omniORB] How to pass sequence<any> as parameter from Python
Joel Wagner
Joel.Wagner at veritas.com
Mon Apr 12 11:25:21 BST 2004
I'd read the spec and trolled the omniorb mail archive. Both were very
useful but I'm still stuck on this issue.
Joel
-----Original Message-----
From: Alex Tingle [mailto:alex.omniorb at firetree.net]
Sent: Monday, April 12, 2004 10:20 AM
To: Joel Wagner
Cc: omniorb-list at omniorb-support.com
Subject: Re: [omniORB] How to pass sequence<any> as parameter from Python
On Mon, 12 Apr 2004 09:44:00 -0400
Joel Wagner <Joel.Wagner at veritas.com> wrote:
> I have a Python client that I'm trying to use to pass a
> 'sequence<any>' to a server.
Here's a link to the Python language mapping spec. I find it quite
readable:
http://www.omg.org/technology/documents/formal/python.htm
regards,
-Alex Tingle
_____________________________________________
From: Joel Wagner
Sent: Monday, April 12, 2004 9:44 AM
To: 'omniorb-list at omniorb-support.com'
Subject: How to pass sequence<any> as parameter from Python
I have a Python client that I'm trying to use to pass a 'sequence<any>' to a
server.
Here is the IDL:
module V {
typedef sequence<any> ANY_SEQ;
struct Rec {
long a;
long b;
long c;
};
interface X {
// long Exec( in long Cmd, inout sequence<any> Args ); // causes IDL
compilation error
// $ omniidl -bomniidl_be/python xxx.idl
// xxx.idl:10: Syntax error in operation parameters
// omniidl: 1 error.
long Exec( in long Cmd, inout ANY_SEQ Args );
};
};
Here is the client code:
import sys
import omniORB
from omniORB import CORBA
from omniORB import any
import V
orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
ior = sys.argv[1]
obj = orb.string_to_object(ior)
server = obj._narrow(V.X)
rec = V.Rec
rec.a = 0
rec.b = 1
rec.c = 2
if sys.argv[2] == '1':
print '--- try #1'
xany = any.to_any(rec)
resp = server.Exec(1, [xany])
print 'resp', resp
if sys.argv[2] == '2':
print '--- try #2'
tc = CORBA.TypeCode(CORBA.id(V.ANY_SEQ))
xany = CORBA.Any(tc, [rec])
resp = server.Exec(1, xany)
print 'resp', resp
First question is why does the following IDL cause a compilation error, must
I use the ANY_SEQ typedef?
long Exec( in long Cmd, inout sequence<any> Args ); // causes IDL
compilation error
Second question is what is the proper way to pass a sequence<any> as a
parameter from Python? Both try #1 and #2 produce omniORB.CORBA.BAD_PARAM:
Minor: BAD_PARAM_WrongPythonType exceptions.
Thanks in advance for any assistance,
Joel
More information about the omniORB-list
mailing list