CORBARequest 节点构建消息

您可以将 XML 消息用于 CORBARequest 节点,也可以使用另一个消息流节点来构建消息。

准备工作

确保已创建并配置具有 CORBARequest 节点的消息流,如 使用 CORBARequest 节点开发消息流中所述。

关于此任务

CORBARequest 节点需要输入消息。 该节点可以使用来自另一个节点的 XML 消息,也可以使用 ComputeJavaCompute 节点来构建消息。 如果入局消息具有消息模型,那么可以使用 映射 节点来构建要发送到 CORBARequest 节点的消息。 入局消息树必须位于 DataObject 域中,并且树中的元素必须匹配调用的 IDL 接口。 DataObject 域中消息的物理表示是 XML;因此,应用程序构造类似于以下示例的消息体。

您可以在入局消息树中指定从中检索数据以构成 CORBARequest 节点发送的请求的位置。 使用“请求”选项卡上的数据位置属性指定此位置。 缺省值为 $Body

过程

  1. 查找要发送到 CORBARequest 节点的消息主体中需要的数据。
  2. 指定需要发送到 CORBARequest 节点的消息的顶级元素 (interface.operationName)。
  3. 为每个 in 和 inout 参数指定一个子代。 您不必传入 out 参数的值。

示例

以下示例显示消息流可收到的 XML 和 ESQL。

混合 inout 和 out 参数

以下是 IDL 文件的示例:
interface 

ExampleOne {
	enum completion{YES, NO, MAYBE};
 	typedef sequence<string> stringlist;
	struct stringobject {string member;};

	string exampleOneOperation(in string inparamA, inout string inoutparamA, out string outparamA);
	completion exampleOneOperationB(in stringlist inparamB, inout stringobject inoutparamB, out completion outparamB);
}
此 IDL 文件包含具有两个操作的接口,其中包含一个 in 参数、一个 inout 参数和一个 out 参数。

对于第一个操作 exampleOneOperationA,必须在顶级类型 ExampleOne.exampleOneOperationA 下传入参数 inparamAinoutparamA。 无需传入 outparamA 参数。

以下是 XML 示例:
<ExampleOne.exampleOneOperationA>
	<inparamA>your value</inparamA>
	<inoutparamA>your value</inoutparamA>
</ExampleOne.exampleOneOperationA>
以下是 ESQL 示例:
SET  
OutputRoot.DataObject."ExampleOne.exampleOneOperationA".inparamA = 'yourvalue';

SET  
OutputRoot.DataObject."ExampleOne.exampleOneOperationA".inoutparamA = 'yourvalue'; 
对于第二个操作 exampleOneOperationB,您必须在顶级类型 ExampleOne.exampleOneOperationB 下传入参数 inparamBinoutparamB。 无需传入 outparamB 参数。
以下是 XML 示例:
<ExampleOne.exampleOneOperationB>
	<inparamB><item>your value</item></inparamB>
	<inoutparamB><member>your value</member></inoutparamB>
</ExampleOne.exampleOneOperationB>
以下是 ESQL 示例:
SET  
OutputRoot.DataObject."ExampleOne.exampleOneOperationB".inparamB.item = 'your value';

SET  
OutputRoot.DataObject."ExampleOne.exampleOneOperationB".inoutparamB.member = 'your value'

仅 in 和 inout 参数

以下是 IDL 文件的示例:
interface 

ExampleTwo {
	enum completion{YES, NO, MAYBE};
	typedef sequence<string> stringlist;
	struct stringobject {string member;};

	string exampleTwoOperationA(in string inparamA, inout string inoutparamA);
	completion exampleTwoOperationB(in stringlist inparamB, inout stringobject inoutparamB);

}
此 IDL 文件包含仅含 in 和 inout 参数的两个操作。 移除 out 参数且仅保留 in 和 inout 参数不会更改需要传入的参数。

要调用第一个操作 exampleTwoOperationA,请在顶级类型 ExampleTwo.exampleTwoOperationA 下传入 inparamAinoutparamA

以下是 XML 示例:
<ExampleTwo.exampleTwoOperationA> 
	<inparamA>your value</inparamA>
	<inoutparamA>your value</inoutparamA>
</ExampleTwo.exampleTwoOperationA>
以下是 ESQL 示例:
SET  
OutputRoot.DataObject."ExampleTwo.exampleTwoOperationA".inparamA = 'yourvalue';

SET  
OutputRoot.DataObject."ExampleTwo.exampleTwoOperationA".inoutparamA = 'yourvalue'; 
要调用第二个操作 exampleTwoOperationB,请在顶级类型 ExampleTwo.exampleTwoOperationB 下传入 inparamBinoutparamB
以下是 XML 示例:
<ExampleTwo.exampleTwoOperationB>
	<inparamB><item>your value</item></inparamB>
	<inoutparamB><member>your value</member></inoutparamB>
</ExampleTwo.exampleTwoOperationB>
以下是 ESQL 示例:
SET  
OutputRoot.DataObject."ExampleTwo.exampleTwoOperationB".inparamB.item = 'your value';

SET  
OutputRoot.DataObject."ExampleTwo.exampleTwoOperationB".inoutparamB.member = 'your value';

无参数或仅 out 参数

如果操作不包含参数或者仅包含 out 参数,那么无需向消息体添加任何内容。 CORBARequest 节点不查看入局消息。

后续操作

处理来自 CORBARequest的响应,如 处理来自 CORBARequest 节点的响应中所述。