如何在BPEL变量中获取JSON响应的值

问题描述 投票:0回答:1

我正在尝试使用javascript在SOA 12c BPEL assig活动中获取REST服务在json中返回的属性的值。其余服务返回的响应如下:

<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>

当我使用assign活动捕获响应属性值时,变量的值如下:


   <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
    
  2. 2。
OutputVar.response[0].local_product_version

。您能建议我如何实现同样的目标吗?

谢谢!!

javascript soa weblogic12c bpel
1个回答
0
投票

为什么不只是手动从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

© www.soinside.com 2019 - 2024. All rights reserved.