空手道-无法将java.util.LinkedHashMap转换为java.util.List

时间:2018-12-18 16:15:02

标签: karate

我需要将XML文件与Json响应的文件进行比较。以下是原始xml文件的简短版本,JSON和XML具有不同的属性名称,因为我无法直接比较它们。我需要调用函数来格式化xml,以便可以与json进行比较。在此过程中,运行以下代码后,出现错误Cannot cast java.util.LinkedHashMap to java.util.List

* xml list = $Test1/Body
* print list

* def xpath = function(x, p){ try { return karate.xmlPath(x, p) } catch (e) { return '#notpresent' } }
* def fun = function(x){ return { code: xpath(x, '/Body/code') } }
* def temp = karate.map(list, fun)
* print temp

Test1是一个xml文件,其中包含以下示例数据;

<ns9:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns5:plan">
  <ns4:code>XPBSMWAT</ns4:code>
</ns9:Body>

这是XML数据的简单版本;我的实际xml文件更大。

1 个答案:

答案 0 :(得分:2)

karate.map包含2个参数列表和一个函数,

根据您的问题,

* xml list = $Test1/Body

变量名list实际上是您定义的xml数据类型,不是列表

空手道将XML / JSON用作java.util.LinkedHashMap,因为您将XML作为输入传递给映射函数,该函数试图将其强制转换为List并失败。

所以应该是这样,

* def list = <something>

但是请确保它返回列表而不是xml

  

您的xml路径$Test1/Body返回xml

     

打印列表时,您会看到它被 [和   ]

我不太确定您要使用此xml和JS函数做什么,但这可能是导致您收到错误的根本原因。