本主题仅适用于 IBM Business Automation Workflow Advanced 配置。

动态调用组件

模块调用具有 Web Service 描述符语言 (WSDL) 端口类型接口的组件时,此模块必须使用 invoke() 方法以动态调用此组件。

准备工作

此任务假定调用组件将动态调用组件。

关于本任务

对于 WSDL 端口类型接口,调用主机必须使用 invoke() 方法来调用该组件。 调用模块还可以通过此方式调用具有 Java™ 接口的组件。

过程

  1. 确定包含所需组件的模块。
  2. 确定该组件所需的数组。
    输入数组可以是下列其中一种类型:
    • 基本大写 Java 类型或此类型的数组
    • 普通 Java 类或类的数组
    • 服务数据对象 (SDO)
  3. 定义数组以包含来自组件的响应。

    响应数组可与输入数组为同一类型。

  4. 使用 invoke() 方法来调用所需组件并将数组对象传递至该组件。
  5. 处理结果。

动词调用组件的示例

在以下示例中,模块使用 invoke () 方法来调用使用基本大写 Java 数据类型的组件。
Service service = (Service)serviceManager.locateService("multiParamInf");
		
		Reference reference = service.getReference();

		OperationType methodMultiType = 
				reference.getOperationType("methodWithMultiParameter");

		Type t = methodMultiType.getInputType();

		BOFactory boFactory = (BOFactory)serviceManager.locateService
				("com/ibm/websphere/bo/BOFactory");

		DataObject paramObject = boFactory.createbyType(t);

		paramObject.set(0,"input1")
		paramObject.set(1,"input2")
		paramObject.set(2,"input3")

		service.invoke("methodMultiParamater",paramObject);

以下示例使用调用方法并将 WSDL 端口类型接口作为目标。

Service serviceOne = (Service)serviceManager.locateService("multiParamInfWSDL");
	
	DataObject dob = factory.create("http://MultiCallWSServerOne/bos", "SameBO");
			dob.setString("attribute1", stringArg);

	DataObject wrapBo = factory.createByElement
		("http://MultiCallWSServerOne/wsdl/ServerOneInf", "methodOne");
			wrapBo.set("input1", dob); //wrapBo encapsulates all the parameters of methodOne
			wrapBo.set("input2", "XXXX");
			wrapBo.set("input3", "yyyy");

	DataObject resBo= (DataObject)serviceOne.invoke("methodOne", wrapBo);