向BPEL流程中的现有XML负载添加XML片段
我当前从BPEL获得的有效负载XML如下所示:向BPEL流程中的现有XML负载添加XML片段,xml,soa,bpel,Xml,Soa,Bpel,我当前从BPEL获得的有效负载XML如下所示: <Parent> <child1> <key>K1</key> <value>V1<value> </child1> <child1> <key>K11</key> <value>V11<value> </child1> <child2> <key>K2</key&
<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>
K1
V1
K11
V11
K2
V2
我想在现有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>
K1
V1
K11
V11
K12
V12
K2
V2
我在谷歌上搜索发现bpelx:append方法可以帮助插入xml片段。
但我仍然不知道如何首先在String/xml数据类型中创建/存储新片段,以便将其传递给现有的有效负载
任何提示或帮助都将不胜感激。首先:您发布的XML片段格式不好,因为您在应该放置结束标记的不同位置使用了开始标记 其次,
bpelx:append
函数不是BPEL的一部分,而是Oracle的专有扩展(我猜您正在使用它)。您可以找到有关此函数的文档,以及可能对您有用的其他文档。第三,在assign
活动中的XPath表达式中执行此转换
现在,谈谈你的实际问题:
我仍然不知道如何首先创建/存储一个新片段
String/xml数据类型,以便可以将其传递给现有负载
这在很大程度上取决于你想从哪里获得数据。过程中是否硬编码?还是来自你收到的信息
免责声明:因为我没有安装Oracle SOA套件的实例,所以我没有测试这些代码片段
如果它是硬编码的,您可以将其放在文字块中:
<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>
....
之后,您可以在
追加中使用此变量,就像在第二个代码片段中一样。我得到了
的编译错误,并意识到我必须使用名称空间。一旦我将它切换到
,我就能够毫无问题地编译和部署。只需确保您使用的名称空间正确即可
<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>
....
我尝试使用literal,但它给出了编译错误,因为它似乎无法识别literal。所以我用了另一种表达方式:)我更喜欢字面的变体,因为你不必逃避那里的东西。顺便说一句,该变体在Oracle BPEL中确实有效(我以前使用过它)。您的编译错误很可能与其他内容有关(我敢打赌通常的疑点是:名称空间)。