Как правильно указать @XmlValue в объекте json с библиотекой loopback? - PullRequest
0 голосов
/ 10 июля 2019

Я хочу отправить следующий фрагмент XML мыла в службу IBM MDM Soap, используя библиотеку IBM loopback версии 3.22.

<ns2:InquiryParam xmlns:ns2="http://www.ibm.com/mdm/schema">
        <ns2:tcrmParam name="PartyId">12345</ns2:tcrmParam>
        <ns2:tcrmParam name="PartyType">P</ns2:tcrmParam>
        <ns2:tcrmParam name="InquiryLevel">0</ns2:tcrmParam>
</ns2:InquiryParam>

Я пытаюсь использовать библиотеку javascript IBM loopback v 3.22 для отправки SOAP-запроса в веб-службу IBM MDM. У меня есть пример запроса мыла, который я могу успешно протестировать с помощью Soap UI. Я вижу точный запрос мыла, который библиотека обратной связи отправляет на веб-сервер IBM MDM, и ответ от сервера.

Объект модели JavaScript в loopback v3.22 имеет следующий фрагмент JavaScript.

let tmpVar = {"tcrmParam":[{"value":"12345","name":"PartyId"},{"value":"P","name":"PartyType"},{"value":"0","name":"InquiryLevel"}]};

let partyParam={RequestControl: RequestControl, InquiryParam: tmpVar};

    Getparty.getParty(partyParam, function (err, response) {

...

Приведенный выше фрагмент кода JavaScript при использовании с библиотекой обратной связи отправляет следующий фрагмент XML в веб-службу IBM MDM Soap.

 <soap:Body>
    <ns1:getParty xmlns:ns1="http://www.ibm.com/mdm/port/Party">
      <ns2:RequestControl xmlns:ns2="http://www.ibm.com/mdm/schema">
        <ns2:requestID>1</ns2:requestID>
        <ns2:DWLControl>
          <ns2:requesterName>mdmadmin</ns2:requesterName>
          <ns2:requesterLocale>en</ns2:requesterLocale>
        </ns2:DWLControl>
      </ns2:RequestControl>
      <ns2:InquiryParam xmlns:ns2="http://www.ibm.com/mdm/schema">
        <ns2:tcrmParam name="PartyId">
          <value>12345</value>
        </ns2:tcrmParam>
        <ns2:tcrmParam name="PartyType">
          <value>P</value>
        </ns2:tcrmParam>
        <ns2:tcrmParam name="InquiryLevel">
          <value>0</value>
        </ns2:tcrmParam>
      </ns2:InquiryParam>
    </ns1:getParty>
  </soap:Body>

Ошибка службы IBM MDM Soap:

«ErrorMessage»: «Обязательное поле отсутствует.»,

Сгенерированный запрос мыла НЕ должен иметь <value> в tcrmParam.

Какие изменения необходимы в проекте javascript loopback nodejs, чтобы мыльный соединитель отправлял фрагмент xml

<ns2:tcrmParam name="PartyId">12345</ns2:tcrmParam>

вместо

    <ns2:tcrmParam name="PartyId">
      <value>12345</value>
    </ns2:tcrmParam>

Thx,

1 Ответ

0 голосов
/ 10 июля 2019

После прочтения сильных мыльных документов я заметил, что могу использовать атрибуты $ и $ value , как показано ниже:

let partyParam={RequestControl: RequestControl, InquiryParam: {tcrmParam: [{'$attributes': {name: 'PartyId'}, '$value': '12345'},
{'$attributes': {name: 'PartyType'}, '$value': 'P'},
{'$attributes': {name: 'InquiryLevel'}, '$value': '0'}]}}; 

После изменения кода, приведенного выше, я смог проверить, генерируется ли следующий запрос мыла и успешно ли он выполнен.

  <ns2:InquiryParam xmlns:ns2="http://www.ibm.com/mdm/schema">
    <ns2:tcrmParam name="PartyId">12345</ns2:tcrmParam>
    <ns2:tcrmParam name="PartyType">P</ns2:tcrmParam>
    <ns2:tcrmParam name="InquiryLevel">0</ns2:tcrmParam>
  </ns2:InquiryParam>

Thx,

...