1

我正在使用 Apache ODE 编写一些简单的 BPEL 来连接 2 个 Web 服务。我的两个服务的 WSDL 文件之一包含这种复杂类型:

<types>
<t:schema targetNamespace="http://ws.panos.com/" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <t:complexType name="myObject">
   <t:sequence>
     <t:element minOccurs="0" name="str" type="t:string" />
   </t:sequence>
 </t:complexType>
</t:schema>

如何从服务返回消息(只是一个 xsd:string)复制到消息的输入(在“myObject”类型的“str”内?

我试过这样做,但似乎没有用:

<assign name="assign_2">
<copy> 
    <from variable="wsA_output" part="return"/>
    <to variable="wsC_input" part="arg0" query="/arg0/str"/> 
</copy> 

我总是得到一个空字符串传输。非常感谢帮助。

4

2 回答 2

1

规范<to variable="..." part="..." query="..."/>在 BPEL 1.1 和 BPEL 2.0 中均无效。正确的等价表达式是:<to>$wsC_input.arg0/arg0/str</to><to variable="wsC_input" part="arg0"><query>/arg0/str</query></to>。还请确保在将值分配给嵌套结构之前初始化变量。

于 2012-01-18T14:24:39.903 回答
0

才发现错误。你是对的,我们需要查询才能找到这样的字段:

 <assign name="assign_2">
<copy> 
    <from variable="wsA_output" part="return"/>
            <to>$wsC_input.message/arg0/str</to>
</copy> 
</assign>

此外,我们需要像这样初始化变量:

 <assign name="assign_init">
<copy> 
    <from>
        <literal><arg0><str xmlns="">nothing</str></arg0></literal>
    </from>
    <to variable="wsC_input" part="arg0"></to>
</copy> 
 </assign>

当 bpel 中的默认命名空间与接收 Web 服务中的命名空间不同时,需要 xmlns=""。

我只是把这些写下来以备将来参考:)

再次感谢您的回答。

一些也可以帮助其他人的链接:

http://ode.apache.org/faq.html

http://jee-bpel-soa.blogspot.com/2009/08/manipulating-ws-bpel-variables-and.html

于 2012-01-18T14:46:46.697 回答