kettle从入门到精通 第117课 ETL之kettle,kettle调用his接口,入参和响应数据均为xml结构

场景:有小伙伴私聊我咨询,使用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。

4a21f29f-d019-4a23-933a-6adb7cd6177a

 

2、设计转换

1)生成记录,分别设置reqJson和respXml两个字段数据。

2)JavaScript代码,调用jar中的方法进行转换。

3)写日志,打印转换结果。

6562f662-6b4d-4cbf-82a2-1d1cab6033f0

 3、生成记录

6e13ff56-9a4b-4629-b0e6-9d17b6ed4ea7

 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文件中的方法进行转换。

a17f139a-01d9-49c4-b8e3-a0f2eb7ae48a

 

//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、运行

58db62f6-68cd-4537-98bb-936848debbcd

 5、完善

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

fae735b2-71a6-41b3-91b2-8493aa831b6f

 

  

image

 

posted @ 2026-02-12 21:54  慕容尘轩  阅读(61)  评论(0)    收藏  举报