IDL 数据类型

在将 DataObject 域用于 CORBA 时,您需要了解 XML 模式和 ESQL 类型如何与 IDL 文件中的类型保持一致。

原语 IDL 类型

下表显示 IDL 类型、XML 模式简单类型和 ESQL 类型之间的映射。
IDL XML 模式 ESQL
boolean xsd:boolean BOOLEAN
char
<xsd:simpleType name="char">
<xsd:restriction base="xsd:string">
<xsd:length value="1" fixed="true/>
</xsd:restriction>
</simpleType>
字符
wchar
<xsd:simpleType name="wchar">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
字符
double xsd:double FLOAT
float xsd:float FLOAT
octet xsd:unsignedByte INTEGER
long xsd:int INTEGER
Long long xsd:long INTEGER
short xsd:short INTEGER
字符串 xsd:string 字符
wstring xsd:string 字符
Unsigned short xsd:unsignedShort INTEGER
Unsigned long xsd:unsignedInt INTEGER
Unsigned long long xsd:unsignedLong DECIMAL

复杂 IDL 类型

IBM® App Connect Enterprise 支持以下复杂的IDL类型:
  • 枚举
  • 类型定义
  • 序列
  • 结构
在以下位置支持各个复杂类型:
  • 操作的返回类型
  • In 参数
  • Inout 参数
  • Out 参数
  • 内部异常
  • 内部结构
  • 内部序列
  • 内部类型定义
以下示例显示 IDL 类型、XML 模式和 XML 之间的映射。
枚举
IDL 枚举映射到 XML 模式中的枚举。 树中的枚举是字符串类型。
以下是 IDL 文件的示例:
enum myEnum {A, B, C};
interface example {
	void myoperation(in myEnum input1);
};
以下是 XML 模式的示例:
<xsd:simpleType name="myEnum">
	<xsd:restriction base="xsd:string"> 
		<xsd:enumeration value="A"/> 
		<xsd:enumeration value="B"/>
		<xsd:enumeration value="C"/>
	</xsd:restriction> 
</xsd:simpleType>
以下是 XML 示例:
<example.myoperation>
	<input1>A</input1>
</example.myoperation>
序列和类型定义
IDL 类型定义映射到 XML 模式类型限制。 IDL 序列映射到 XML 模式序列复杂类型。 序列只能在类型定义中使用。
以下是 IDL 文件的示例:
Typedef long myLong; 
typedef sequence<long> longSeq; 
interface example { 	
	void myoperation(in longSeq input1, inout myLong input2); 
};  
以下是 XML 模式的示例:
<xsd:complexType name="longSeq"> 
	<xsd:sequence> 
		<xsd:element name="item" minOccurs="0" maxOccurs="unbounded" type="xsd:int"/>
	</xsd:sequence>
</xsd.complexType>
序列可与语法序列<long, 10>绑定,该序列将绑定置于 XSD 文件中。
以下是 XML 示例:
<example.myoperation>
	<input1>
		<item>10</item>
		<item>11</item>
		<item>12</item>
	</input1>
</example.myoperation>
结构
IDL 结构映射到 XML 模式 complexType 定义。
以下是 IDL 文件的示例:
struct myStruct { 
	char c; 
	string str;
	octet o; 
	short s; 
	unsigned long long ull; 
	float f; 
	double d; 
};
interface example {
	void myoperation(in myStruct input1);
};
以下是 XML 模式的示例:
<xsd:complexType name="myStruct">
	<xsd:sequence>
		<xsd:element name="c" type="xsd:string" maxOccurs="1" minOccurs="1"/> 
		<xsd:element name="str" type="xsd:string" nillable="true" maxOccurs="1" minOccurs="1"/>
		<xsd:element name="o" type="xsd:byte" maxOccurs="1" minOccurs="1"/> 
		<xsd:element name="s" type="xsd:short" maxOccurs="1" minOccurs="1"/> 
		<xsd:element name="ull" type="xsd:unsignedLong" maxOccurs="1" minOccurs="1"/>
		<xsd:element name="f" type="xsd:float" maxOccurs="1" minOccurs="1"/>
		<xsd:element name="d" type="xsd:double" maxOccurs="1" minOccurs="1"/> 
	</xsd:sequence>
</xsd:complexType>
以下是 XML 示例:
<example.myoperation>
	<input1>
		<c>c</c>
		<str>hello</str>
		<o>12</o>
		<s>10</s>
		<ull>110</ull>
		<f>12.0</f>
		<d>12.1</d>
	</input1>
</example.myoperation>

模块

在 CORBA 中模块提供作用域。 如果 IDL 文件的模块中包含接口,那么将通过以下格式利用模块名称限定接口名称:
模块名.接口名.操作名
以下示例显示 IDL 文件中的模块。
Module one {
	Interface OneAInterface {
	};
};
名为 OneAInterface 的接口的标准名称是 one.OneAInterface。 在 IDL 文件中,模块可以嵌套在其他模块中。 在此情况下,接口的标准名称可以包含多个模块名称,从根模块开始;例如:
模块名 A.模块名 B.接口名.操作名
IDL 文件可以包含具有相同名称的多个操作,前提是操作位于不同的模块中。