[omniORB] Re: value type: Marshall error

Duncan Grisby duncan at grisby.org
Fri Sep 30 11:58:25 BST 2005


On Friday 30 September, =?Windows-1251?Q?=C0=ED=E4=F0=E5=E9_=CF=F3=F7=E8=ED?= wrote:

> For example for IDL:
>    typedef any QueryAttributeValue;
> 
>    enum LogicOperation {
>        LO_OR
>        , LO_AND
>        , LO_NOT
>    };
> 
>    valuetype QueryDictData {
>        public LogicOperation operation;
> 
>    };
> 
>    interface SearchManager {
>      long search (in QueryAttributeValue search_query);
>    };
[...]

I'll explain the (partial) TypeCode...

> 49 44 4c 3a 56 61 6c 75  65 54 65 73 74 2f 51 75   IDL:ValueTest/Qu
> 65 72 79 44 69 63 74 44  61 74 61 3a 31 2e 30 00   eryDictData:1.0.

This is the repository id. (You cut off the length field.)

> 0e 00 00 00 51 75 65 72  79 44 69 63 74 44 61 74   ....QueryDictDat
> 61 00

This is the valuetype name, with terminating null

>       00 00 00 00 00 00  01 00 00 00 0a 00 00 00   a...............

Next comes the ValueModifier. It's a short, so the alignment is
right without needing any padding. 00 00 is VM_NONE, meaning no value
modifier.

Next comes the concrete base TypeCode. The kind is 00 00 00 00,
i.e. tk_null -- no concrete base.

Next is count of members, 01 00 00 00 -- i.e. one member.

Next is start of string for member name.

> 6f 70 65 72 61 74 69 6f  6e 00 00 00 11 00 00 00   operation.......

Member name, then pad, then tk_enum (and after that will be the rest of
the enum TyepCode).

> but tao client generates:
> 
> -->message part skipped
> 
> 49 44 4c 3a 56 61 6c 75  65 54 65 73 74 2f 51 75   IDL:ValueTest/Qu
> 65 72 79 44 69 63 74 44  61 74 61 3a 31 2e 30 00   eryDictData:1.0.
> 0e 00 00 00 51 75 65 72  79 44 69 63 74 44 61 74   ....QueryDictDat
> 61 00 00 00 00 00 00 00  00 00 00 00 01 00 00 00   a...............
        ^^^^^ ^^^^^^^^^^^

My guess is that TAO is treating the value modifier as a long, not a
short. That means that the bits I've marked are first some padding, and
then the modifier as a long.

> Is this Tao or omni problem?

I think it's a TAO problem. Have you asked the TAO developers?

Cheers,

Duncan.

-- 
 -- Duncan Grisby         --
  -- duncan at grisby.org     --
   -- http://www.grisby.org --



More information about the omniORB-list mailing list