1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 2 <html> 3 <head> 4 <!-- 5 6 Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. 7 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 8 9 This code is free software; you can redistribute it and/or modify it 10 under the terms of the GNU General Public License version 2 only, as 11 published by the Free Software Foundation. Oracle designates this 12 particular file as subject to the "Classpath" exception as provided 13 by Oracle in the LICENSE file that accompanied this code. 14 15 This code is distributed in the hope that it will be useful, but WITHOUT 16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 17 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 18 version 2 for more details (a copy is included in the LICENSE file that 19 accompanied this code). 20 21 You should have received a copy of the GNU General Public License version 22 2 along with this work; if not, write to the Free Software Foundation, 23 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 24 25 Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 26 or visit www.oracle.com if you need additional information or have any 27 questions. 28 29 --> 30 31 </head> 32 <body bgcolor="white"> 33 <P>Provides classes and interfaces that enable traversal of the data value 34 associated with an <code>any</code> at 35 runtime, and extraction of the primitive constituents of the data value. 36 37 38 <P>An <code>any</code> can be passed to a program that doesn't have any static information 39 for the type of the <code>any</code> (code generated for the type by an IDL compiler has not 40 been compiled with the object implementation). As a result, the object receiving the 41 <code>any</code> does not have a portable method of using it. 42 43 <P><code>DynAny</code>s enable traversal of the data value associated with an 44 <code>any</code> at runtime, and extraction of the primitive constituents of the data value. 45 This is especially helpful for writing powerful generic servers (bridges, event channels 46 supporting filtering). Similarly, this facility enables the construction of an 47 <code>any</code> at runtime, without having static knowledge of its type. This is especially 48 helpful for writing generic clients (bridges, browsers, debuggers, user interface tools). 49 50 <P><code>Any</code> values can be dynamically interpreted (traversed) and constructed through 51 <tt>DynAny</tt> objects. A <tt>DynAny</tt> object is associated with a data 52 value which corresponds to a copy of the value inserted into an <tt>Any</tt>. A 53 <tt>DynAny</tt> object may be viewed as an ordered collection of component 54 <tt>DynAny</tt>s. For <tt>DynAny</tt>s representing a basic type, such as <code>long</code>, 55 or a type without components, such as an empty exception, the ordered collection of 56 components is empty. 57 58 <P>Each <tt>DynAny</tt> object maintains the notion of a current position into its collection 59 of component <tt>DynAny</tt>s. The current position is identified by an index value that runs 60 from 0 to n-1, where <em>n</em> is the number of components. The special index value -1 61 indicates a current position that points nowhere. 62 For values that cannot have a current position (such as an empty exception), 63 the index value is fixed at -1. 64 If a <code>DynAny</code> is initialized with a value that has components, the index is 65 initialized to 0. 66 After creation of an uninitialized <code>DynAny</code> (that is, a <code>DynAny</code> that 67 has no value but a <code>TypeCode</code> 68 that permits components), the current position depends on the type of value represented by 69 the <code>DynAny</code>. (The current position is set to 0 or -1, depending on whether the 70 new <code>DynAny</code> 71 gets default values for its components.) 72 73 74 <P>The iteration operations <code>rewind</code>, <code>seek</code>, and <code>next</code> 75 can be used to change the current position 76 and the <code>current_component</code> operation returns the component at the current 77 position. 78 The <code>component_count</code> operation returns the number of components of a 79 <code>DynAny</code>. 80 Collectively, these operations enable iteration over the components of a 81 <code>DynAny</code>, for example, 82 to (recursively) examine its contents. 83 84 85 <P>A constructed <code>DynAny</code> object is a <code>DynAny</code> object associated with 86 a constructed type. 87 There is a different interface, inheriting from the <code>DynAny</code> interface, 88 associated with 89 each kind of constructed type in IDL (fixed, enum, struct, sequence, union, array, 90 exception, and value type). A constructed <code>DynAny</code> object exports operations 91 that enable the creation of new <code>DynAny</code> objects, 92 each of them associated with a component of the constructed data value. 93 As an example, a <code>DynStruct</code> is associated with a <code>struct</code> value. This 94 means that the <code>DynStruct</code> 95 may be seen as owning an ordered collection of components, one for each structure member. 96 The <code>DynStruct</code> object exports operations that enable the creation of new 97 <code>DynAny</code> objects, 98 each of them associated with a member of the <code>struct</code>. 99 100 101 <P>If a <code>DynAny</code> object has been obtained from another (constructed) 102 <code>DynAny</code> object, 103 such as a <code>DynAny</code> representing a structure member that was created from a 104 <code>DynStruct</code>, 105 the member <code>DynAny</code> is logically contained in the <code>DynStruct</code>. 106 Calling an <code>insert</code> or <code>get</code> operation leaves the current position 107 unchanged. 108 Destroying a top-level <code>DynAny</code> object (one that was not obtained as a component 109 of another <code>DynAny</code>) 110 also destroys any component <code>DynAny</code> objects obtained from it. 111 Destroying a non-top level <code>DynAny</code> object does nothing. 112 Invoking operations on a destroyed top-level <code>DynAny</code> or any of its descendants 113 raises OBJECT_NOT_EXIST. 114 If the programmer wants to destroy a <code>DynAny</code> object but still wants to 115 manipulate some component 116 of the data value associated with it, then he or she should first create a 117 <code>DynAny</code> for the component 118 and, after that, make a copy of the created <code>DynAny</code> object. 119 120 121 <P>The behavior of <code>DynAny</code> objects has been defined in order to enable efficient 122 implementations 123 in terms of allocated memory space and speed of access. <code>DynAny</code> objects are 124 intended to be used 125 for traversing values extracted from <code>any</code>s or constructing values of 126 <code>any</code>s at runtime. 127 Their use for other purposes is not recommended. 128 129 130 131 <H2>Handling DynAny objects</H2> 132 133 <P><code>Insert</code> and <code>get</code> operations are necessary to handle basic 134 <code>DynAny</code> objects 135 but are also helpful to handle constructed <code>DynAny</code> objects. 136 Inserting a basic data type value into a constructed <code>DynAny</code> object 137 implies initializing the current component of the constructed data value 138 associated with the <code>DynAny</code> object. For example, invoking 139 <code>insert_boolean</code> on a 140 <code>DynStruct</code> implies inserting a <code>boolean</code> data value at the current 141 position 142 of the associated <code>struct</code> data value. 143 A type is consistent for inserting or extracting a value if its <code>TypeCode</code> is 144 equivalent to 145 the <code>TypeCode</code> contained in the <code>DynAny</code> or, if the 146 <code>DynAny</code> has components, is equivalent to the <code>TypeCode</code> 147 of the <code>DynAny</code> at the current position. 148 149 <P>Basic operations include: 150 <P> 151 <UL> 152 <LI>insert_boolean, get_boolean 153 <LI>insert_char, get_char 154 <LI>insert_short, get_short 155 <LI>insert_ushort, get_ushort 156 <LI>insert_long, get_long 157 <LI>insert_ulong, get_ulong 158 <LI>insert_double, get_double 159 <LI>insert_string, get_string 160 <LI>insert_reference, get_reference 161 <LI>insert_typecode, get_typecode 162 <LI>insert_longlong, get_longlong 163 <LI>insert_ulonglong, get_ulonglong 164 <LI>insert_longdouble, get_longdouble 165 <LI>insert_wchar, get_wchar 166 <LI>insert_wstring, get_wstring 167 <LI>insert_any, get_any 168 <LI>insert_dyn_any, get_dyn_any 169 <LI>insert_val, get_val 170 <LI>insert_octet, get_octet 171 <LI>insert_float, get_float 172 <LI>get_value 173 <LI>get_as_string 174 <LI>get_as_ulong 175 <LI>get_members 176 <LI>get_members_as_dyn_any 177 <LI>get_discriminator 178 <LI>get_length 179 <LI>get_elements 180 <LI>get_elements_as_dyn_any 181 <LI>get_boxed_value 182 <LI>get_boxed_value_as_dyn_any 183 </UL> 184 185 186 <P><code>DynAny</code> and <code>DynAnyFactory</code> objects are intended to be local to 187 the process in which they are 188 created and used. This means that references to <code>DynAny</code> and 189 <code>DynAnyFactory</code> objects cannot be exported 190 to other processes, or externalized with <code>ORB.object_to_string()</code>. 191 If any attempt is made to do so, the offending operation will raise a MARSHAL system 192 exception. 193 Since their interfaces are specified in IDL, <code>DynAny</code> objects export operations 194 defined in the standard 195 <code>org.omg.CORBA.Object</code> interface. However, any attempt to invoke operations 196 exported through the <code>Object</code> 197 interface may raise the standard NO_IMPLEMENT exception. 198 An attempt to use a <code>DynAny</code> object with the DII may raise the NO_IMPLEMENT 199 exception. 200 201 <H3>Package Specification</H3> 202 203 <P>For a precise list of supported sections of official specifications with which 204 the Java[tm] Platform, Standard Edition 6 ORB complies, see <A 205 HREF="../CORBA/doc-files/compliance.html">Official Specifications for CORBA 206 support in Java[tm] SE 6</A>. 207 208 @since 1.4 209 <br> 210 @serial exclude 211 </body> 212 </html>