如何为数组配置node-soap客户端集命名空间不仅适用于对象?
我的'sendPatient'方法的参数:
params = {
patientCard: {
patient: {
firstName: 'test',
lastName: 'test'
},
identifiers:
{
code: "123456789",
codeType: 1
}
}
};
client.sendPatient(params, ...)
node-soap产品:
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tns="http://xxx/patient/api/"
xmlns:bi="http://xxx/base/info/build/">
<soap:Header></soap:Header>
<soap:Body>
<tns:sendPatient
xmlns:tns="http://xxx/patient/api/"
xmlns="http://xxx/patient/api/">
<tns:patientCard>
<ns1:patient
xmlns:ns1="http://xxx/patient/">
<ns1:firstName>test</ns1:firstName>
<ns1:lastName>test</ns1:lastName>
</ns1:patient>
<ns1:identifiers
xmlns:ns1="http://xxx/patient/">
<ns1:code>123456789</ns1:code>
<ns1:codeType>1</ns1:codeType>
</ns1:identifiers>
</tns:patientCard>
</tns:sendPatient>
</soap:Body>
</soap:Envelope>
并且它有效,但我需要发送标识符数组,而不仅仅是一个,所以当我放入数组时
params = {
patientCard: {
patient: {
firstName: 'test',
lastName: 'test'
},
identifiers: [
{
code: "123456789",
codeType: 1
}, {
code: "987654321",
codeType: 2
}
]
}
};
node-soap产品:
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tns="http://xxx/patient/api/"
xmlns:bi="http://xxx/base/info/build/">
<soap:Header></soap:Header>
<soap:Body>
<tns:sendPatient
xmlns:tns="http://xxx/patient/api/"
xmlns="http://xxx/patient/api/">
<tns:patientCard>
<ns1:patient
xmlns:ns1="http://xxx/patient/">
<ns1:firstName>test</ns1:firstName>
<ns1:lastName>test</ns1:lastName>
</ns1:patient>
<ns1:identifiers>
<ns1:code>00100180035</ns1:code>
<ns1:codeType>1</ns1:codeType>
</ns1:identifiers>
<ns1:identifiers>
<ns1:code>00100180035</ns1:code>
<ns1:codeType>1</ns1:codeType>
</ns1:identifiers>
</tns:patientCard>
</tns:sendPatient>
</soap:Body>
</soap:Envelope>
我从<ns1:identifiers>
部分
`[com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix "ns1" at [row,col {unknown-source}]: [17,25]]`
我做错了什么?我可以以某种方式将xmlns:ns1="http://xxx/patient/"
添加到<soap:Envelope>
标记或配置node-soap来为数组添加它(不仅仅是为了简单的对象)吗?
附:对不起我的英文
答案 0 :(得分:11)
已发布的临时解决方案on Github
在createClient补丁wsdl定义
之后soap.createClient(wsdl, options, function(err, client) {
client.wsdl.definitions.xmlns.ns1 = 'http://xxx/patient/'
client.wsdl.xmlnsInEnvelope = client.wsdl._xmlnsMap()
//works now
client.sendPatient(...)
});
答案 1 :(得分:0)
在打字稿中,您可以作为Swarthy注释访问私有wsdl,但可以直接附加名称空间:
client['wsdl'].xmlnsInEnvelope += 'xmlns:ns1="http://xxx/patient/"';
client['wsdl']._xmlnsMap();