1

我当前来自 BPEL 的有效负载 XML 看起来像,

<Parent>
<child1>
<key>K1</key>
<value>V1<value>
</child1>
<child1>
<key>K11</key>
<value>V11<value>
</child1>
<child2>
<key>K2</key>
<value>V2<value>
</child2>
</Parent>

我想将child1的新片段添加到现有 XML 有效负载中,以便输出如下所示,

<Parent>
<child1>
<key>K1</key>
<value>V1<value>
</child1>
<child1>
<key>K11</key>
<value>V11<value>
</child1>
<child1>
<key>K12</key>
<value>V12<value>
</child1>
<child2>
<key>K2</key>
<value>V2<value>
</child2>
</Parent>

我搜索了一下,发现 bpelx:append 方法可以帮助插入 xml 片段。但我仍然不知道如何首先以 String/xml 数据类型创建/存储新片段,以便可以将其传递给现有的有效负载。

任何指示或帮助将不胜感激。

4

2 回答 2

0

I was getting a compilation error for <literal> and realized that I had to use namespace with it. Once I switched it to <bpel:literal> I was able to compile and deploy without any issues. Just make sure you are using the correct name space.

<variable name = "myVar" type="myNs:child1" /> <!-- more process code
--> <bpelx:assign>
          <from>
               <bpel:literal>
                      <child1>....</child1>
               </bpel:literal>  
          </bpelx:from>
          <to variable="myVar" />
    </bpel:assign>
于 2014-08-08T14:00:29.843 回答
0

首先:您发布的 XML 片段格式不正确,因为您在应有的结束标签的不同位置使用了开始标签。

其次,该bpelx:append函数不是 BPEL 的一部分,而是 Oracle 的专有扩展(我猜你正在使用它)。您可以在此处找到有关此功能的文档以及其他可能对您有用的文档。第三,您在活动的 XPath 表达式中执行此转换assign

现在,对于您的实际问题:

我仍然不知道如何首先以 String/xml 数据类型创建/存储新片段,以便可以将其传递给现有的有效负载。

这在很大程度上取决于您想从哪里获取这些数据。在这个过程中是硬编码的吗?还是来自您收到的消息?

免责声明:由于我没有安装 Oracle SOA Suite 的实例,因此我没有测试这些代码片段。

如果它是硬编码的,你可以把它放在一个文字块中:

<bpel:assign>
    <bpelx:append>
          <from>
               <literal>
                      <child1>....</child1>
               </literal>  
          </from>
          <to variable="variableWithYourPayload"
                query="/your-ns:Parent" />
    </bpelx:append> 
</bpel:assign>

如果它来自您收到的消息,那么您应该将消息存储在一个变量中,您可以从中读取:

<bpel:assign>
    <bpelx:append>
          <from variable="inputMessageWithChild1Content" />
          <to variable="consolidatedBillOfMaterialVar"
                query="/your-ns:Parent" />
    </bpelx:append> 
</bpel:assign>

您也可以始终只创建 XML 类型的变量。但是,这需要在您导入的 WSDL 或 XSD 文件中的某处定义 XML 类型,通常情况下应该如此。这应该看起来像这样:

<variable name = "myVar" type="myNs:child1" />
<!-- more process code -->
<bpel:assign>
          <from>
               <literal>
                      <child1>....</child1>
               </literal>  
          </from>
          <to variable="myVar" />
</bpel:assign>

之后,您可以append像在第二个片段中一样使用此变量。

于 2013-11-13T09:26:22.383 回答