Извлечь значение ответа JSON в переменной BPEL - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь получить значение атрибута, возвращенного службой отдыха в JSON в активности ассигнования BPEL SOA 12c, используя javascript.

Ответ, возвращенный службой отдыха, выглядит следующим образом:

<messages>
<InputVar>
      <json>{

}</json>
   </InputVar>
<OutputVar>
      <json>{
   "response": [
      {
         "local_product_version": 1,
         "local_product_id": 1
      },
      {
         "local_product_version": 1,
         "local_product_id": 2
      },
      {
         "local_product_version": 1,
         "local_product_id": 3
      }
   ]
}</json>
   </OutputVar>
</messages>

Когда я использую операцию присваивания для захвата значения атрибута ответа, значение переменной будет выглядеть следующим образом:


   <id xmlns:def="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="def:string">org.mozilla.javascript.Undefined@41c96386</id>


Вместо вышеуказанного org.mozilla.javascript.Undefined @41c96386, мне нужно значение атрибута, как показано ниже:

<id xmlns:def="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="def:string">1</id>

Я уже пробовал с приведенным ниже синтаксисом JavaScript, но не повезло:

  1. OutputVar.message.data.response.local_product_version
    
OutputVar.response[0].local_product_version

Может кто-нибудь подсказать, как мне этого добиться?

1 Ответ

0 голосов
/ 29 октября 2019

Почему бы просто не извлечь объект из ответа json 'вручную':

const txt = `
<messages>
<InputVar>
      <json>{

}</json>
   </InputVar>
<OutputVar>
      <json>{
   "response": [
      {
         "local_product_version": 1,
         "local_product_id": 1
      },
      {
         "local_product_version": 1,
         "local_product_id": 2
      },
      {
         "local_product_version": 1,
         "local_product_id": 3
      }
   ]
}</json>
   </OutputVar>
</messages>
`;

const RE = /\<OutputVar\>\s*\<json\>(.*)\<\/json\>\s*\<\/OutputVar\>/s;

const result = RE.exec(txt);

if (result) {
  const json = result[1];
  const obj = JSON.parse(json)
  console.log(obj)
}

, и вы получили:

// {
//   response: [
//     { local_product_version: 1, local_product_id: 1 },
//     { local_product_version: 1, local_product_id: 2 },
//     { local_product_version: 1, local_product_id: 3 }
//   ]
// } 

Теперь вы получили его как обычный объект JS и можетеполучите из него все, что требуется, включая local_product_version

Затем вы можете использовать его для создания желаемой строки результата:

const local_product_version = obj.response[0].local_product_version;
const result = `<id xmlns:def="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="def:string">${local_product_version}</id>`

console.log(result);

// <id xmlns:def="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="def:string">1</id>
...