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

调用Amadeus服务时SOAP WSDL动态请求体异常:自动添加多余标签

问题原因与解决方案

一、多余前缀ota_2003_05的原因

ota_2003_05是npm soap库自动生成的命名空间前缀,对应WSDL中定义的http://www.opentravel.org/OTA/2003/05命名空间。你的预期请求使用默认命名空间(通过xmlns="http://www.opentravel.org/OTA/2003/05"声明),而soap库默认用显式前缀标识命名空间,从而生成了多余的前缀标签。

二、@HotelCode变成子元素的原因

soap库识别XML属性的规则不是@前缀,而是需要用$或_attr字段定义属性。你用@HotelCode的写法会被库判定为普通子元素名,因此生成了错误的<ota_2003_05: @HotelCode>标签。

三、具体解决方案

1. 修正XML属性的写法

将请求体中的属性用$字段包裹(soap库标准写法):

const inputBody = {
    // 根元素的属性
    $: {
        EchoToken: "PartialWithParsing",
        Version: "6.001",
        PrimaryLangID: "en"
    },
    HotelDescriptiveInfos: {
        HotelDescriptiveInfo: {
            // HotelDescriptiveInfo的属性
            $: {
                HotelCode: 'RTNYCNOV'
            }
        }
    }
};

2. 配置客户端使用默认命名空间

创建客户端时通过选项指定默认命名空间,避免生成前缀:

soap.createClient(filePath, {
    overrideRootElement: {
        namespace: 'http://www.opentravel.org/OTA/2003/05',
        xmlnsAttributes: [{
            name: 'xmlns',
            value: 'http://www.opentravel.org/OTA/2003/05'
        }]
    }
}, (err, client) => {
    if (err) {
        console.log(err);
        return;
    }
    client.Hotel_DescriptiveInfo(inputBody, {namespace: 'http://www.opentravel.org/OTA/2003/05'}, (err: any, data: any) => {
        if (err) {
            console.log("err ====", err)
        }
        console.log("data == ", data)
    })
});

3. 备选:手动修改命名空间前缀映射

如果上述配置无效,可在客户端创建后手动调整前缀映射,将目标命名空间的前缀设为空:

soap.createClient(filePath, (err, client) => {
    if (err) {
        console.log(err);
        return;
    }
    // 空前缀对应目标命名空间,消除显式前缀
    client.wsdl.xmlnsInEnvelope = {'': 'http://www.opentravel.org/OTA/2003/05'};
    client.Hotel_DescriptiveInfo(inputBody, (err: any, data: any) => {
        if (err) {
            console.log("err ====", err)
        }
        console.log("data == ", data)
    })
});

内容的提问来源于stack exchange,提问作者radhika thakkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:14:56