浏览 1581 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-10-22
最后修改:2010-05-12
当我们在做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; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |