diff -r 000000000000 -r 7ef37b2cdcad src/share/classes/org/omg/PortableInterceptor/IOP.idl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/org/omg/PortableInterceptor/IOP.idl Wed Apr 27 01:21:28 2016 +0800 @@ -0,0 +1,617 @@ +/* + * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#ifndef _IOP_IDL_ +#define _IOP_IDL_ + +#include "CORBAX.idl" + +#pragma prefix "omg.org" + +#ifndef CORBA3 +#define local +#endif + +module IOP { + // + // Standard Protocol Profile tag values + // + /** Profile ID */ + typedef unsigned long ProfileId; + + /** + * Identifies profiles that + * support the Internet Inter-ORB Protocol. The ProfileBody + * of this profile contains a CDR encapsulation of a structure + * containing addressing and object identification information used by + * IIOP. Version 1.1 of the TAG_INTERNET_IOP profile + * also includes an array of TaggedComponent objects that can + * contain additional information supporting optional IIOP features, + * ORB services such as security, and future protocol extensions. + *

+ * Protocols other than IIOP (such as ESIOPs and other GIOPs) can share + * profile information (such as object identity or security + * information) with IIOP by encoding their additional profile information + * as components in the TAG_INTERNET_IOP profile. All + * TAG_INTERNET_IOP profiles support IIOP, regardless of + * whether they also support additional protocols. Interoperable + * ORBs are not required to create or understand any other profile, + * nor are they required to create or understand any of the components + * defined for other protocols that might share the + * TAG_INTERNET_IOP profile with IIOP. + *

+ * The profile_data for the TAG_INTERNET_IOP + * profile is a CDR encapsulation of the IIOP.ProfileBody_1_1 + * type. + */ + const ProfileId TAG_INTERNET_IOP = 0; + + /** + * Indicates that the value encapsulated is of type + * MultipleComponentProfile. In this case, the profile + * consists of a list of protocol components, the use of which must + * be specified by the protocol using this profile. This profile may + * be used to carry IOR components. + *

+ * The profile_data for the + * TAG_MULTIPLE_COMPONENTS profile is a CDR encapsulation + * of the MultipleComponentProfile type shown above. + */ + const ProfileId TAG_MULTIPLE_COMPONENTS = 1; + + /** + * Object references have at least one tagged profile. Each profile + * supports one or more protocols and encapsulates all the basic + * information the protocols it supports need to identify an object. + * Any single profile holds enough information to drive a complete + * invocation using any of the protocols it supports; the content + * and structure of those profile entries are wholly specified by + * these protocols. + */ + struct TaggedProfile { + /** The tag, represented as a profile id. */ + ProfileId tag; + + /** The associated profile data. */ + sequence profile_data; + }; + + /** + * Captures information about a object references, such as whether the + * object is null, what type it is, what protocols are supported, and what + * ORB services are available. + *

+ * This data structure need not be used internally to any given ORB, + * and is not intended to be visible to application-level ORB programmers. + * It should be used only when crossing object reference domain + * boundaries, within bridges. + *

+ * This data structure is designed to be efficient in typical + * single-protocol configurations, while not penalizing multiprotocol ones. + *

+ * Object references have at least one tagged profile. Each profile + * supports one or more protocols and encapsulates all the basic + * information the protocols it supports need to identify an object. + * Any single profile holds enough information to drive a complete + * invocation using any of the protocols it supports; the content + * and structure of those profile entries are wholly specified by + * these protocols. A bridge between two domains may need to know the + * detailed content of the profile for those domains' profiles, + * depending on the technique it uses to bridge the domains. + *

+ * Each profile has a unique numeric tag, assigned by the OMG. + * Profile tags in the range 0x80000000 through 0xffffffff are reserved + * for future use, and are not currently available for assignment. + *

+ * Null object references are indicated by an empty set of profiles, + * and by a "Null" type ID (a string which contains only a single + * terminating character). A Null TypeID is the only + * mechanism that can be used to represent the type + * CORBA.Object. Type IDs may only be "Null" in any message, + * requiring the client to use existing knowledge or to consult the + * object, to determine interface types supported. The type ID + * is a Repository ID identifying the interface type, and is provided + * to allow ORBs to preserve strong typing. This identifier is agreed + * on within the bridge and, for reasons outside the scope of the + * interoperability specification, needs to have a much broader scope to + * address various problems in system evolution and maintenance. + * Type IDs support detection of type equivalence, and in conjunction + * with an Interface Repository, allow processes to reason about the + * relationship of the type of the object referred to and any other type. + *

+ * The type ID, if provided by the server, indicates the most derived + * type that the server wishes to publish, at the time the reference + * is generated. The object's actual most derived type may later change + * to a more derived type. Therefore, the type ID in the IOR can only + * be interpreted by the client as a hint that the object supports at + * least the indicated interface. The client can succeed in narrowing + * the reference to the indicated interface, or to one of its base + * interfaces, based solely on the type ID in the IOR, but must not fail + * to narrow the reference without consulting the object via the + * "_is_a" or "_get_interface" pseudo-operations. + */ + struct IOR { + /** The type id, represented as a String. */ + string type_id; + + /** + * An array of tagged profiles associated with this + * object reference. + */ + sequence profiles; + }; + + /** + * Standard way of representing multicomponent profiles. + * This would be encapsulated in a TaggedProfile. + */ + typedef unsigned long ComponentId; + + /** + * TaggedComponents contained in + * TAG_INTERNET_IOP and + * TAG_MULTIPLE_COMPONENTS profiles are identified by + * unique numeric tags using a namespace distinct form that is used for + * profile tags. Component tags are assigned by the OMG. + *

+ * Specifications of components must include the following information: + *

+ * Specification of protocols must describe how the components affect + * the protocol. The following should be specified in any protocol + * definition for each TaggedComponent that the protocol uses: + * + */ + struct TaggedComponent { + /** The tag, represented as a component id. */ + ComponentId tag; + + /** The component data associated with the component id. */ + sequence component_data; + }; + + /** + * It is often useful in the real world to be able to identify the + * particular kind of ORB an object reference is coming from, to work + * around problems with that particular ORB, or exploit shared + * efficiencies. + *

+ * The TAG_ORB_TYPE component has an associated value of + * type unsigned long (Java long), encoded as a CDR encapsulation, + * designating an ORB type ID allocated by the OMG for the ORB type of the + * originating ORB. Anyone may register any ORB types by submitting + * a short (one-paragraph) description of the ORB type to the OMG, + * and will receive a new ORB type ID in return. A list of ORB type + * descriptions and values will be made available on the OMG web server. + *

+ * The TAG_ORB_TYPE component can appear at most once in + * any IOR profile. For profiles supporting IIOP 1.1 or greater, it + * is optionally present. + */ + const ComponentId TAG_ORB_TYPE = 0 ; + + /** + * The code set component of the IOR multi-component profile structure + * contains: + *

+ * Both char and wchar conversion code sets are listed in order of + * preference. + */ + const ComponentId TAG_CODE_SETS = 1 ; + + /** + * A profile component containing the sequence of QoS policies exported + * with the object reference by an object adapter. + */ + const ComponentId TAG_POLICIES = 2 ; + + /** + * In cases where the same object key is used for more than one + * internet location, the following standard IOR Component is defined + * for support in IIOP version 1.2. + *

+ * The TAG_ALTERNATE_IIOP_ADDRESS component has an + * associated value of type: + * + *

+     *     struct { 
+     *         string HostID, 
+     *         short Port 
+     *     }; 
+     *   
+ * + * encoded as a CDR encapsulation. + *

+ * Zero or more instances of the TAG_ALTERNATE_IIOP_ADDRESS + * component type may be included in a version 1.2 + * TAG_INTERNET_IOP Profile. Each of these alternative + * addresses may be used by the client orb, in addition to the host + * and port address expressed in the body of the Profile. In cases + * where one or more TAG_ALTERNATE_IIOP_ADDRESS components + * are present in a TAG_INTERNET_IOP Profile, no order of + * use is prescribed by Version 1.2 of IIOP. + */ + const ComponentId TAG_ALTERNATE_IIOP_ADDRESS = 3 ; + + /** + * Class downloading is supported for stubs, ties, values, and + * value helpers. The specification allows transmission of codebase + * information on the wire for stubs and ties, and enables usage of + * pre-existing ClassLoaders when relevant. + *

+ * For values and value helpers, the codebase is transmitted after the + * value tag. For stubs and ties, the codebase is transmitted as + * the TaggedComponent TAG_JAVA_CODEBASE in the IOR + * profile, where the component_data is a CDR encapsulation + * of the codebase written as an IDL string. The codebase is a + * space-separated list of one or more URLs. + */ + const ComponentId TAG_JAVA_CODEBASE = 25 ; + + /** + * RMI-IIOP has multiple stream format versions. A server + * can specify its maximum version by including the + * TAG_RMI_CUSTOM_MAX_STREAM_FORMAT tagged component or + * rely on the default of version 1 for GIOP 1.2 and less + * and version 2 for GIOP 1.3 and higher. + * + * See Java to IDL ptc/02-01-12 1.4.11. + */ + const ComponentId TAG_RMI_CUSTOM_MAX_STREAM_FORMAT = 38 ; + + /** An array of tagged components, forming a multiple component profile. */ + typedef sequence MultipleComponentProfile; + + /** A service id, represented as an int */ + typedef unsigned long ServiceId; + + /** + * Service-specific information to be passed implicitly with requests + * and replies. Service contexts are composed of service ids and + * associated data. + */ + struct ServiceContext { + /** The service context id */ + ServiceId context_id; + + /** The data associated with this service context */ + sequence context_data; + }; + + /** An array of service contexts, forming a service context list. */ + typedef sequence ServiceContextList; + + /** + * Identifies a CDR encapsulation of the + * CosTSInteroperation.PropogationContext defined in + * CORBAservices: Common Object Services Specifications. + */ + const ServiceId TransactionService = 0; + + /** + * Identifies a CDR encapsulation of the + * CONV_FRAME.CodeSetContext defined in + * Section 13.10.2.5, "GIOP Code Set Service Context," on page 13-43. + */ + const ServiceId CodeSets = 1; + + /** + * Identifies a CDR encapsulation of the RMICustomMaxStreamFormat + * service context which contains a single byte specifying + * the client's maximum RMI-IIOP stream format version. + * + * See Java to IDL ptc/02-01-12 1.4.12. + */ + const ServiceId RMICustomMaxStreamFormat = 17 ; + + /** + * DCOM-CORBA Interworking uses three service contexts as defined in + * "DCOM-CORBA Interworking" in the "Interoperability with non-CORBA + * Systems" chapter. + *

+ * ChainBypassCheck carries a CDR encapsulation of the + * struct CosBridging.ChainBypassCheck. This is carried + * only in a Request message as described in Section 20.9.1, "CORBA + * Chain Bypass," on page 20-19. + */ + const ServiceId ChainBypassCheck = 2; + + /** + * DCOM-CORBA Interworking uses three service contexts as defined in + * "DCOM-CORBA Interworking" in the "Interoperability with non-CORBA + * Systems" chapter. + *

+ * ChainBypassInfo carries a CDR encapsulation of the + * struct CosBridging.ChainBypassInfo. This is carried + * only in a Reply message as described in Section 20.9.1, "CORBA Chain + * Bypass," on page 20-19. + */ + const ServiceId ChainBypassInfo = 3; + + /** + * DCOM-CORBA Interworking uses three service contexts as defined in + * "DCOM-CORBA Interworking" in the "Interoperability with non-CORBA + * Systems" chapter. + *

+ * LogicalThreadId, carries a CDR encapsulation of + * the struct CosBridging.LogicalThreadId as described + * in Section 20.10, "Thread Identification," on page 20-21. + */ + const ServiceId LogicalThreadId = 4; + + /** + * Identifies a CDR encapsulation of the + * IIOP.BiDirIIOPServiceContext defined in Section 15.8, + * "Bi-Directional GIOP," on page 15-55. + */ + const ServiceId BI_DIR_IIOP = 5; + + /** + * Identifies a CDR encapsulation of the IOR of the + * SendingContext.RunTime object (see Section 5.6, "Access + * to the Sending Context Run Time," on page 5-15). + */ + const ServiceId SendingContextRunTime = 6; + + /** + * For information on INVOCATION_POLICIES refer to the + * Asynchronous Messaging specification - orbos/98-05-05. + */ + const ServiceId INVOCATION_POLICIES = 7; + + /** + * For information on FORWARDED_IDENTITY refer to the + * Firewall specification - orbos/98-05-04. + */ + const ServiceId FORWARDED_IDENTITY = 8; + + /** + * Identifies a CDR encapsulation of a marshaled instance of a + * java.lang.Throwable or one of its subclasses as described in Java + * to IDL Language Mapping, Section 1.4.8.1, "Mapping of + * UnknownExceptionInfo Service Context," on page 1-32. + */ + const ServiceId UnknownExceptionInfo = 9; + + /** + * CORBA formal/02-06-01: 13.7.1: + * ExceptionDetailMessage identifies a CDR encapsulation of a wstring, + * encoded using GIOP 1.2 with a TCS-W of UTF-16. This service context + * may be sent on Reply messages with a reply_status of SYSTEM_EXCEPTION + * or USER_EXCEPTION. The usage of this service context is defined + * by language mappings.

+ * + * IDL/Java: ptc/02-01-22: 1.15.2: + * When a System Exception is marshaled, its GIOP Reply message shall + * include an associated ExceptionDetailMessage service context. The + * callee's stack trace is often very valuable debugging information but + * may contain sensitive or unwanted information. The wstring within the + * service context will therefore contain additional information relating + * to the exception, for example the result of calling either + * printStackTrace(PrintWriter) or getMessage() on the exception. When + * unmarshaling a System Exception on the client side, the wstring from + * any ExceptionDetailMessage service context shall become the Java error + * message in the unmarshaled exception object. + */ + const ServiceId ExceptionDetailMessage = 14; + + + // BEGIN part which lived in Interceptors.idl. + + /** + * An array of TaggedComponent objects. + */ + typedef sequence TaggedComponentSeq; + + /** + * The formats of IOR components and service context data used by ORB + * services are often defined as CDR encapsulations encoding instances + * of IDL defined data types. The Codec provides a mechanism + * to transfer these components between their IDL data types and their CDR + * encapsulation representations. + *

