2012-01-17 36 views
1

我使用Apache ODE来编写一些简单的BPEL来连接2个Web服务。 我的一个两个服务的WSDL文件中包含此复杂类型:将complexType复制到BPEL中的消息

<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:字符串)的输入?消息(类型为 “myObject的” 的 “STR” 里面

我试图做到这一点,但似乎没有工作:

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

我总是得到一个空字符串转移。非常感谢。

回答

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>。请确保在将值分配给嵌套结构之前初始化该变量。

+0

刚刚发现什么错误了。感谢人!将在此主题下的另一篇文章中详细介绍它。 – Panos 2012-01-18 14:47:34

+0

嗨@vanto,如果complexType myObject有两个元素,我只是想将输入字符串映射到那个“str”元素,我需要关联吗? – eskalera 2013-03-06 11:13:47

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> 

的的xmlns =“”在需要的时候您的bpel中的默认命名空间与接收Web服务中的命名空间不同。

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

再次,感谢您的回答。

一些链接,还可以帮助其他人:

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

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