如何解决Mule 4:将数据映射到 SOAP 响应的问题,命名空间不同
我在使用 apikit for SOAP 将传出数据映射到 SOAP 响应时遇到问题。
响应应该是这样的:
USE_SAP_PY_JWT = true
但这就是响应的样子:
<Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<getPricesResponse xmlns:ns4="http://sax.xml.org/xsd" xmlns:ns3="http://sql.java/xsd" xmlns:ns2="http://some.soap.service.pl" xmlns="http://some.soap.service.pl/xsd">
<return>
<dealerNoNabywca xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
<dealerNoOdbiorca xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
<errorType>
VIN_NOT_FOUND
</errorType>
<price1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
<price2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
<price3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
<resultStatus>
0
</resultStatus>
</return>
</getPricesResponse>
</Body>
</Envelope>
这是 Dataweave 转换器:
<Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<getPricesResponse xmlns:ns0="http://some.soap.service.pl">
<return>
<dealerNoNabywca xmlns:ns01="http://some.soap.service.pl/xsd" />
<dealerNoOdbiorca xmlns:ns01="http://some.soap.service.pl/xsd" />
<errorType xmlns:ns01="http://some.soap.service.pl/xsd">
VIN_NOT_FOUND
</errorType>
<price1 xmlns:ns01="http://some.soap.service.pl/xsd" />
<price2 xmlns:ns01="http://some.soap.service.pl/xsd" />
<price3 xmlns:ns01="http://some.soap.service.pl/xsd" />
<resultStatus xmlns:ns01="http://some.soap.service.pl/xsd">
0
</resultStatus>
</return>
</getPricesResponse>
</Body>
</Envelope>
据我所知,XML 命名空间存在某种问题,但我不知道如何使用正确的命名空间使响应看起来像它应该的样子......有没有办法让我当前的响应看起来像预期的反应?
解决方法
我看到的唯一问题是您的脚本使用的命名空间与 getPricesResponse 的预期结果不同。这可以通过在脚本中使用 ns01 轻松解决。添加 XSI 属性和命名空间可为您提供语义等效的结果。
有一些不影响语义的差异。命名空间 ns2、ns3、ns4 未使用,因此 DataWeave 没有理由添加它们,它们也不在脚本中。
另一个区别是 DataWeave 似乎不允许默认命名空间。这只是语法糖,不会改变任何标准 XML 解析器的含义。
示例:
output application/java
ns ns01 http://some.soap.service.pl/xsd
ns xsi http://www.w3.org/2001/XMLSchema-instance
---
{
body: {
ns01#getPricesResponse: {
ns01#return: {
ns01#dealerNoNabywca @(xsi#nil: true): "",ns01#dealerNoOdbiorca @(xsi#nil: true): "",ns01#errorType: "",ns01#price1 @(xsi#nil: true): "",ns01#price2 @(xsi#nil: true): "",ns01#price3 @(xsi#nil: true): "",ns01#resultStatus: ""
}
}
} write "application/xml"
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。