首页 文章

如何从Karate将响应值传递给Java API

提问于
浏览
2

如何将值从Karate API传递到Java类?

如文档中所述,我使用以下代码片段从Java API获取响应 . 但它以未格式化的JSON内容返回响应 .

Map<String, Object> result = CucumberRunner.runClasspathFeature("demo/java/from-java.feature", args, true);

然后,我使用以下脚本来打印响应 .

for(Map.Entry<String , Object> entry: getMbrWksMembershipDetailsResponse.entrySet())
{
    if (entry.getKey().equalsIgnoreCase("response"))
    {
        System.out.println(entry.getValue());
    }
}

它显示像,

{soap:Envelope={_={soap:Body={ns1:getMbrWksMembershipDetailsResponse={_={ns4:WksMembershipSummaryResponse={_={ns2:customerSummary={ns2:address={ns2:city=SOUTH CHESTERFIELD, ns2:country=USA, ns2:isoCountryCode=US, ns2:line1=9998, N. MICHIGAN ROAD., ns2:postalCode=23834, ns2:state=VA}, ns2:allowPasswordChange=true, ns2:arpMember=false, ns2:brandCode=RCI, ns2:brandId=1, ns2:companyCode=RCI, ns2:eliteMemberRewardStatus=false, ns2:eliteRewardStatus=true, ns2:europePointsClubMember=false, ns2:firstName=FRANK, ns2:homePhone=804/733-3004, ns2:isoCurrencyCode=USD, ns2:isoLanguageCode=EN, ns2:language=EN, ns2:lastName=BROWNING B, ns2:locale=en_US, ns2:memberDeveloperRenewed=false, ns2:memberEnrolledDate=2009-10-26T00:00:00-04:00, ns2:memberEnrolledForDirectDebit=false, ns2:memberEnrolledForPltDirectDebit=false, ns2:memberStatus=A, ns2:middleName=B, ns2:msgTranslationLanguageCode=EN, ns2:officePhone=0/-0, ns2:pointsCurrencyCode=0......

因此,根据 Map 中的字段/标记拆分数据有点困难 .

请建议从Java API获取值字段wize / tag的最佳选项是什么 .

谢谢 .

1 回答

  • 0

    是的,XML在内部被认为是一个奇怪的 Map 结构,请参阅type-conversion一节以了解更多信息 .

    你有一个简单的方法来做到这一点 . 只需定义一个新变量 response 转换为字符串 .

    * xmlstring responseXml = response
    

    在此之后,您只需要从Java API返回的 Map 中获取 responseXml ,这将是一个字符串 .

    注意:除非您真的尝试将Karate与其他东西混合,否则不要使用Java API . 空手道的重点是避免使用Java来测试JSON和XML Web服务 .

相关问题