Kettle通过Http post要求webservice插口及其結果分析解决

kettle中有二种方法要求webservice服务项目,一个是Web服务查看,可是这一有缺陷,没法解决繁杂的要求,碰到这类状况就必须用Http post来解决了。

在网上也是有许多有关Http post要求webservice服务项目的,可是无一例外的都对要求回应后的結果沒有作出解决的实例教程,启用結果最后目地是为了更好地取得数据信息,有时回到的是一个xml格式的结合,就必须用【XML文档键入】来分析每一个连接点。而SOAP规范的回应結果不可以立即用【XML文档键入】开展分析,下边就对于这类状况该如何处理做一个简易的详细介绍。

变换脚本制作浏览:

关键包含获得自变量、设定主要参数(SOAP要求入参)、进行要求(Http post)、获得body(过虑soap回应結果)、解析xml等;

第一步:获得自变量

这儿界定入参的值,仿真模拟工作状况下上一流程传出去的主要参数,这儿立即设定初始值,在下一个流程中应用。

我这里界定了三个主要参数,各自为orgCode、deptCode、staffName。

第二步:设定主要参数

这儿主要是安裝SOAP插口主要参数文件格式界定入参,他有一定规范的文件格式,在其中深蓝色栏是插口的真真正正入参,变化规律的是鲜红色框,也就是上一步传进去的主要参数,根据占位符的方法取值。

这儿采用了E4C,E4C 是加上了对 XML 适用的 JavaScript 宣布规范,根据 E4C,能够根据申明自变量的方式 来申明 XML 目标自变量;

第三步:进行要求

必须填写插口详细地址,挑选字符集为UTF-8,上一流程传出去的入参,及回应結果自变量名字,此外依据插口状况很有可能还必须设定头顶部信息内容这类的,在Fields页面布局,我的插口不用,这儿也不做展现。

第四步:获得body

下边就是我的webService插口根据SoapUI专用工具检测的回应的結果实例:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ns2:getDataResponse xmlns:ns2="http://webservice.ks.com">
      <ns2:return>
        <result>
          <staff>
            <identityNo>身份证号0</identityNo>
            <employeNo>工型号0</employeNo>
            <spellCode>拼音码0</spellCode>
            <deptName>隶属部门名称0</deptName>
            <sexCode>性別编码0</sexCode>
            <staffNo>职工內部号0</staffNo>
            <sexName>性別名字0</sexName>
            <staffName>职工名字0</staffName>
            <account>帐户0</account>
            <staffBirthdate>出世日期0</staffBirthdate>
            <deptCode>隶属部门代码0</deptCode>
          </staff>
          <!-- 下列忽视一部分staff-->
        </result>
        <code>100</code>
        <success>true</success>
        <message>查看取得成功</message>
      </ns2:return>
    </ns2:getDataResponse>
  </soap:Body>
</soap:Envelope>

我的目地是获得到连接点result下的全部staff连接点的內容,因此 必须采用【XML文档键入】来分析这种连接点。可是假如立即把回应結果开展分析,无论挑选那一个连接点,实行的时候会出错:Can not apply XPath!

因此 必须根据JavaScript脚本制作分析回应結果,只获得Body下的传参內容:

在其中转义符变换能够忽视,由于我的webservice插口根据http post要求回到的結果将<>标记开展转义,因此 必须转成标记才能够开展下一步。

kettle中JavaScript脚本制作沒有replaceAll()涵数,因此 假如要更换全部就必须采用正则表达式去寻找要更换的內容。

最先是将Http post要求回应的字符串数组結果建立一个出XML目标,随后获得soap的类名及回应結果的类名,依据这种信息内容取得回应結果的body一部分,最终转成恢复出厂设置的字符串数组輸出。

最后responseXML为:

<ns2:getDataResponse xmlns:ns2="http://webservice.ks.com">
  <ns2:return>
    <result>
      <staff>
        <identityNo>身份证号0</identityNo>
        <employeNo>工型号0</employeNo>
        <spellCode>拼音码0</spellCode>
        <deptName>隶属部门名称0</deptName>
        <sexCode>性別编码0</sexCode>
        <staffNo>职工內部号0</staffNo>
        <sexName>性別名字0</sexName>
        <staffName>职工名字0</staffName>
        <account>帐户0</account>
        <staffBirthdate>出世日期0</staffBirthdate>
        <deptCode>隶属部门代码0</deptCode>
      </staff>
      <!-- 下列忽视一部分staff-->
    </result>
    <code>100</code>
    <success>true</success>
    <message>查看取得成功</message>
  </ns2:return>
</ns2:getDataResponse>

再用【XML文档键入】来分析responseXML就成功了

之后,我诧异的发觉,获得body这一流程那么繁杂,目地不便是只留getDataResponse吗,那么我是否能够根据replace()涵数把前后左右一部分除掉呢?

因此我的获得body流程变成了:

随后打印到Excel也是能够的:

评论(0条)

刀客源码 游客评论