Chain Builder ESB 之custom code

Chain Builder ESB心得之custom code
当我们在做chain Builder 流程配置时候,难免有一些现有的组件的功能无法满足我们的需要,而chain Builder 为我们提供了很好的自定义代码(custom code)功能,让我们在处理一些现有组件无法完成的功能时,能通过写自定义代码来实现。
建立自定义代码
1. 当我们的自定义代码是想在多个JBI 功能引用的,我们可以在ESB 工程中建立,而单独的作为一个JBI 工程的自定义代码,则在此JBI工程新建。
2. 界面分析

在工程右键新建-自定义代码,界面如上图所示,其中
2.1 类型:
˙Map User Operation --> 用于做映射时的自定义操作;
˙TrxID              --> 从信息中获得或设置TrxID 并返回
˙Upoc               --> 对终端消息链的自定义操作(如出错信息的监控)
˙Script Component   --> 可以自定义脚本组件
˙Etl Error Handler  --> 自定义ETL 组件的出错监控
2.2 语言:
˙java 完全支持java语言
˙Groovy 基于java 虚拟机的敏捷动态语言
实际应用介绍
1. Map User Operation 自定义代码
1.1 场景介绍:在做一次调用webServices返回一个附件信息(默认进行了base64 的编码),我们需要将附件映射到一个目标数据源中,需要对webServices返回的附件进行base64 的解码,将获得到的附件信息在保存到数据库中;
1.2 解决方案:在获得到webServices返回信息时候,映射时选择自定义操作,从而调用自定义代码,将webServices返回的附件信息,进行解码保存;自定义代码类名:StoreAttachmentFromByte

其核心代码如下:

public boolean process(String[] sources, Object[] sourcesDom,
			Node[] targetDom, Object[] targets,
			IMapOperationContext operationContext,
			IMapExecutionContext mapContext) throws Exception { 
		if (sources.length > 0) {
			if(sources.length > 1 && "false".equalsIgnoreCase(sources[1]))
			{
				logger.error("获得附件内容失败:"+mapContext.getMetadata("keyvalue"));
				if(sources.length > 2)
				{
					logger.error("webservice返回出错信息:"+sources[2]);
				}
				return false;
			}
			//对webservice 返回的sources[0] 进行base64解码,返回一个byte数组
			byte[] byteArry = Base64Util.decodeToByteArray(sources[0]); 
			String destCID = generateContentId();//生成一个附件ID
			DataSource ds = new ByteArrayDataSource(byteArry,"application/octet-stream");
			if (null != ds) {
				DataHandler dh = new DataHandler(ds);
				if (null != dh) {//将格式化的附件添加到目标数据中
					mapContext.setTargetAttachment(destCID, dh);
					targets[0] = destCID;
				}
			}
		} else {
			logger.error("No source argument provided:"+mapContext.getMetadata("keyvalue"));
			return false;
		}

		return true;
	}




你可能感兴趣的:(虚拟机,webservice,脚本,groovy)