来自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>
我想在现有的XML有效负载中添加 child1 的新片段,以便输出如下所示,
<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>
我用Google搜索并发现bpelx:append方法可以帮助插入xml片段。 但我仍然无法弄清楚如何首先在String / xml数据类型中创建/存储新片段,以便可以将其传递给现有的有效负载。
非常感谢任何指针或帮助。
答案 0 :(得分:0)
首先:您发布的XML代码段格式不正确,因为您在结束标记所在的各个位置使用开始标记。
其次,bpelx:append
函数不是BPEL的一部分,而是Oracle的专有扩展(我猜你正在使用它)。您可以找到有关此功能的文档,以及可能对您有用的其他文档here。第三,在assign
活动的XPath表达式中进行此转换。
现在,问你的实际问题:
我仍然无法弄清楚如何首先在a中创建/存储新片段 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
中使用此变量,就像在第二个代码段中一样。
答案 1 :(得分:0)
我收到了<literal>
的编译错误,并意识到我必须使用命名空间。一旦我将其切换到<bpel:literal>
,我就能够毫无问题地进行编译和部署。只需确保使用正确的名称空间。
<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>