# iPaaS-API编排处理后报文传递问题
# 问题描述
在 iPaaS 平台的 API 编排流程中,当流程通过脚本或异常线(错误处理路径)等方式处理报文后,若希望将处理后的报文传递给后续业务图元作为请求报文,或以响应报文形式输出,常会遇到以下问题:
- 请求报文无法正常传递
- 无法返回响应报文
- 流程报错或挂起
# 原因分析
# 消息构建
在iPaaS中,需要将各种协议的数据和报文转换为统一的消息格式,以便在系统中传递。消息构建即是通过消息构建 API 创建符合 iPaaS 消息结构的标准消息对象。 详细的消息构建说明参考:消息构建 (opens new window)
# 消息结构
ESB 中传递的消息接口为 com.primeton.esb.message.ITipMessagePayload,包含以下四个部分:
- ProtocolHeader:消息的协议头
- MessageHeader:消息头
- SystemHeader:系统头
- MessagePayload:消息负载
如图:

API 编排引擎在执行流程时,需要明确的符合消息结构的 输入消息(inMessage) 和 输出消息(outMessage) 作为流程的最终传递或返回结果。当流程通过脚本、异常线等方式执行后,如果没有显式构建输入或输出消息,引擎将无法确定传递内容,从而导致流程异常。
# 解决方案
# 方案一:使用脚本图元赋值
在异常线后的流程中添加 Groovy 脚本图元,通过代码构建并设置输出消息(输入消息的构建方式类似,可参考实现)。
示例代码如下:
System.out.println("error:接口异常了")
helper.echo("error:接口异常了")
import java.util.HashMap;
import com.primeton.esb.message.ITipMessagePayload;
import com.primeton.esb.message.MessageConstants;
import com.primeton.esb.message.TipMessageBuilder;
ITipMessagePayload inMessage = context.inMessage;
TipMessageBuilder builder = TipMessageBuilder.withPayload("error:接口异常了");
HashMap<String, Object> messageHeaders = new HashMap<String, Object>();
builder.setSystemHeader(MessageConstants.MESSAGE_INVOKE_TYPE, MessageConstants.REQUEST_RESPONSE);
builder.setMessageHeaders(messageHeaders);
HashMap<String, Object> ph = inMessage.getProtocolHeaders();
ph.put("$http_protocol", "http");
ph.put("$tip_protocol", "HTTP/1.1");
ph.put("$tip_method", "POST");
ph.put("$tip_timeout", 200000);
ph.put("Cache-Control", "no-cache");
ph.put("Content-Length", "0");
ph.put("Accept-Encoding", "gzip,deflate,br");
ph.put("$tip_restful", false);
builder.setProtocolHeaders(ph);
ITipMessagePayload message = builder.build();
context.outMessage = message;
# 方案二:使用 Java 图元赋值
- 在脚本中打印异常信息,例如:
"接口异常了"; - 在 Java 图元 中构建响应报文,并赋值给
context.outMessage,如下图所示:


