karate - 空手道:XML 元素更改为具有空命名空间
问题描述
当 xml 消息定义如下时,空手道将空命名空间添加到子元素。
空手道功能
Feature: test xml
Scenario: test xml empty namespace
* def x =
"""
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<validateEmailAddressRequest xmlns="anotherUri">
<request>
<email>some@domain.com</email>
</request>
</validateEmailAddressRequest>
</soapenv:Body>
</soapenv:Envelope>
"""
* print x
输出
16:39:17.009 [main] INFO com.intuit.karate - [print] <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<validateEmailAddressRequest xmlns="anotherUri">
<request xmlns="">
<email>some@domain.com</email>
</request>
</validateEmailAddressRequest>
</soapenv:Body>
</soapenv:Envelope>HTML report: (paste into browser to view) | Karate version: 0.9.4
如果您查看<request>
输出中的元素,它现在具有空名称空间,而功能中没有。
当 SOAP 请求到达服务器时,这确实会产生问题。
您知道为什么会出现这种行为以及如何覆盖它吗?
解决方案
这很有趣,我只是尝试过,根本没有看到这个问题。我的猜测是您使用的 Java 运行时版本可能在 XML 库中有一些错误。你能帮我们一个忙并使用这个过程复制这个问题吗?https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue - 并确保您指定准确的 OS + Java 版本。
同时,作为一种解决方法,您可以这样做 - 将 XML 转换为字符串,执行 Java String.replace() 然后重新转换:
* xmlstring x = x
* xml x = x.replace(' xmlns=""', '')
* print x
编辑 - 这是提供解决方案的问题(在 1.2.0 及更高版本中可用)https://github.com/karatelabs/karate/issues/1587
* configure xmlNamespaceAware = true
推荐阅读
- go - Beego 跳过了一些迁移
- java - 想要并行运行 Apache Beam Pipeline
- python - 使用冒泡排序
- vba - 我可以让 Access 使用文件名的可变部分和文件名的固定部分自动命名文件导出吗
- javascript - 返回组件时如何重构&&()
- c# - 回滚迁移错误 不允许从数据类型 datetime 到 int 的隐式转换。使用 CONVERT 函数运行此查询
- c# - 为什么在我的 C# MVC 部署的应用程序中会触发此对象引用异常?
- mongodb - 从 mongo 集合中选择特定字段不起作用
- sql - AgensGraph 中的混合查询示例
- laravel - 如何将数据从一张表移动到另一张表?