Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath 在BPEL上返回复杂类型响应_Xpath_Bpel_Apache Ode - Fatal编程技术网

Xpath 在BPEL上返回复杂类型响应

Xpath 在BPEL上返回复杂类型响应,xpath,bpel,apache-ode,Xpath,Bpel,Apache Ode,基本上,我希望能够从BPEL ODE引擎生成具有无限元素数的复杂类型的响应。 这个想法非常基本,我得到一个对象列表作为输入,然后根据某个类别进行过滤。然后,我需要基于过滤生成响应,这可能是多个元素。但是BPEL副本分配只允许一对一的分配。 我已经尝试使用数组,但似乎不能分配给多个元素。 下面的代码段用于输入和输出 <complexType name="hospitalType"> <sequence minOccurs="1" maxOccurs

基本上,我希望能够从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>


如果输入有多个元素,我甚至不能执行简单的赋值。

这是WS-BPEL的一个限制。实现这一点的符合标准的方法是运行XSL转换。见本手册第65页。为了简化这一点,ODE提供了两个XPath扩展,允许在列表中追加或插入元素。请参阅以获取列表。此类分配的示例如下所示:

<assign>
  <copy>
    <from>ode:insert-after($parent, $parent/child::node(), $siblings)</from>
    <to variable="parent"/>
  </copy>
</assign>

ode:在($parent,$parent/child::node(),$siblines)之后插入

尝试执行此操作时,我收到以下错误:错误-GeronimoLog.error(104)赋值错误:{}selectionFailure,lineNo=275,faultExpression=计算“{OXPath10Expression ode:insert after($output.payload,$output.payload/child::node(),$child)}”时发生异常:使用xpath2.0后没有此类函数insert AFTERUSE会出现以下错误:找不到名为{}insert-after()的匹配3参数函数如果使用最新版本的ODE,则不会出现上面提到的错误。