首页 > 解决方案 > 空手道: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 请求到达服务器时,这确实会产生问题。

您知道为什么会出现这种行为以及如何覆盖它吗?

标签: karate

解决方案


这很有趣,我只是尝试过,根本没有看到这个问题。我的猜测是您使用的 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

推荐阅读