Node-soap - добавить заголовок с несколькими пространствами имен - PullRequest
0 голосов
/ 18 сентября 2018

Я использую 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 различными пространствами имен?

1 Ответ

0 голосов
/ 18 сентября 2018

Я нашел не элегантное решение из документов

Используя переопределение, я вручную создал объект заголовка следующим образом:

dclient.addSoapHeader({ 'headers:sessionHeader': 
    { 'headers:sessionToken': 
        { 'types:primary': token.primary, 
          'types:secondary': token.secondary, 
          'types:expiration': token.expiration } } });

Это работает, потому что node-soapсогласуется с соглашениями об именах, но вам нужно будет выполнить фиктивный запрос, а затем просмотреть отправленный xml (result[3] при отладке)

...