2

基本上,我希望能够从具有无限数量元素的复杂类型的 BPEL ODE 引擎生成响应。这个想法非常基本,我得到一个对象列表作为输入,然后我根据某个类别进行一些过滤。然后我需要根据过滤生成响应,可能不止一个元素。但是 BPEL 复制分配只允许一对一的分配。我已经尝试使用数组,但似乎也不能分配给多个元素。下面的片段用于输入和输出。

        <complexType name="hospitalType">
        <sequence minOccurs="1" maxOccurs="unbounded">
          <element name="patients">
          <complexType>
            <sequence>
              <element name="patient" minOccurs="1" maxOccurs="unbounded">
                <complexType>
                  <sequence>
                    <element type="string" name="name"/>
                    <element type="date" name="dob"/>
                    <element type="byte" name="age"/>
                    <element type="string" name="status"/>
                  </sequence>
                  <attribute name="pid" type="ID"/>
                </complexType>
              </element>
            </sequence>
          </complexType>
        </element>

到目前为止,以下是我尝试过的

       <bpel:copy>
                <bpel:from part="payload" variable="input">

                            <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                                <![CDATA[tns:patients/tns:patient[1]]]>
                            </bpel:query>
                        </bpel:from>
                <bpel:to part="inload" variable="output">

                            <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
                                <![CDATA[tns:patients/tns:patient]]>
                            </bpel:query>
                        </bpel:to>

        </bpel:copy>

如果输入有多个元素,我什至不能做一个简单的分配..

4

1 回答 1

1

这是 WS-BPEL 的限制。实现这一点的符合标准的方法是运行 XSL 转换。请参阅WS-BPEL 规范的第 65 页。为了使这更容易一点,ODE 提供了几个 XPath 扩展,允许将元素附加或插入到列表中。请参阅此处获取列表。这种分配的示例如下所示:

<assign>
  <copy>
    <from>ode:insert-after($parent, $parent/child::node(), $siblings)</from>
    <to variable="parent"/>
  </copy>
</assign>
于 2013-01-03T10:27:19.133 回答