node soap 从方法中删除 xmlns 属性
node soap remove xmlns attribute from method
我正在使用 npm soap
包来处理 soap 网络服务。
显然它是 Node.JS 生态系统中使用最广泛的 soap 客户端,我正在使用一个相当成熟的商业网络服务,所以我不知道谁是“错误的”(或不符合标准) ,但是我正在调用的方法的 xml 标记中的 xmlns
属性有问题。
我们生成这样的请求:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tns="https://webservice.com"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/">
<soap:Body>
<MethodName xmlns="https://webservice.com">
.......
</MethodName>
</soap:Body>
</soap:Envelope>
但是服务器拒绝了这个,因为它只需要 <MethodName>
而不是 <MethodName xmlns="...">
。如何从请求中删除此属性?理想情况下是通过传递给客户端的选项,但我也愿意使用另一个 soap 客户端。
我也可以使用普通 http
客户端并手动构建 xml,但如果可能,我正在寻找更高级别的替代方案。
显然,strong-soap
是一个重写或者至少有一个类似的 API 所以 soap
虽然它的每月下载量较少,但它有一个更强大的社区(根据 activity 在他们各自的 support/community 聊天中)并且它不会在方法标记中注入 xmlns
属性。
因此,如果有人被 soap
困住,请尝试 strong-soap
!
我也遇到了同样的情况,因为 node-soap
默认情况下在信封内添加一个 xmlns,我需要替换它。最后我找到了一个解决方案,也许不是最好的,但可能对某些人有用。
您可以覆盖根据您的请求发送的数据,这样您就可以替换任何您想要的数据,包括信封。
您可以在调用方法时包含选项(对象):
Client.method(args, callback, options)
像选项一样包含此对象:
{
transformRequest: [
function (data, headers) {
return data.replace(
`xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"`,
``
);
},
],
}
最后调用方法如下所示:
client[method](
params,
function (err, result) {
if (err) console.log(err, "<<<<<ERROR");
else console.log(result);
}, {
transformRequest: [
function (data, headers) {
return data.replace(
`xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"`,
``
);
},
],
}
)
用这个你覆盖数据。我希望对需要更改默认创建的信封的人有用。
我正在使用 npm soap
包来处理 soap 网络服务。
显然它是 Node.JS 生态系统中使用最广泛的 soap 客户端,我正在使用一个相当成熟的商业网络服务,所以我不知道谁是“错误的”(或不符合标准) ,但是我正在调用的方法的 xml 标记中的 xmlns
属性有问题。
我们生成这样的请求:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tns="https://webservice.com"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/">
<soap:Body>
<MethodName xmlns="https://webservice.com">
.......
</MethodName>
</soap:Body>
</soap:Envelope>
但是服务器拒绝了这个,因为它只需要 <MethodName>
而不是 <MethodName xmlns="...">
。如何从请求中删除此属性?理想情况下是通过传递给客户端的选项,但我也愿意使用另一个 soap 客户端。
我也可以使用普通 http
客户端并手动构建 xml,但如果可能,我正在寻找更高级别的替代方案。
显然,strong-soap
是一个重写或者至少有一个类似的 API 所以 soap
虽然它的每月下载量较少,但它有一个更强大的社区(根据 activity 在他们各自的 support/community 聊天中)并且它不会在方法标记中注入 xmlns
属性。
因此,如果有人被 soap
困住,请尝试 strong-soap
!
我也遇到了同样的情况,因为 node-soap
默认情况下在信封内添加一个 xmlns,我需要替换它。最后我找到了一个解决方案,也许不是最好的,但可能对某些人有用。
您可以覆盖根据您的请求发送的数据,这样您就可以替换任何您想要的数据,包括信封。
您可以在调用方法时包含选项(对象):
Client.method(args, callback, options)
像选项一样包含此对象:
{
transformRequest: [
function (data, headers) {
return data.replace(
`xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"`,
``
);
},
],
}
最后调用方法如下所示:
client[method](
params,
function (err, result) {
if (err) console.log(err, "<<<<<ERROR");
else console.log(result);
}, {
transformRequest: [
function (data, headers) {
return data.replace(
`xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"`,
``
);
},
],
}
)
用这个你覆盖数据。我希望对需要更改默认创建的信封的人有用。