You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataWeave读取XML时参数类型不匹配报错,请求技术解决

DataWeave读取XML报错排查与解决

尝试将XML文件转换为纯文本文件时,DataWeave执行报错。以下是相关输入、脚本及错误信息:

输入XML文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ds:tfmDataService xmlns:nxcm="urn:us:gov:dot:faa:atm:tfm:flightdatacommonmessages"
    xmlns:fdm="urn:us:gov:dot:faa:atm:tfm:flightdata"
    xmlns:ns4="urn:us:gov:dot:faa:atm:tfm:ficommondatatypes"
    xmlns:ds="urn:us:gov:dot:faa:atm:tfm:tfmdataservice"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns6="http://www.fixm.aero/tfm/3.1"
    xmlns:ns8="http://www.faa.aero/nas/3.1" xmlns:ns13="urn:us:gov:dot:faa:atm:tfm:rapttimeline"
    xmlns:ns9="urn:us:gov:dot:faa:atm:tfm:ficommonmessages2"
    xmlns:ns12="urn:us:gov:dot:faa:atm:tfm:flowinformation"
    xmlns:ns11="urn:us:gov:dot:faa:atm:tfm:ficommonmessages"
    xmlns:ns10="urn:us:gov:dot:faa:atm:tfm:tfmrequestreplytypes"
    xmlns:ns16="http://www.fixm.aero/foundation/3.0" xmlns:ns15="http://www.fixm.aero/flight/3.0"
    xmlns:ns14="http://www.fixm.aero/base/3.0"
    xmlns:nxce="urn:us:gov:dot:faa:atm:tfm:tfmdatacoreelements">
    <ds:fltdOutput>
        <fdm:fltdMessage sensitivity="R" cdmPart="true" airline="RPA" major="UAL"
            sourceFacility="TFMS" sourceTimeStamp="2023-02-27T00:02:36Z" flightRef="28062242"
            acid="RPA3489" msgType="FlightControl" fdTrigger="TMI_UPDATE" depArpt="CYYZ"
            arrArpt="KEWR" sensReason="DR">
            <fdm:ncsmFlightControl>
                <nxcm:qualifiedAircraftId userCategory="COMMERCIAL" aircraftCategory="JET">
                    <nxce:aircraftId>RPA3489</nxce:aircraftId>
                    <nxce:computerId>
                        <nxce:facilityIdentifier>TFMS</nxce:facilityIdentifier>
                        <nxce:idNumber>555</nxce:idNumber>
                    </nxce:computerId>
                    <nxce:gufi>KC81743100</nxce:gufi>
                    <nxce:igtd>2023-02-26T23:30:00Z</nxce:igtd>
                    <nxce:departurePoint>
                        <nxce:airport>CYYZ</nxce:airport>
                    </nxce:departurePoint>
                    <nxce:arrivalPoint>
                        <nxce:airport>KEWR</nxce:airport>
                    </nxce:arrivalPoint>
                </nxcm:qualifiedAircraftId>
                <nxcm:etd timeValue="2023-02-27T00:11:00Z" etdType="PROPOSED" />
                <nxcm:eta timeValue="2023-02-27T00:36:00Z" etaType="ESTIMATED" />
                <nxcm:controlIndicator>CONTROL_ACTIVE</nxcm:controlIndicator>
                <nxcm:ncsmControlData>
                    <nxcm:ctd>2023-02-27T00:11:00Z</nxcm:ctd>
                    <nxcm:cta>2023-02-27T00:36:00Z</nxcm:cta>
                    <nxcm:octd>2023-02-27T00:14:00Z</nxcm:octd>
                    <nxcm:octa>2023-02-27T01:18:00Z</nxcm:octa>
                    <nxcm:controlElement>EWR</nxcm:controlElement>
                    <nxcm:controlProgramType>GDP</nxcm:controlProgramType>
                </nxcm:ncsmControlData>
            </fdm:ncsmFlightControl>
        </fdm:fltdMessage>
    </ds:fltdOutput>
</ds:tfmDataService>

DataWeave脚本

%dw 2.0
import * from dw::core::Strings
var myInput = read(payload, 'application/xml')
output text/plain
---
"abc"

报错信息

You called the function 'AnonymousFunction' with these arguments: 
  1: Object (do {ns ds urn:us:gov:dot:faa:atm:tfm:tfmdataservice---{ds#tfmDataService: {ds...)
  2: String ("application/xml")

But it expects arguments of these types:
  1: String | Binary
  2: String
  3: Object


3| var myInput = read(payload, 'application/xml')
                 ^^^^
Trace:
  at main::main (line: 3, column: 15)

问题原因与解决方法

原因

read()函数要求第一个参数必须是String或Binary类型,但当前的payload已经被Mule Runtime自动解析为XML对象(结构化的Object类型),因此传入read()会触发类型不匹配的错误。

解决方法

不需要手动调用read()函数,直接使用已解析好的payload即可。根据需求可以选择两种处理方式:

1. 提取XML字段生成自定义纯文本

直接从解析后的payload中提取需要的字段,拼接成目标格式:

%dw 2.0
output text/plain
---
"航班信息:
航班号: " ++ payload.ds#tfmDataService.ds#fltdOutput.fdm#fltdMessage.@acid ++ "
起飞机场: " ++ payload.ds#tfmDataService.ds#fltdOutput.fdm#fltdMessage.@depArpt ++ "
到达机场: " ++ payload.ds#tfmDataService.ds#fltdOutput.fdm#fltdMessage.@arrArpt ++ "
预计起飞时间: " ++ payload.ds#tfmDataService.ds#fltdOutput.fdm#fltdMessage.fdm#ncsmFlightControl.nxcm#etd.@timeValue ++ "
预计到达时间: " ++ payload.ds#tfmDataService.ds#fltdOutput.fdm#fltdMessage.fdm#ncsmFlightControl.nxcm#eta.@timeValue

2. 输出原始XML文本

如果需要直接输出原始XML内容,可使用write()函数将解析后的对象转回XML格式:

%dw 2.0
output text/plain
---
write(payload, "application/xml")

内容的提问来源于stack exchange,提问作者aditya parkhe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 13:59:56