node.js - Node-soap - 添加具有多个命名空间的标头
问题描述
我node-soap
用来与一个服务进行通信,该服务需要一个包含不同命名空间中元素的标头。
使用像SoapUI
标题这样的工具应该是这样的:
```xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tcorHeaders="http://www.tcore.com/TcoreHeaders.xsd" xmlns:tcorTypes="http://www.tcore.com/TcoreTypes.xsd">
<soapenv:Header>
<tcorHeaders:sessionHeader>
<tcorHeaders:sessionToken>
<tcorTypes:primary>token1</tcorTypes:primary>
<tcorTypes:secondary>token2</tcorTypes:secondary>
<tcorTypes:expiration>2018-09-19T03:35:19.478Z</tcorTypes:expiration>
</tcorHeaders:sessionToken>
</tcorHeaders:sessionHeader>
</soapenv:Header>
```
但如果我这样做:
client.addSoapHeader({
sessionHeader : {
sessionToken: {
primary : 'token1',
secondary: 'token2',
expiration : '2018-09-19T03:35:19.478Z' }},
'', 'types', 'http://www.tcore.com/TcoreTypes.xsd');
然后输出将如下所示:
```xml
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:headers="http://www.tcore.com/TcoreHeaders.xsd" xmlns:types="http://www.tcore.com/TcoreTypes.xsd">
<soap:Header>
<types:sessionHeader xmlns:types="http://www.tcore.com/TcoreTypes.xsd" xmlns="http://www.tcore.com/TcoreTypes.xsd">
<types:sessionToken>
<types:primary>token1</types:primary>
<types:secondary>token2</types:secondary>
<types:expiration>2018-09-19T03:35:19.478Z</types:expiration>
</types:sessionToken>
</types:sessionHeader>
</soap:Header>
```
将所有内容分配给types
并且没有分配给headers
。
如何设置包含具有 2 个不同名称空间的对象的标头?
解决方案
我从文档中找到了一个不优雅的解决方案
使用覆盖我手动创建了这样的标头对象:
dclient.addSoapHeader({ 'headers:sessionHeader':
{ 'headers:sessionToken':
{ 'types:primary': token.primary,
'types:secondary': token.secondary,
'types:expiration': token.expiration } } });
这是有效的,因为node-soap
它的命名约定是一致的,但是您必须运行一个虚拟请求,然后查看发送的 xml(result[3]
如果调试)
推荐阅读
- bing-maps - 根据屏幕密度计算缩放级别
- reactjs - 如何在 TypeScript 文件中应用 useIntl 语言翻译?还是有任何替代/首选的解决方法?
- android - 有没有办法创建 PWA(渐进式 Web 应用程序)的 Android 桌面小部件?
- string - 如何在进行中执行基本的字符串处理
- ubuntu - 将 Eclipse Che 暴露给外部客户端
- java - 如何将整数列表作为 json 数据传递给 Spring Boot Rest API?
- emacs - ./emacs.d/init.ls 文件中的自定义 4 空格缩进使用 8 个空格执行
- javascript - 赛普拉斯中的路径变量
- visual-studio-code - DocumentRoot 和 VSCode 连接
- swift - 如何将子视图添加到我的 stackView?我试试看,但我看不到它们