Kettle+WebService+自动获取日期+xml解析并存入Oracle数据库

于2022年3月8日优化,操作更简单 新文章地址,可互应参考https://blog.csdn.net/RatherI/article/details/123350552https://blog.csdn.net/RatherI/article/details/123350552

Kettle 获取WebService数据 解析并存入Oracle数据库

工具

  1. kettle 9.1 (版本影响不大)
  2. oracle11g

官方模板

官方案例:E:\data-integration\samples\transformations   

流程简介

  1. 通过 生成记录 生成入参 
  2. 取巧 通过 变量替换 动态替换年月信息
  3. 通过 执行sql脚本 删除数据库的当前年月的数据,然后重新插入数据
  4. Web服务查询 请求WebService
  5. get data fro xml 解析xml 头数据
  6. 我这里因为回参未转义 所以用 JsScript代码 转义。也可以用字符串替换 来替换。或者有更好的方式欢迎留言
  7. get data fro xml 解析xml内容,需要对字段
  8. 表输出

遇到的问题

1. java.lang.IllegalArgumentException: Entity may not be null

对方提供的入参是 <ROOT><ND>2021</ND><YD>03</YD></ROOT>,然后就一直报错,他们也能查出来。就我查不出,可纳闷。

解决方式:在入参的时候 再包一层  <![CDATA[    你的入参    ]]>

<![CDATA[<ROOT><ND>2021</ND><YD>03</YD></ROOT>]]>

2.kettle回参&lt;<  &gt; > 转义了,导致不能解析

问题:虽然这样解决了 但是还遇到一个问题没解决,就是如果回参的字段里包含'<' '>'   比如:<MC>材料(<100元)</MC> 还是会无法解析,这个和接口商有关 让他们在字段添加 <![CDATA[  材料(<100元)   ]]>,或者直接让他们转义

解决方式: 这里取巧了,不知道有没有更好地方式。 使用的JsScript代码 进行的转义,或者使用字符串替换 替换掉。

//Script here
var result = result;
var xmlInfo = result.replace(/&lt;/g,"<").replace(/&amp;lt;/g,"<").replace(/&amp;gt;/g,">").replace(/&#xd;/g,"").replace(/&gt;/g,">");

如果使用字符串替换,替换内容按自己需要修改

3.动态年月条件

因为项目需要做定时任务,所以需要根据变量进行动态查询。

解决方式:给定一个字符串,使用字符串替换,替换成变量。可以在运行的时候填参数。

点击运行后,选择变量,进行填参数

4. Kettle获取系统时间做动态年月

上边是测试或者手动执行使用,因为要做定时任务,所以需要获取系统时间。

设置成变量以后在运行作业的时候 先运行这个设置变量,把变量存储后 使用变量

配置过程/细节

通过 生成记录 生成入参 

取巧 通过 变量替换 动态替换年月信息

通过 执行sql脚本 删除数据库的当前年月的数据,然后重新插入数据

Web服务查询 请求WebService

先上一张在页面访问的数据

get data fro xml 解析xml 头数据

*[name()='ExecQueryResponse']/*[name()='ExecQueryResult']

我这里因为回参未转义 所以用 JsScript代码 转义。也可以用字符串替换 来替换。

//Script here
var result = result;
var xmlInfo = result.replace(/&lt;/g,"<").replace(/&amp;lt;/g,"<").replace(/&amp;gt;/g,">").replace(/&#xd;/g,"").replace(/&gt;/g,">");

get data fro xml 解析xml内容,需要对字段

因为上一步传的值 是 xmlInfo

第二层解析

对回参数据:名称和XML路径 是一样 直接填回参的字段就可以

表输出

完活收工,如果有更好的方法可以留言一起分享学习

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值