尝试从Mule 4中的XML中删除命名空间时出错 [英] Error trying to remove a namespace from an XML in Mule 4

查看:0
本文介绍了尝试从Mule 4中的XML中删除命名空间时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我将所有有效负载env和xmlns替换为";";时,我看到这样的错误:当文档没有根";时,";尝试写入end_document。

它引发错误:

Message               : "Trying to write END_DOCUMENT when document has no root (ie. trying to output empty document, while writing Xml.
Trace:
  at main (Unknown)" evaluating expression: "payload.replaceAll("env:","").replaceAll("xmlns="http://decisionresearch.com/RateMaker"","")".
Element               : map_requestFlow/processors/0 @ map_request:map_request.xml:13 (Set Payload)
Element DSL           : <set-payload value="#[payload.replaceAll("env:","").replaceAll("xmlns="http://decisionresearch.com/RateMaker"","")]" doc:name="Set Payload" doc:id="7db57e88-dbd4-4a09-ba05-ea37fb9586fc"></set-payload>
Error type            : MULE:EXPRESSION
FlowStack             : at map_requestFlow(map_requestFlow/processors/0 @ map_request:map_request.xml:13 (Set Payload))

  (set debug level logging or '-Dmule.verbose.exceptions=true' for everything) 

Mule Flow:

<flow name="map_requestFlow" doc:id="21d0d652-3766-47ed-95aa-a451f62c5776" >
        <http:listener doc:name="Listener" doc:id="7312114b-2857-40b3-98cd-f52b628b3a28" config-ref="HTTP_Listener_config" path="/map"/>
        <set-payload value='#[payload.replaceAll("env:","").replaceAll("xmlns="http://decisionresearch.com/RateMaker"","")]' doc:name="Set Payload" doc:id="7db57e88-dbd4-4a09-ba05-ea37fb9586fc" />
        <logger level="INFO" doc:name="Logger" doc:id="21051f39-bb9f-412c-af73-f65051317757" message="#[payload]"/>
</flow>

输入负载:https://github.com/Manikandan99/Map_request/blob/main/soap_request.xml

预期输出:https://github.com/Manikandan99/Map_request/blob/main/soap_response.xml

我正在尝试使用

替换负载
#[payload.replaceAll("env:","").replaceAll("xmlns="http://decisionresearch.com/RateMaker"","")]

请帮助我解决此问题。

xml

如果您使用字符串操作来处理推荐答案,那么您很可能做错了。在其他编程语言中,您应该使用现有的库和框架来处理XML。在Mule中,您应该使用DataWeave转换。这有点直观,因为它需要使用很少使用的名称空间选择器。选择器返回命名空间URL,而不是名称。我创建了这个简单的函数来从输出中删除名称空间:

%dw 2.0
output application/xml
fun removeNamespace(element,namespaceName) =
  element mapObject (value, key) -> 
            (if (key.# as String == namespaceName) (key as String) else (key)) @((key.@)) : (
                if (value is Object) removeNamespace(value, namespaceName)                             else value
            )
---
removeNamespace(payload, "http://schemas.xmlsoap.org/soap/envelope/")

这篇关于尝试从Mule 4中的XML中删除命名空间时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