























场景:有小伙伴私聊我咨询,使用kettle调用his相关接口时,入参和响应数据均为xml结构报文,无法掉通接口。今天咱们一起来梳理下如何解决这种问题。
1、添加jar文件
1)将staxon-1.3.jar、hutool-all-5.6.0.jar、xiaojingang-https-0.0.1-SNAPSHOT.jar三个jar文件放到kettle的lib目录下。
2)重启spoon。

2、设计转换
1)生成记录,分别设置reqJson和respXml两个字段数据。
2)JavaScript代码,调用jar中的方法进行转换。
3)写日志,打印转换结果。

3、生成记录

reqJson值为json
{
"Request": {
"MessageHeader": {
"Sender": "PIS",
"Receiver": "OAI",
"SendTime": "20240816011001",
"EventType": "MDM_USERS",
"Msgld": "TEST20241107000001"
},
"MessageBody": {
"WorkDept": "1001231"
}
}
}
respXml
<Response>
<MessageHeader>
<Sender>OAI</Sender>
<Receiver>PIS</Receiver>
<SendTime>20240816011001</SendTime>
<EventType>ACK_MDM_USERS</EventType>
<Msgld>TEST20241107000001</Msgld>
</MessageHeader>
<MessageBody>
<UserList>
<User>
<UserId>986306638453809870</UserId>
<WorkNo>0153</WorkNo>
<FullName>哈利</FullName>
<Category>1</Category>
<CategoryDesc>医院职工</CategoryDesc>
<WorkDept>1001231</WorkDept>
<WorkDeptName>病理科</WorkDeptName>
<JobStatus>1</JobStatus>
<JobStatusName>在职</JobStatusName>
<WorkPost>1</WorkPost>
<WorkPostName>医师</WorkPostName>
<WorkProfessional>306</WorkProfessional>
<WorkProfessionalName>副主任医师</WorkProfessionalName>
<Duty>0</Duty>
<DutyName>无</DutyName>
<MplFlag>Y</MplFlag>
<Mobile>136xxxx1868</Mobile>
<IdCard>420682xxxxxxxx0024</IdCard>
<OfficePhone/>
<Email/>
<PinyinCode>HH</PinyinCode>
<WubiCode>AN</WubiCode>
<ActiveStatus>1</ActiveStatus>
<ActiveStatusDesc>启用</ActiveStatusDesc>
<LockStatus>1</LockStatus>
<LockStatusDesc>正常</LockStatusDesc>
<HospitalCode>H0000</HospitalCode>
<NpCode>D420682002681</NpCode>
</User>
<User>
<UserId>271770908087827448</UserId>
<WorkNo>0467</WorkNo>
<FullName>波特</FullName>
<Category>1</Category>
<CategoryDesc>医院职工</CategoryDesc>
<WorkDept>1001231</WorkDept>
<WorkDeptName>病理科</WorkDeptName>
<JobStatus>1</JobStatus>
<JobStatusName>在职</JobStatusName>
<WorkPost>4</WorkPost>
<WorkPostName>医技</WorkPostName>
<WorkProfessional/>
<WorkProfessionalName/>
<Duty>0</Duty>
<DutyName>无</DutyName>
<MplFlag>Y</MplFlag>
<Mobile>138xxxx8821</Mobile>
<IdCard>420620xxxxxxxx0017</IdCard>
<OfficePhone/>
<Email/>
<PinyinCode>ZKF</PinyinCode>
<WubiCode>UDN</WubiCode>
<ActiveStatus>1</ActiveStatus>
<ActiveStatusDesc>启用</ActiveStatusDesc>
<LockStatus>1</LockStatus>
<LockStatusDesc>正常</LockStatusDesc>
<HospitalCode>H0000</HospitalCode>
<NpCode>HJ420682001896</NpCode>
</User>
</UserList>
<Result>
<Code>CA</Code>
<Desc>成功</Desc>
</Result>
</MessageBody>
</Response>
3、JavaScript代码转换
在javascript代码中调用jar文件中的方法进行转换。

//Script here
var staxonUtils=new Packages.com.xiaojingang.xiaojingang_https.StaxonUtils();
//将json转换为xml
//var xmlStr = staxonUtils.json2xml(reqJson);
var xmlStr = staxonUtils.json2PrettyXml(reqJson);
xmlStr=xmlStr.replace("<?xml version='1.0'?>",'');
//将xml转换为json
var jsonStr =staxonUtils.xml2json(respXml);
4、运行

5、完善
解决了xml和json互转难题之后,在加上rest client接口请求步骤即可解决开头说到的问题。


此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。