1 /*
   2  * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 // IDL
  27 // File: DynamicAny.idl
  28 
  29 #ifndef _DYNAMIC_ANY_IDL_
  30 #define _DYNAMIC_ANY_IDL_
  31 
  32 #pragma prefix "omg.org"
  33 #include <orb.idl>
  34 
  35 /**
  36 * An any can be passed to a program that doesn't have any static information for the
  37 type of the any (code generated for the type by an IDL compiler has not been
  38 compiled with the object implementation). As a result, the object receiving the any
  39 does not have a portable method of using it.
  40 <P>DynAnys enable traversal of the data value associated with an any at
  41 runtime and extraction of the primitive constituents of the data value. This is especially
  42 helpful for writing powerful generic servers (bridges, event channels supporting
  43 filtering).
  44 <P>Similarly, this facility enables the construction of an any at runtime, without having
  45 static knowledge of its type. This is especially helpful for writing generic clients
  46 (bridges, browsers, debuggers, user interface tools).
  47 */
  48 module DynamicAny {
  49     /**
  50     * Any values can be dynamically interpreted (traversed) and constructed through DynAny objects.
  51     * A DynAny object is associated with a data value which corresponds to a copy of the value
  52     * inserted into an any.
  53     * <P>A DynAny object may be viewed as an ordered collection of component DynAnys.
  54     * For DynAnys representing a basic type, such as long, or a type without components,
  55     * such as an empty exception, the ordered collection of components is empty.
  56     * Each DynAny object maintains the notion of a current position into its collection
  57     * of component DynAnys. The current position is identified by an index value that runs
  58     * from 0 to n-1, where n is the number of components.
  59     * The special index value -1 indicates a current position that points nowhere.
  60     * For values that cannot have a current position (such as an empty exception),
  61     * the index value is fixed at -1.
  62     * If a DynAny is initialized with a value that has components, the index is initialized to 0.
  63     * After creation of an uninitialized DynAny (that is, a DynAny that has no value but a TypeCode
  64     * that permits components), the current position depends on the type of value represented by
  65     * the DynAny. (The current position is set to 0 or -1, depending on whether the new DynAny
  66     * gets default values for its components.)
  67     * <P>The iteration operations rewind, seek, and next can be used to change the current position
  68     * and the current_component operation returns the component at the current position.
  69     * The component_count operation returns the number of components of a DynAny.
  70     * Collectively, these operations enable iteration over the components of a DynAny, for example,
  71     * to (recursively) examine its contents.
  72     * <P>A constructed DynAny object is a DynAny object associated with a constructed type.
  73     * There is a different interface, inheriting from the DynAny interface, associated with
  74     * each kind of constructed type in IDL (fixed, enum, struct, sequence, union, array,
  75     * exception, and value type).
  76     * <P>A constructed DynAny object exports operations that enable the creation of new DynAny objects,
  77     * each of them associated with a component of the constructed data value.
  78     * As an example, a DynStruct is associated with a struct value. This means that the DynStruct
  79     * may be seen as owning an ordered collection of components, one for each structure member.
  80     * The DynStruct object exports operations that enable the creation of new DynAny objects,
  81     * each of them associated with a member of the struct.
  82     * <P>If a DynAny object has been obtained from another (constructed) DynAny object,
  83     * such as a DynAny representing a structure member that was created from a DynStruct,
  84     * the member DynAny is logically contained in the DynStruct.
  85     * Calling an insert or get operation leaves the current position unchanged.
  86     * Destroying a top-level DynAny object (one that was not obtained as a component of another DynAny)
  87     * also destroys any component DynAny objects obtained from it.
  88     * Destroying a non-top level DynAny object does nothing.
  89     * Invoking operations on a destroyed top-level DynAny or any of its descendants raises OBJECT_NOT_EXIST.
  90     * If the programmer wants to destroy a DynAny object but still wants to manipulate some component
  91     * of the data value associated with it, then he or she should first create a DynAny for the component
  92     * and, after that, make a copy of the created DynAny object.
  93     * <P>The behavior of DynAny objects has been defined in order to enable efficient implementations
  94     * in terms of allocated memory space and speed of access. DynAny objects are intended to be used
  95     * for traversing values extracted from anys or constructing values of anys at runtime.
  96     * Their use for other purposes is not recommended.
  97     * <P>Insert and get operations are necessary to handle basic DynAny objects
  98     * but are also helpful to handle constructed DynAny objects.
  99     * Inserting a basic data type value into a constructed DynAny object
 100     * implies initializing the current component of the constructed data value
 101     * associated with the DynAny object. For example, invoking insert_boolean on a
 102     * DynStruct implies inserting a boolean data value at the current position
 103     * of the associated struct data value.
 104     * A type is consistent for inserting or extracting a value if its TypeCode is equivalent to
 105     * the TypeCode contained in the DynAny or, if the DynAny has components, is equivalent to the TypeCode
 106     * of the DynAny at the current position.
 107     * <P>DynAny and DynAnyFactory objects are intended to be local to the process in which they are
 108     * created and used. This means that references to DynAny and DynAnyFactory objects cannot be exported
 109     * to other processes, or externalized with ORB.object_to_string().
 110     * If any attempt is made to do so, the offending operation will raise a MARSHAL system exception.
 111     * Since their interfaces are specified in IDL, DynAny objects export operations defined in the standard
 112     * org.omg.CORBA.Object interface. However, any attempt to invoke operations exported through the Object
 113     * interface may raise the standard NO_IMPLEMENT exception.
 114     * An attempt to use a DynAny object with the DII may raise the NO_IMPLEMENT exception.
 115     */
 116     interface DynAny {
 117         #pragma sun_localservant DynAny ""
 118         exception InvalidValue {};
 119         exception TypeMismatch {};
 120 
 121         /**
 122         * Returns the TypeCode associated with this DynAny object.
 123         * A DynAny object is created with a TypeCode value assigned to it.
 124         * This TypeCode value determines the type of the value handled through the DynAny object.
 125         * Note that the TypeCode associated with a DynAny object is initialized at the time the
 126         * DynAny is created and cannot be changed during lifetime of the DynAny object.
 127         *
 128         * @return The TypeCode associated with this DynAny object
 129         */
 130         CORBA::TypeCode type();
 131 
 132         /**
 133         * Initializes the value associated with a DynAny object with the value
 134         * associated with another DynAny object.
 135         * The current position of the target DynAny is set to zero for values that have components
 136         * and to -1 for values that do not have components.
 137         *
 138         * @param dyn_any
 139         * @exception TypeMismatch if the type of the passed DynAny is not equivalent to the type of target DynAny
 140         */
 141         void assign(in DynAny dyn_any)
 142             raises(TypeMismatch);
 143 
 144         /**
 145         * Initializes the value associated with a DynAny object with the value contained in an any.
 146         * The current position of the target DynAny is set to zero for values that have components
 147         * and to -1 for values that do not have components.
 148         *
 149         * @exception TypeMismatch if the type of the passed Any is not equivalent to the type of target DynAny
 150         * @exception InvalidValue if the passed Any does not contain a legal value (such as a null string)
 151         */
 152         void from_any(in any value)
 153             raises(TypeMismatch, InvalidValue);
 154 
 155         /**
 156         * Creates an any value from a DynAny object.
 157         * A copy of the TypeCode associated with the DynAny object is assigned to the resulting any.
 158         * The value associated with the DynAny object is copied into the any.
 159         *
 160         * @return a new Any object with the same value and TypeCode
 161         */
 162         any to_any();
 163 
 164         /**
 165         * Compares two DynAny values for equality.
 166         * Two DynAny values are equal if their TypeCodes are equivalent and, recursively, all component DynAnys
 167         * have equal values.
 168         * The current position of the two DynAnys being compared has no effect on the result of equal.
 169         *
 170         * @return true of the DynAnys are equal, false otherwise
 171         */
 172         boolean equal(in DynAny dyn_any);
 173 
 174         /**
 175         * Destroys a DynAny object.
 176         * This operation frees any resources used to represent the data value associated with a DynAny object.
 177         * It must be invoked on references obtained from one of the creation operations on the ORB interface
 178         * or on a reference returned by DynAny.copy() to avoid resource leaks.
 179         * Invoking destroy on component DynAny objects (for example, on objects returned by the
 180         * current_component operation) does nothing.
 181         * Destruction of a DynAny object implies destruction of all DynAny objects obtained from it.
 182         * That is, references to components of a destroyed DynAny become invalid.
 183         * Invocations on such references raise OBJECT_NOT_EXIST.
 184         * It is possible to manipulate a component of a DynAny beyond the life time of the DynAny
 185         * from which the component was obtained by making a copy of the component with the copy operation
 186         * before destroying the DynAny from which the component was obtained.
 187         */
 188         void destroy();
 189 
 190         /**
 191         * Creates a new DynAny object whose value is a deep copy of the DynAny on which it is invoked.
 192         * The operation is polymorphic, that is, invoking it on one of the types derived from DynAny,
 193         * such as DynStruct, creates the derived type but returns its reference as the DynAny base type.
 194         *
 195         * @return a deep copy of the DynAny object
 196         */
 197         DynAny copy();
 198 
 199         /**
 200         * Inserts a boolean value into the DynAny.
 201         *
 202         * @exception InvalidValue if this DynAny has components but has a current position of -1
 203         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 204         */
 205         void insert_boolean(in boolean value)
 206             raises(TypeMismatch, InvalidValue);
 207 
 208         /**
 209         * Inserts a byte value into the DynAny. The IDL octet data type is mapped to the Java byte data type.
 210         *
 211         * @exception InvalidValue if this DynAny has components but has a current position of -1
 212         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 213         */
 214         void insert_octet(in octet value)
 215             raises(TypeMismatch, InvalidValue);
 216 
 217         /**
 218         * Inserts a char value into the DynAny.
 219         *
 220         * @exception InvalidValue if this DynAny has components but has a current position of -1
 221         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 222         */
 223         void insert_char(in char value)
 224             raises(TypeMismatch, InvalidValue);
 225 
 226         /**
 227         * Inserts a short value into the DynAny.
 228         *
 229         * @exception InvalidValue if this DynAny has components but has a current position of -1
 230         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 231         */
 232         void insert_short(in short value)
 233             raises(TypeMismatch, InvalidValue);
 234 
 235         /**
 236         * Inserts a short value into the DynAny. The IDL ushort data type is mapped to the Java short data type.
 237         *
 238         * @exception InvalidValue if this DynAny has components but has a current position of -1
 239         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 240         */
 241         void insert_ushort(in unsigned short value)
 242             raises(TypeMismatch, InvalidValue);
 243 
 244         /**
 245         * Inserts an integer value into the DynAny. The IDL long data type is mapped to the Java int data type.
 246         *
 247         * @exception InvalidValue if this DynAny has components but has a current position of -1
 248         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 249         */
 250         void insert_long(in long value)
 251             raises(TypeMismatch, InvalidValue);
 252 
 253         /**
 254         * Inserts an integer value into the DynAny. The IDL ulong data type is mapped to the Java int data type.
 255         *
 256         * @exception InvalidValue if this DynAny has components but has a current position of -1
 257         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 258         */
 259         void insert_ulong(in unsigned long value)
 260             raises(TypeMismatch, InvalidValue);
 261 
 262         /**
 263         * Inserts a float value into the DynAny.
 264         *
 265         * @exception InvalidValue if this DynAny has components but has a current position of -1
 266         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 267         */
 268         void insert_float(in float value)
 269             raises(TypeMismatch, InvalidValue);
 270 
 271         /**
 272         * Inserts a double value into the DynAny.
 273         *
 274         * @exception InvalidValue if this DynAny has components but has a current position of -1
 275         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 276         */
 277         void insert_double(in double value)
 278             raises(TypeMismatch, InvalidValue);
 279 
 280         /**
 281         * Inserts a string value into the DynAny.
 282         * Both bounded and unbounded strings are inserted using this method.
 283         *
 284         * @exception InvalidValue if this DynAny has components but has a current position of -1
 285         * @exception InvalidValue if the string inserted is longer than the bound of a bounded string
 286         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 287         */
 288         void insert_string(in string value)
 289             raises(TypeMismatch, InvalidValue);
 290 
 291         /**
 292         * Inserts a reference to a CORBA object into the DynAny.
 293         *
 294         * @exception InvalidValue if this DynAny has components but has a current position of -1
 295         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 296         */
 297         void insert_reference(in Object value)
 298             raises(TypeMismatch, InvalidValue);
 299 
 300         /**
 301         * Inserts a TypeCode object into the DynAny.
 302         *
 303         * @exception InvalidValue if this DynAny has components but has a current position of -1
 304         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 305         */
 306         void insert_typecode(in CORBA::TypeCode value)
 307             raises(TypeMismatch, InvalidValue);
 308 
 309         /**
 310         * Inserts a long value into the DynAny. The IDL long long data type is mapped to the Java long data type.
 311         *
 312         * @exception InvalidValue if this DynAny has components but has a current position of -1
 313         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 314         */
 315         void insert_longlong(in long long value)
 316             raises(TypeMismatch, InvalidValue);
 317 
 318         /**
 319         * Inserts a long value into the DynAny.
 320         * The IDL unsigned long long data type is mapped to the Java long data type.
 321         *
 322         * @exception InvalidValue if this DynAny has components but has a current position of -1
 323         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 324         */
 325         void insert_ulonglong(in unsigned long long value)
 326             raises(TypeMismatch, InvalidValue);
 327 
 328 //        void insert_longdouble(in long double value)
 329 //            raises(TypeMismatch, InvalidValue);
 330 
 331         /**
 332         * Inserts a char value into the DynAny. The IDL wchar data type is mapped to the Java char data type.
 333         *
 334         * @exception InvalidValue if this DynAny has components but has a current position of -1
 335         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 336         */
 337         void insert_wchar(in wchar value)
 338             raises(TypeMismatch, InvalidValue);
 339 
 340         /**
 341         * Inserts a string value into the DynAny.
 342         * Both bounded and unbounded strings are inserted using this method.
 343         *
 344         * @exception InvalidValue if this DynAny has components but has a current position of -1
 345         * @exception InvalidValue if the string inserted is longer than the bound of a bounded string
 346         */
 347         void insert_wstring(in wstring value)
 348             raises(TypeMismatch, InvalidValue);
 349 
 350         /**
 351         * Inserts an Any value into the Any represented by this DynAny.
 352         *
 353         * @exception InvalidValue if this DynAny has components but has a current position of -1
 354         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 355         */
 356         void insert_any(in any value)
 357             raises(TypeMismatch, InvalidValue);
 358 
 359         /**
 360         * Inserts the Any value contained in the parameter DynAny into the Any represented by this DynAny.
 361         *
 362         * @exception InvalidValue if this DynAny has components but has a current position of -1
 363         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 364         */
 365         void insert_dyn_any(in DynAny value)
 366             raises(TypeMismatch, InvalidValue);
 367 
 368         /**
 369         * Inserts a reference to a Serializable object into this DynAny.
 370         * The IDL ValueBase type is mapped to the Java Serializable type.
 371         *
 372         * @exception InvalidValue if this DynAny has components but has a current position of -1
 373         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 374         */
 375         void insert_val(in ValueBase value)
 376             raises(TypeMismatch, InvalidValue);
 377 
 378         /**
 379         * Extracts the boolean value from this DynAny.
 380         *
 381         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 382         * that is not equivalent to the requested type.
 383         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 384         * @exception InvalidValue if this DynAny has components but has a current position of -1
 385         */
 386         boolean get_boolean()
 387             raises(TypeMismatch, InvalidValue);
 388 
 389         /**
 390         * Extracts the byte value from this DynAny. The IDL octet data type is mapped to the Java byte data type.
 391         *
 392         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 393         * that is not equivalent to the requested type.
 394         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 395         * @exception InvalidValue if this DynAny has components but has a current position of -1
 396         */
 397         octet get_octet()
 398             raises(TypeMismatch, InvalidValue);
 399 
 400         /**
 401         * Extracts the char value from this DynAny.
 402         *
 403         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 404         * that is not equivalent to the requested type.
 405         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 406         * @exception InvalidValue if this DynAny has components but has a current position of -1
 407         */
 408         char get_char()
 409             raises(TypeMismatch, InvalidValue);
 410 
 411         /**
 412         * Extracts the short value from this DynAny.
 413         *
 414         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 415         * that is not equivalent to the requested type.
 416         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 417         * @exception InvalidValue if this DynAny has components but has a current position of -1
 418         */
 419         short get_short()
 420             raises(TypeMismatch, InvalidValue);
 421 
 422         /**
 423         * Extracts the short value from this DynAny. The IDL ushort data type is mapped to the Java short data type.
 424         *
 425         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 426         * that is not equivalent to the requested type.
 427         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 428         * @exception InvalidValue if this DynAny has components but has a current position of -1
 429         */
 430         unsigned short get_ushort()
 431             raises(TypeMismatch, InvalidValue);
 432 
 433         /**
 434         * Extracts the integer value from this DynAny. The IDL long data type is mapped to the Java int data type.
 435         *
 436         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 437         * that is not equivalent to the requested type.
 438         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 439         * @exception InvalidValue if this DynAny has components but has a current position of -1
 440         */
 441         long get_long()
 442             raises(TypeMismatch, InvalidValue);
 443 
 444         /**
 445         * Extracts the integer value from this DynAny. The IDL ulong data type is mapped to the Java int data type.
 446         *
 447         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 448         * that is not equivalent to the requested type.
 449         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 450         * @exception InvalidValue if this DynAny has components but has a current position of -1
 451         */
 452         unsigned long get_ulong()
 453             raises(TypeMismatch, InvalidValue);
 454 
 455         /**
 456         * Extracts the float value from this DynAny.
 457         *
 458         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 459         * that is not equivalent to the requested type.
 460         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 461         * @exception InvalidValue if this DynAny has components but has a current position of -1
 462         */
 463         float get_float()
 464             raises(TypeMismatch, InvalidValue);
 465 
 466         /**
 467         * Extracts the double value from this DynAny.
 468         *
 469         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 470         * that is not equivalent to the requested type.
 471         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 472         * @exception InvalidValue if this DynAny has components but has a current position of -1
 473         */
 474         double get_double()
 475             raises(TypeMismatch, InvalidValue);
 476 
 477         /**
 478         * Extracts the string value from this DynAny.
 479         * Both bounded and unbounded strings are extracted using this method.
 480         *
 481         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 482         * that is not equivalent to the requested type.
 483         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 484         * @exception InvalidValue if this DynAny has components but has a current position of -1
 485         */
 486         string get_string()
 487             raises(TypeMismatch, InvalidValue);
 488 
 489         /**
 490         * Extracts the reference to a CORBA Object from this DynAny.
 491         *
 492         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 493         * that is not equivalent to the requested type.
 494         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 495         * @exception InvalidValue if this DynAny has components but has a current position of -1
 496         */
 497         Object get_reference()
 498             raises(TypeMismatch, InvalidValue);
 499 
 500         /**
 501         * Extracts the TypeCode object from this DynAny.
 502         *
 503         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 504         * that is not equivalent to the requested type.
 505         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 506         * @exception InvalidValue if this DynAny has components but has a current position of -1
 507         */
 508         CORBA::TypeCode get_typecode()
 509             raises(TypeMismatch, InvalidValue);
 510 
 511         /**
 512         * Extracts the long value from this DynAny. The IDL long long data type is mapped to the Java long data type.
 513         *
 514         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 515         * that is not equivalent to the requested type.
 516         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 517         * @exception InvalidValue if this DynAny has components but has a current position of -1
 518         */
 519         long long get_longlong()
 520             raises(TypeMismatch, InvalidValue);
 521 
 522         /**
 523         * Extracts the long value from this DynAny.
 524         * The IDL unsigned long long data type is mapped to the Java long data type.
 525         *
 526         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 527         * that is not equivalent to the requested type.
 528         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 529         * @exception InvalidValue if this DynAny has components but has a current position of -1
 530         */
 531         unsigned long long get_ulonglong()
 532             raises(TypeMismatch, InvalidValue);
 533 //        long double get_longdouble()
 534 //            raises(TypeMismatch, InvalidValue);
 535 
 536         /**
 537         * Extracts the long value from this DynAny. The IDL wchar data type is mapped to the Java char data type.
 538         *
 539         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 540         * that is not equivalent to the requested type.
 541         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 542         * @exception InvalidValue if this DynAny has components but has a current position of -1
 543         */
 544         wchar get_wchar()
 545             raises(TypeMismatch, InvalidValue);
 546 
 547         /**
 548         * Extracts the string value from this DynAny.
 549         * Both bounded and unbounded strings are extracted using this method.
 550         *
 551         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 552         * that is not equivalent to the requested type.
 553         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 554         */
 555         wstring get_wstring()
 556             raises(TypeMismatch, InvalidValue);
 557 
 558         /**
 559         * Extracts an Any value contained in the Any represented by this DynAny.
 560         *
 561         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 562         * that is not equivalent to the requested type.
 563         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 564         * @exception InvalidValue if this DynAny has components but has a current position of -1
 565         */
 566         any get_any()
 567             raises(TypeMismatch, InvalidValue);
 568 
 569         /**
 570         * Extracts the Any value contained in the Any represented by this DynAny and returns it wrapped
 571         * into a new DynAny.
 572         *
 573         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 574         * that is not equivalent to the requested type.
 575         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 576         * @exception InvalidValue if this DynAny has components but has a current position of -1
 577         */
 578         DynAny get_dyn_any()
 579             raises(TypeMismatch, InvalidValue);
 580 
 581         /**
 582         * Extracts a Serializable object from this DynAny.
 583         * The IDL ValueBase type is mapped to the Java Serializable type.
 584         *
 585         * @exception TypeMismatch if the accessed component in the DynAny is of a type
 586         * that is not equivalent to the requested type.
 587         * @exception TypeMismatch if called on a DynAny whose current component itself has components
 588         * @exception InvalidValue if this DynAny has components but has a current position of -1
 589         */
 590         ValueBase get_val()
 591             raises(TypeMismatch, InvalidValue);
 592 
 593         /**
 594         * Sets the current position to index. The current position is indexed 0 to n-1, that is,
 595         * index zero corresponds to the first component. The operation returns true if the resulting
 596         * current position indicates a component of the DynAny and false if index indicates
 597         * a position that does not correspond to a component.
 598         * Calling seek with a negative index is legal. It sets the current position to -1 to indicate
 599         * no component and returns false. Passing a non-negative index value for a DynAny that does not
 600         * have a component at the corresponding position sets the current position to -1 and returns false.
 601         */
 602         boolean seek(in long index);
 603 
 604         /**
 605         * Is equivalent to seek(0).
 606         */
 607         void rewind();
 608 
 609         /**
 610         * Advances the current position to the next component.
 611         * The operation returns true while the resulting current position indicates a component, false otherwise.
 612         * A false return value leaves the current position at -1.
 613         * Invoking next on a DynAny without components leaves the current position at -1 and returns false.
 614         */
 615         boolean next();
 616 
 617         /**
 618         * Returns the number of components of a DynAny.
 619         * For a DynAny without components, it returns zero.
 620         * The operation only counts the components at the top level.
 621         * For example, if component_count is invoked on a DynStruct with a single member,
 622         * the return value is 1, irrespective of the type of the member.
 623         * <UL>
 624         * <LI>For sequences, the operation returns the current number of elements.
 625         * <LI>For structures, exceptions, and value types, the operation returns the number of members.
 626         * <LI>For arrays, the operation returns the number of elements.
 627         * <LI>For unions, the operation returns 2 if the discriminator indicates that a named member is active,
 628         * otherwise, it returns 1.
 629         * <LI>For DynFixed and DynEnum, the operation returns zero.
 630         * </UL>
 631         */
 632         unsigned long component_count();
 633 
 634         /**
 635         * Returns the DynAny for the component at the current position.
 636         * It does not advance the current position, so repeated calls to current_component
 637         * without an intervening call to rewind, next, or seek return the same component.
 638         * The returned DynAny object reference can be used to get/set the value of the current component.
 639         * If the current component represents a complex type, the returned reference can be narrowed
 640         * based on the TypeCode to get the interface corresponding to the to the complex type.
 641         * Calling current_component on a DynAny that cannot have components,
 642         * such as a DynEnum or an empty exception, raises TypeMismatch.
 643         * Calling current_component on a DynAny whose current position is -1 returns a nil reference.
 644         * The iteration operations, together with current_component, can be used
 645         * to dynamically compose an any value. After creating a dynamic any, such as a DynStruct,
 646         * current_component and next can be used to initialize all the components of the value.
 647         * Once the dynamic value is completely initialized, to_any creates the corresponding any value.
 648         *
 649         * @exception TypeMismatch If called on a DynAny that cannot have components,
 650         * such as a DynEnum or an empty exception
 651         */
 652         DynAny current_component()
 653             raises(TypeMismatch);
 654     };
 655 
 656     /**
 657     * DynFixed objects support the manipulation of IDL fixed values.
 658     * Because IDL does not have a generic type that can represent fixed types with arbitrary
 659     * number of digits and arbitrary scale, the operations use the IDL string type.
 660     */
 661     interface DynFixed : DynAny {
 662         #pragma sun_localservant DynFixed ""
 663 
 664         /**
 665         * Returns the value of a DynFixed.
 666         */
 667         string get_value();
 668 
 669         /**
 670         * Sets the value of the DynFixed.
 671         * The val string must contain a fixed string constant in the same format as used for IDL fixed-point literals.
 672         * However, the trailing d or D is optional. The return value is true if val can be represented as the DynFixed
 673         * without loss of precision. If val has more fractional digits than can be represented in the DynFixed,
 674         * fractional digits are truncated and the return value is false.
 675         *
 676         * @exception TypeMismatch If val does not contain a valid fixed-point literal or contains extraneous
 677         *            characters other than leading or trailing white space
 678         * @exception InvalidValue If val contains a value whose scale exceeds that of the DynFixed
 679         *            or is not initialized
 680         */
 681         boolean set_value(in string val)
 682             raises(TypeMismatch, InvalidValue);
 683     };
 684 
 685     /**
 686     * DynEnum objects support the manipulation of IDL enumerated values.
 687     * The current position of a DynEnum is always -1.
 688     */
 689     interface DynEnum : DynAny {
 690         #pragma sun_localservant DynEnum ""
 691 
 692         /**
 693         * Returns the value of the DynEnum as an IDL identifier.
 694         */
 695         string get_as_string();
 696 
 697         /**
 698         * Sets the value of the DynEnum to the enumerated value whose IDL identifier is passed in the value parameter.
 699         *
 700         * @exception InvalidValue If value contains a string that is not a valid IDL identifier
 701         *            for the corresponding enumerated type
 702         */
 703         void set_as_string(in string value)
 704             raises(InvalidValue);
 705 
 706         /**
 707         * Returns the value of the DynEnum as the enumerated value's ordinal value.
 708         * Enumerators have ordinal values 0 to n-1, as they appear from left to right
 709         * in the corresponding IDL definition.
 710         */
 711         unsigned long get_as_ulong();
 712 
 713         /**
 714         * Sets the value of the DynEnum as the enumerated value's ordinal value.
 715         *
 716         * @exception InvalidValue If value contains a value that is outside the range of ordinal values
 717         *            for the corresponding enumerated type
 718         */
 719         void set_as_ulong(in unsigned long value)
 720             raises(InvalidValue);
 721     };
 722 
 723     typedef string FieldName;
 724 
 725     /**
 726     * NameValuePairs associate a name with an Any object.
 727     */
 728     struct NameValuePair {
 729         /**
 730         * The name associated with the Any.
 731         */
 732         FieldName id;
 733         /**
 734         * The Any value associated with the name.
 735         */
 736         any value;
 737     };
 738     typedef sequence<NameValuePair> NameValuePairSeq;
 739 
 740     /**
 741     * NameDynAnyPairs associate a name with an DynAny object.
 742     */
 743     struct NameDynAnyPair {
 744         /**
 745         * The name associated with the DynAny.
 746         */
 747         FieldName id;
 748         /**
 749         * The DynAny value associated with the name.
 750         */
 751         DynAny value;
 752     };
 753     typedef sequence<NameDynAnyPair> NameDynAnyPairSeq;
 754 
 755     /**
 756     * DynStruct objects support the manipulation of IDL struct and exception values.
 757     * Members of the exceptions are handled in the same way as members of a struct.
 758     */
 759     interface DynStruct : DynAny {
 760         #pragma sun_localservant DynStruct ""
 761 
 762         /**
 763         * Returns the name of the member at the current position.
 764         * This operation may return an empty string since the TypeCode of the value being
 765         * manipulated may not contain the names of members.
 766         *
 767         * @exception TypeMismatch if the DynStruct represents an empty exception.
 768         * @exception InvalidValue if the current position does not indicate a member
 769         */
 770         FieldName current_member_name()
 771             raises(TypeMismatch, InvalidValue);
 772 
 773         /**
 774         * Returns the TCKind associated with the member at the current position.
 775         *
 776         * @exception TypeMismatch if the DynStruct represents an empty exception.
 777         * @exception InvalidValue if the current position does not indicate a member
 778         */
 779         CORBA::TCKind current_member_kind()
 780             raises(TypeMismatch, InvalidValue);
 781 
 782         /**
 783         * Returns a sequence of NameValuePairs describing the name and the value of each member
 784         * in the struct associated with a DynStruct object.
 785         * The sequence contains members in the same order as the declaration order of members
 786         * as indicated by the DynStruct's TypeCode. The current position is not affected.
 787         * The member names in the returned sequence will be empty strings if the DynStruct's TypeCode
 788         * does not contain member names.
 789         */
 790         NameValuePairSeq get_members();
 791 
 792         /**
 793         * Initializes the struct data value associated with a DynStruct object from a sequence of NameValuePairs.
 794         * The operation sets the current position to zero if the passed sequences has non-zero length. Otherwise,
 795         * if an empty sequence is passed, the current position is set to -1.
 796         * <P>Members must appear in the NameValuePairs in the order in which they appear in the IDL specification
 797         * of the struct as indicated by the DynStruct's TypeCode or they must be empty strings.
 798         * The operation makes no attempt to assign member values based on member names.
 799         *
 800         * @exception TypeMismatch if the member names supplied in the passed sequence do not match the
 801         *            corresponding member name in the DynStruct's TypeCode and they are not empty strings
 802         * @exception InvalidValue if the passed sequence has a number of elements that disagrees
 803         *            with the number of members as indicated by the DynStruct's TypeCode
 804         */
 805         void set_members(in NameValuePairSeq value)
 806             raises(TypeMismatch, InvalidValue);
 807 
 808         /**
 809         * Returns a sequence of NameDynAnyPairs describing the name and the value of each member
 810         * in the struct associated with a DynStruct object.
 811         * The sequence contains members in the same order as the declaration order of members
 812         * as indicated by the DynStruct's TypeCode. The current position is not affected.
 813         * The member names in the returned sequence will be empty strings if the DynStruct's TypeCode
 814         * does not contain member names.
 815         */
 816         NameDynAnyPairSeq get_members_as_dyn_any();
 817 
 818         /**
 819         * Initializes the struct data value associated with a DynStruct object from a sequence of NameDynAnyPairs.
 820         * The operation sets the current position to zero if the passed sequences has non-zero length. Otherwise,
 821         * if an empty sequence is passed, the current position is set to -1.
 822         * <P>Members must appear in the NameDynAnyPairs in the order in which they appear in the IDL specification
 823         * of the struct as indicated by the DynStruct's TypeCode or they must be empty strings.
 824         * The operation makes no attempt to assign member values based on member names.
 825         *
 826         * @exception TypeMismatch if the member names supplied in the passed sequence do not match the
 827         *            corresponding member name in the DynStruct's TypeCode and they are not empty strings
 828         * @exception InvalidValue if the passed sequence has a number of elements that disagrees
 829         *            with the number of members as indicated by the DynStruct's TypeCode
 830         */
 831         void set_members_as_dyn_any(in NameDynAnyPairSeq value)
 832             raises(TypeMismatch, InvalidValue);
 833     };
 834 
 835     /**
 836     * DynUnion objects support the manipulation of IDL unions.
 837     * A union can have only two valid current positions:
 838     * <UL>
 839     * <LI>zero, which denotes the discriminator
 840     * <LI>one, which denotes the active member
 841     * </UL>
 842     * The component_count value for a union depends on the current discriminator:
 843     * it is 2 for a union whose discriminator indicates a named member, and 1 otherwise.
 844     */
 845     interface DynUnion : DynAny {
 846         #pragma sun_localservant DynUnion ""
 847 
 848         /**
 849         * Returns the current discriminator value.
 850         */
 851         DynAny get_discriminator();
 852 
 853         /**
 854         * Sets the discriminator of the DynUnion to the specified value.
 855         * Setting the discriminator to a value that is consistent with the currently active union member
 856         * does not affect the currently active member. Setting the discriminator to a value that is inconsistent
 857         * with the currently active member deactivates the member and activates the member that is consistent
 858         * with the new discriminator value (if there is a member for that value) by initializing the member
 859         * to its default value.
 860         * Setting the discriminator of a union sets the current position to 0 if the discriminator value
 861         * indicates a non-existent union member (has_no_active_member returns true in this case).
 862         * Otherwise, if the discriminator value indicates a named union member, the current position is set to 1
 863         * (has_no_active_member returns false and component_count returns 2 in this case).
 864         *
 865         * @exception TypeMismatch if the TypeCode of the parameter is not equivalent to the TypeCode
 866         *            of the union's discriminator
 867         */
 868         void set_discriminator(in DynAny d)
 869             raises(TypeMismatch);
 870 
 871         /**
 872         * Sets the discriminator to a value that is consistent with the value of the default case of a union.
 873         * It sets the current position to zero and causes component_count to return 2.
 874         *
 875         * @exception TypeMismatch if the union does not have an explicit default case
 876         */
 877         void set_to_default_member()
 878             raises(TypeMismatch);
 879 
 880         /**
 881         * Sets the discriminator to a value that does not correspond to any of the unions case labels.
 882         * It sets the current position to zero and causes component_count to return 1.
 883         *
 884         * @exception TypeMismatch if the union has an explicit default case or if it uses the entire range
 885         *            of discriminator values for explicit case labels
 886         */
 887         void set_to_no_active_member()
 888             raises(TypeMismatch);
 889 
 890         /**
 891         * Returns true if the union has no active member, that is, the unions value consists solely
 892         * of its discriminator because the discriminator has a value that is not listed as an explicit case label.
 893         * Calling this operation on a union that has a default case returns false.
 894         * Calling this operation on a union that uses the entire range of discriminator values
 895         * for explicit case labels returns false.
 896         */
 897         boolean has_no_active_member();
 898 
 899         /**
 900         * Returns the TCKind value of the discriminators TypeCode.
 901         */
 902         CORBA::TCKind discriminator_kind();
 903 
 904         /**
 905         * Returns the TCKind value of the currently active members TypeCode. 
 906         *
 907         * @exception InvalidValue if the union does not have a currently active member
 908         */
 909         CORBA::TCKind member_kind()
 910             raises(InvalidValue);
 911 
 912         /**
 913         * Returns the currently active member. Note that the returned reference remains valid only
 914         * for as long as the currently active member does not change. Using the returned reference
 915         * beyond the life time of the currently active member raises OBJECT_NOT_EXIST. 
 916         *
 917         * @exception InvalidValue if the union has no active member
 918         */
 919         DynAny member()
 920             raises(InvalidValue);
 921 
 922         /**
 923         * Returns the name of the currently active member. If the unions TypeCode does not contain
 924         * a member name for the currently active member, the operation returns an empty string.
 925         *
 926         * @exception InvalidValue if the union has no active member
 927         */
 928         FieldName member_name()
 929             raises(InvalidValue);
 930     };
 931 
 932     typedef sequence<any> AnySeq;
 933     typedef sequence<DynAny> DynAnySeq;
 934 
 935     /**
 936     * DynSequence objects support the manipulation of IDL sequences.
 937     */
 938     interface DynSequence : DynAny {
 939         #pragma sun_localservant DynSequence ""
 940 
 941         /**
 942         * Returns the current length of the sequence.
 943         */
 944         unsigned long get_length();
 945 
 946         /**
 947         * Sets the length of the sequence.
 948         * Increasing the length of a sequence adds new elements at the tail without affecting the values
 949         * of already existing elements. Newly added elements are default-initialized.
 950         * Increasing the length of a sequence sets the current position to the first newly-added element
 951         * if the previous current position was -1. Otherwise, if the previous current position was not -1,
 952         * the current position is not affected.
 953         * Decreasing the length of a sequence removes elements from the tail without affecting the value
 954         * of those elements that remain. The new current position after decreasing the length of a sequence
 955         * is determined as follows:
 956         * <UL>
 957         * <LI>If the length of the sequence is set to zero, the current position is set to -1.
 958         * <LI>If the current position is -1 before decreasing the length, it remains at -1.
 959         * <LI>If the current position indicates a valid element and that element is not removed when the length
 960         *     is decreased, the current position remains unaffected.
 961         * <LI>If the current position indicates a valid element and that element is removed,
 962         *     the current position is set to -1.
 963         * </UL>
 964         *
 965         * @exception InvalidValue if this is a bounded sequence and len is larger than the bound
 966         */
 967         void set_length(in unsigned long len)
 968             raises(InvalidValue);
 969 
 970         /**
 971         * Returns the elements of the sequence.
 972         */
 973         AnySeq get_elements();
 974 
 975         /**
 976         * Sets the elements of a sequence.
 977         * The length of the DynSequence is set to the length of value. The current position is set to zero
 978         * if value has non-zero length and to -1 if value is a zero-length sequence.
 979         *
 980         * @exception TypeMismatch if value contains one or more elements whose TypeCode is not equivalent
 981         *            to the element TypeCode of the DynSequence
 982         * @exception InvalidValue if the length of value exceeds the bound of a bounded sequence
 983         */
 984         void set_elements(in AnySeq value)
 985             raises(TypeMismatch, InvalidValue);
 986 
 987         /**
 988         * Returns the DynAnys representing the elements of the sequence.
 989         */
 990         DynAnySeq get_elements_as_dyn_any();
 991 
 992         /**
 993         * Sets the elements of a sequence using DynAnys.
 994         * The length of the DynSequence is set to the length of value. The current position is set to zero
 995         * if value has non-zero length and to -1 if value is a zero-length sequence.
 996         *
 997         * @exception TypeMismatch if value contains one or more elements whose TypeCode is not equivalent
 998         *            to the element TypeCode of the DynSequence
 999         * @exception InvalidValue if the length of value exceeds the bound of a bounded sequence
1000         */
1001         void set_elements_as_dyn_any(in DynAnySeq value)
1002             raises(TypeMismatch, InvalidValue);
1003     };
1004 
1005     /**
1006     * DynArray objects support the manipulation of IDL arrays.
1007     * Note that the dimension of the array is contained in the TypeCode which is accessible
1008     * through the type attribute. It can also be obtained by calling the component_count operation.
1009     */
1010     interface DynArray : DynAny {
1011         #pragma sun_localservant DynArray ""
1012 
1013         /**
1014         * Returns the elements of the DynArray.
1015         */
1016         AnySeq get_elements();
1017 
1018         /**
1019         * Sets the DynArray to contain the passed elements.
1020         *
1021         * @exception TypeMismatch if one or more elements have a type that is inconsistent with the DynArrays TypeCode
1022         * @exception InvalidValue if the sequence does not contain the same number of elements as the array dimension
1023         */
1024         void set_elements(in AnySeq value)
1025             raises(TypeMismatch, InvalidValue);
1026 
1027         /**
1028         * Returns the elements of the DynArray as DynAnys.
1029         */
1030         DynAnySeq get_elements_as_dyn_any();
1031 
1032         /**
1033         * Sets the DynArray to contain the passed elements.
1034         *
1035         * @exception TypeMismatch if one or more elements have a type that is inconsistent with the DynArrays TypeCode
1036         * @exception InvalidValue if the sequence does not contain the same number of elements as the array dimension
1037         */
1038         void set_elements_as_dyn_any(in DynAnySeq value)
1039             raises(TypeMismatch, InvalidValue);
1040     };
1041 
1042     /**
1043     * DynValueCommon provides operations supported by both the DynValue and DynValueBox interfaces.
1044     */
1045     interface DynValueCommon : DynAny {
1046         /**
1047         * Returns true if the DynValueCommon represents a null value type.
1048         */
1049         boolean is_null();
1050 
1051         /**
1052         * Changes the representation of a DynValueCommon to a null value type.
1053         */
1054         void set_to_null();
1055 
1056         /**
1057         * Replaces a null value type with a newly constructed value. Its components are initialized
1058         * to default values as in DynAnyFactory.create_dyn_any_from_type_code.
1059         * If the DynValueCommon represents a non-null value type, then this operation has no effect. 
1060         */
1061         void set_to_value();
1062     }; 
1063 
1064     /**
1065     * DynValue objects support the manipulation of IDL non-boxed value types.
1066     * The DynValue interface can represent both null and non-null value types.
1067     * For a DynValue representing a non-null value type, the DynValue's components comprise
1068     * the public and private members of the value type, including those inherited from concrete base value types,
1069     * in the order of definition. A DynValue representing a null value type has no components
1070     * and a current position of -1.
1071     * <P>Warning: Indiscriminantly changing the contents of private value type members can cause the value type
1072     * implementation to break by violating internal constraints. Access to private members is provided to support
1073     * such activities as ORB bridging and debugging and should not be used to arbitrarily violate
1074     * the encapsulation of the value type. 
1075     */
1076     interface DynValue : DynValueCommon {
1077         #pragma sun_localservant DynValue ""
1078 
1079         /**
1080         * Returns the name of the member at the current position.
1081         * This operation may return an empty string since the TypeCode of the value being
1082         * manipulated may not contain the names of members.
1083         *
1084         * @exception TypeMismatch if the DynValue represents a null value type.
1085         * @exception InvalidValue if the current position does not indicate a member
1086         */
1087         FieldName current_member_name()
1088             raises(TypeMismatch, InvalidValue);
1089 
1090         /**
1091         * Returns the TCKind associated with the member at the current position.
1092         *
1093         * @exception TypeMismatch if the DynValue represents a null value type.
1094         * @exception InvalidValue if the current position does not indicate a member
1095         */
1096         CORBA::TCKind current_member_kind()
1097             raises(TypeMismatch, InvalidValue);
1098 
1099         /**
1100         * Returns a sequence of NameValuePairs describing the name and the value of each member
1101         * in the value type.
1102         * The sequence contains members in the same order as the declaration order of members
1103         * as indicated by the DynValue's TypeCode. The current position is not affected.
1104         * The member names in the returned sequence will be empty strings if the DynValue's TypeCode
1105         * does not contain member names.
1106         *
1107         * @exception InvalidValue if this object represents a null value type
1108         */
1109         NameValuePairSeq get_members()
1110             raises(InvalidValue);
1111 
1112         /**
1113         * Initializes the value type's members from a sequence of NameValuePairs.
1114         * The operation sets the current position to zero if the passed sequences has non-zero length. Otherwise,
1115         * if an empty sequence is passed, the current position is set to -1.
1116         * A null value type can be initialized to a non-null value type using this method.
1117         * <P>Members must appear in the NameValuePairs in the order in which they appear in the IDL specification
1118         * of the value type as indicated by the DynValue's TypeCode or they must be empty strings.
1119         * The operation makes no attempt to assign member values based on member names.
1120         *
1121         * @exception TypeMismatch if the member names supplied in the passed sequence do not match the
1122         *            corresponding member name in the DynValue's TypeCode and they are not empty strings
1123         * @exception InvalidValue if the passed sequence has a number of elements that disagrees
1124         *            with the number of members as indicated by the DynValue's TypeCode
1125         */
1126         void set_members(in NameValuePairSeq value)
1127             raises(TypeMismatch, InvalidValue);
1128 
1129         /**
1130         * Returns a sequence of NameDynAnyPairs describing the name and the value of each member
1131         * in the value type.
1132         * The sequence contains members in the same order as the declaration order of members
1133         * as indicated by the DynValue's TypeCode. The current position is not affected.
1134         * The member names in the returned sequence will be empty strings if the DynValue's TypeCode
1135         * does not contain member names.
1136         *
1137         * @exception InvalidValue if this object represents a null value type
1138         */
1139         NameDynAnyPairSeq get_members_as_dyn_any()
1140             raises(InvalidValue);
1141 
1142         /**
1143         * Initializes the value type's members from a sequence of NameDynAnyPairs.
1144         * The operation sets the current position to zero if the passed sequences has non-zero length. Otherwise,
1145         * if an empty sequence is passed, the current position is set to -1.
1146         * A null value type can be initialized to a non-null value type using this method.
1147         * <P>Members must appear in the NameDynAnyPairs in the order in which they appear in the IDL specification
1148         * of the value type as indicated by the DynValue's TypeCode or they must be empty strings.
1149         * The operation makes no attempt to assign member values based on member names.
1150         *
1151         * @exception TypeMismatch if the member names supplied in the passed sequence do not match the
1152         *            corresponding member name in the DynValue's TypeCode and they are not empty strings
1153         * @exception InvalidValue if the passed sequence has a number of elements that disagrees
1154         *            with the number of members as indicated by the DynValue's TypeCode
1155         */
1156         void set_members_as_dyn_any(in NameDynAnyPairSeq value)
1157             raises(TypeMismatch, InvalidValue);
1158     };
1159 
1160     /**
1161     * DynValueBox objects support the manipulation of IDL boxed value types.
1162     * The DynValueBox interface can represent both null and non-null value types.
1163     * For a DynValueBox representing a non-null value type, the DynValueBox has a single component
1164     * of the boxed type. A DynValueBox representing a null value type has no components
1165     * and a current position of -1.
1166     */
1167     interface DynValueBox : DynValueCommon {
1168 
1169         /**
1170         * Returns the boxed value as an Any.
1171         *
1172         * @exception InvalidValue if this object represents a null value box type
1173         */
1174         any get_boxed_value()
1175             raises(InvalidValue);
1176 
1177         /**
1178         * Replaces the boxed value with the specified value.
1179         * If the DynBoxedValue represents a null valuetype, it is converted to a non-null value.
1180         *
1181         * @exception TypeMismatch if this object represents a non-null value box type and the type
1182         *            of the parameter is not matching the current boxed value type.
1183         */
1184         void set_boxed_value(in any boxed)
1185             raises(TypeMismatch);
1186 
1187         /**
1188         * Returns the boxed value as a DynAny.
1189         *
1190         * @exception InvalidValue if this object represents a null value box type
1191         */
1192         DynAny get_boxed_value_as_dyn_any()
1193             raises(InvalidValue);
1194 
1195         /**
1196         * Replaces the boxed value with the value contained in the parameter.
1197         * If the DynBoxedValue represents a null valuetype, it is converted to a non-null value.
1198         *
1199         * @exception TypeMismatch if this object represents a non-null value box type and the type
1200         *            of the parameter is not matching the current boxed value type.
1201         */
1202         void set_boxed_value_as_dyn_any(in DynAny boxed)
1203             raises(TypeMismatch);
1204     };
1205 
1206     /**
1207     * DynAny objects can be created by invoking operations on the DynAnyFactory object.
1208     * Generally there are only two ways to create a DynAny object:
1209     * <UL>
1210     * <LI>invoking an operation on an existing DynAny object
1211     * <LI>invoking an operation on a DynAnyFactory object
1212     * </UL>
1213     * A constructed DynAny object supports operations that enable the creation of new DynAny
1214     * objects encapsulating access to the value of some constituent.
1215     * DynAny objects also support the copy operation for creating new DynAny objects.
1216     * A reference to the DynAnyFactory object is obtained by calling ORB.resolve_initial_references()
1217     * with the identifier parameter set to the string constant "DynAnyFactory".
1218     * <P>Dynamic interpretation of an any usually involves creating a DynAny object using create_dyn_any()
1219     * as the first step. Depending on the type of the any, the resulting DynAny object reference can be narrowed
1220     * to a DynFixed, DynStruct, DynSequence, DynArray, DynUnion, DynEnum, or DynValue object reference.
1221     * <P>Dynamic creation of an any involves creating a DynAny object using create_dyn_any_from_type_code(),
1222     * passing the TypeCode associated with the value to be created. The returned reference is narrowed to one of
1223     * the complex types, such as DynStruct, if appropriate. Then, the value can be initialized by means of
1224     * invoking operations on the resulting object. Finally, the to_any operation can be invoked
1225     * to create an any value from the constructed DynAny.
1226     */
1227     interface DynAnyFactory {
1228         #pragma sun_localservant DynAnyFactory ""
1229         exception InconsistentTypeCode {};
1230 
1231         /**
1232         * Creates a new DynAny object from an any value.
1233         * A copy of the TypeCode associated with the any value is assigned to the resulting DynAny object.
1234         * The value associated with the DynAny object is a copy of the value in the original any.
1235         * The current position of the created DynAny is set to zero if the passed value has components,
1236         * to -1 otherwise
1237         *
1238         * @exception InconsistentTypeCode if value has a TypeCode with a TCKind of tk_Principal,
1239         * tk_native, or tk_abstract_interface
1240         */
1241         DynAny create_dyn_any(in any value)
1242             raises(InconsistentTypeCode);
1243 
1244         /**
1245         * Creates a DynAny from a TypeCode. Depending on the TypeCode, the created object may be of type DynAny,
1246         * or one of its derived types, such as DynStruct. The returned reference can be narrowed to the derived type.
1247         * In all cases, a DynAny constructed from a TypeCode has an initial default value.
1248         * The default values of basic types are:
1249         * <UL>
1250         * <LI>false for boolean
1251         * <LI>zero for numeric types
1252         * <LI>zero for types octet, char, and wchar
1253         * <LI>the empty string for string and wstring
1254         * <LI>null for object references
1255         * <LI>a type code with a TCKind value of tk_null for type codes
1256         * <LI>for any values, an any containing a type code with a TCKind value of tk_null type and no value
1257         * </UL>
1258         * For complex types, creation of the corresponding DynAny assigns a default value as follows:
1259         * <UL>
1260         * <LI>For DynSequence it sets the current position to -1 and creates an empty sequence.
1261         * <LI>For DynEnum it sets the current position to -1 and sets the value of the enumerator
1262         *     to the first enumerator value indicated by the TypeCode.
1263         * <LI>For DynFixed it sets the current position to -1 and sets the value zero.
1264         * <LI>For DynStruct it sets the current position to -1 for empty exceptions
1265         *     and to zero for all other TypeCodes. The members (if any) are (recursively) initialized
1266         *     to their default values.
1267         * <LI>For DynArray sets the current position to zero and (recursively) initializes elements
1268         *     to their default value.
1269         * <LI>For DynUnion sets the current position to zero. The discriminator value is set
1270         *     to a value consistent with the first named member of the union. That member is activated and (recursively)
1271         *     initialized to its default value.
1272         * <LI>For DynValue and DynValueBox it initializes to a null value.
1273         * </UL>
1274         */
1275         DynAny create_dyn_any_from_type_code(in CORBA::TypeCode type)
1276             raises(InconsistentTypeCode);
1277     };
1278 }; // module DynamicAny
1279 
1280 #endif // _DYNAMIC_ANY_IDL_