尝试从Mule 4中的XML中删除命名空间时出错 [英] Error trying to remove a namespace from an XML in Mule 4
本文介绍了尝试从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屋!
查看全文