我正在使用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>
我总是得到一个空字符串转移。非常感谢。
答案 0 :(得分:1)
to-spec <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>
。在确定嵌套结构的值之前,请确保初始化变量。
答案 1 :(得分: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