+ * A Codec is obtained from the CodecFactory. + * The CodecFactory is obtained through a call to + * ORB.resolve_initial_references( "CodecFactory" ). + */ + local interface Codec { + + /** + * This exception is thrown by Codec.encode or + * Codec.encode_value when the type is invalid for the + * encoding. For example, this exception is thrown if the encoding is + * ENCODING_CDR_ENCAPS version 1.0 and a type + * that does not exist in that version, such as wstring, + * is passed to the operation. + */ + exception InvalidTypeForEncoding {}; + + /** + * This exception is thrown by Codec.decode or + * Codec.decode_value when the data in the byte array + * cannot be decoded into an Any. + */ + exception FormatMismatch {}; + + /** + * This exception is thrown by decode_value when the given + * TypeCode does not match the given byte array. + */ + exception TypeMismatch {}; + + /** + * Converts the given any into a byte array based on the encoding + * format effective for this Codec. + * + * @param data The data, in the form of an any, to be encoded into + * a byte array. + * @return A byte array containing the encoded Any. This byte array + * contains both the TypeCode and the data of the type. + * @exception InvalidTypeForEncoding thrown if the type is not valid for + * the encoding format effective for this Codec. + */ + CORBA::OctetSeq encode (in any data) + raises (InvalidTypeForEncoding); + + /** + * Decodes the given byte array into an Any based on the encoding + * format effective for this Codec. + * + * @param data The data, in the form of a byte array, to be decoded into + * an Any. + * @return An Any containing the data from the decoded byte array. + * @exception FormatMismatch is thrown if the byte array cannot be + * decoded into an Any. + */ + any decode (in CORBA::OctetSeq data) raises (FormatMismatch); + + /** + * Converts the given any into a byte array based on the encoding + * format effective for this Codec. Only the data from the Any is + * encoded, not the TypeCode. + * + * @param data The data, in the form of an Any, to be encoded into + * a byte array. + * @return A byte array containing the data from the encoded any. + * @exception InvalidTypeForEncoding thrown if the type is not valid for + * the encoding format effective for this Codec. + */ + CORBA::OctetSeq encode_value (in any data) + raises (InvalidTypeForEncoding); + + /** + * Decodes the given byte array into an Any based on the given + * TypeCode and the encoding format effective for + * this Codec. + * + * @param data The data, in the form of a byte array, to be decoded + * into an Any. + * @param tc The TypeCode to be used to decode the data. + * @return An Any containing the data from the decoded byte array. + * @exception FormatMismatch thrown if the byte array cannot be + * decoded into an Any. + */ + any decode_value (in CORBA::OctetSeq data, in CORBA::TypeCode tc) + raises (FormatMismatch, TypeMismatch); + }; + + /** + * Defines an encoding format of a Codec, such as + * CDR Encapsulation (ENCODING_CDR_ENCAPS). + */ + typedef short EncodingFormat; + + /** + * The CDR Encapsulation encoding. + * @see CodecFactory + */ + const EncodingFormat ENCODING_CDR_ENCAPS = 0; + + /** + * Defines the encoding format of a Codec. This class + * details the encoding format, such as CDR Encapsulation encoding, and + * the major and minor versions of that format. + *

+ * The encodings currently supported are: + *

+ * Vendors are free to support additional encodings. + * + * @see ENCODING_CDR_ENCAPS + */ + struct Encoding { + /** + * The encoding format. + */ + EncodingFormat format; + + /** + * The major version of this Encoding format. + */ + octet major_version; + + /** + * The minor version of this Encoding format. + */ + octet minor_version; + }; + + /** + * Codecs are obtained from the CodecFactory. + * The CodecFactory is obtained through a call to + * ORB.resolve_initial_references( "CodecFactory" ). + */ + local interface CodecFactory { + /** + * This exception is thrown by CodecFactory.create_codec when + * the factory cannot create a Codec for a given encoding. + */ + exception UnknownEncoding {}; + + /** + * Create a Codec of the given encoding. + *

+ * @param enc The encoding for which to create a Codec. + * @return A Codec obtained with the given encoding. + * @exception UnknownEncoding thrown if this factory cannot create a + * Codec of the given encoding. + */ + Codec create_codec (in Encoding enc) raises (UnknownEncoding); + }; + + // END part which lived in Interceptors.idl. + +}; + +#endif // _IOP_IDL_