如何使用从 callout 到序列中另一个 Callout 的响应数据

How to use response data from callout to another Callout in a seuqnce

我有一个执行标注(阻塞)的序列,因为我需要从响应中提取一些数据来创建有效负载来执行对另一个服务的新标注。

  1. 标注

    <callout action="nextSource" initAxis2ClientOptions="false" serviceURL="http://192.168.0.33:9764/services/AltaLigeraService?wsdl"> <source type="envelope" /> <target key="myresponse" /> </callout>

  2. 所以我可以记录响应:

    <property expression="get-property('myresponse')" name="rta" scope="default" type="STRING" />

    <log level="custom"> <property expression="$ctx:rta" name="Respuesta" /> </log>

  3. 响应日志为:

    INFO - LogMediator Respuesta = <ns:nextSourceResponse xmlns:ns="http://carbon.bbva.gtko.co"> <ns:return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ax2431="http://vo.carbon.bbva.gtko.co/xsd" xsi:type="ax2431:Automatizacion"> <ax2431:filename1>28189133_AltaLigerao_Oficina_cmarguello_20160408102300_N.txt</ax2431:filename1><ax2431:filename2>28189133_AltaLigerao_Oficina_cmarguello_20160408102300_S.txt</ax2431:filename2> <ax2431:modulo>ALTA_LIGERA</ax2431:modulo> </ns:return> </ns:nextSourceResponse>

  4. 所以我需要知道 filename1、filename2 和 modulo 的值 我尝试使用 xpath 记录 filename1 值,但我做不到。

    <property expression="fn:concat('filename - ', $ctx:rta/ns:nextSourceResponse/ns:return/ax2431:filename1)" name="filename1" scope="default" type="STRING" xmlns:ns="http://carbon.bbva.gtko.co" xmlns:ax2431="http://vo.carbon.bbva.gtko.co/xsd"/> <log level="custom"> <property expression="get-property('filename1')" name="filename" xmlns:ns="http://carbon.bbva.gtko.co" /> </log>

和日志:

`INFO - LogMediator filename = filename - `

我也尝试了相同的结果(相同的日志)

´expression="fn:concat('filename - ', $ctx:rta/ax2431:filename1)"´

`expression="fn:concat('filename - ', $ctx:rta/filename1)"`

正确的做法是什么?

谢谢

只是一个测试:

<property expression="$body/*" 
     name="rta" scope="default" type="STRING" />

<log level="custom">
    <property expression="$ctx:rta" name="Respuesta" />
 </log> 


<property expression="//ns:nextSourceResponse/ns:return/ax2431:filename1" name="Respuesta2" xmlns:ns="http://carbon.bbva.gtko.co" xmlns:ax2431="http://vo.carbon.bbva.gtko.co/xsd"/>

    <property
        expression="fn:concat('test - ', get-property('Respuesta2'))"
        name="filename1" scope="default" type="STRING" xmlns:ns="http://carbon.bbva.gtko.co" xmlns:ax2431="http://vo.carbon.bbva.gtko.co/xsd"/>
    <log level="custom">
        <property expression="get-property('filename1')" name="filename"
            xmlns:ns="http://carbon.bbva.gtko.co" />
    </log>

日志:

[2016-04-29 14:19:48,005] 信息 - LogMediator Respuesta =

<ns:nextSourceResponse xmlns:ns="http://carbon.bbva.gtko.co"><ns:return xmlns:ax2431="http://vo.carbon.bbva.gtko.co/xsd" xmlns
:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax2431:Automatizacion"><ax2431:filename1>28189133_AltaLigerao_Oficina_cmarguello_20160408102300_N.txt</ax2431:filename1><ax24
31:filename2>28189133_AltaLigerao_Oficina_cmarguello_20160408102300_S.txt</ax2431:filename2><ax2431:modulo>ALTA_LIGERA</ax2431:modulo></ns:return></ns:nextSourceResponse>

[2016-04-29 14:19:48,007] 信息 - LogMediator 文件名 = 测试 - 28189133_AltaLigerao_Oficina_cmarguello_20160408102300_N.txt

如果你想使用$ctx:rta方式,请像这样使用属性:

<property expression="$ctx:rta//ns:return/ax2431:filename1/text()" 
           name="Respuesta2" xmlns:ns="http://carbon.bbva.gtko.co" xmlns:ax2431="http://vo.carbon.bbva.gtko.co/xsd"/>

终于可以了。 要求:

`<body>
  <ns:nextSourceResponse xmlns:ns="http://carbon.bbva.gtko.co">
  </ns:nextSourceResponse>
</body>`

关键在目标中:

`<callout action="nextSource" initAxis2ClientOptions="false"
                serviceURL="http://192.168.0.33:9764/services/AltaLigeraService?wsdl">
    <source type="envelope" />
    <target xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:s12="http://www.w3.org/2003/05/soap-envelope"
        xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]" />
</callout>`

之后我可以访问文件名的值

`<property expression="//ns:nextSourceResponse/ns:return/ax2431:filename1"
    name="filename1" scope="default" type="STRING"
    xmlns:ax2431="http://vo.carbon.bbva.gtko.co/xsd" xmlns:ns="http://carbon.bbva.gtko.co" />`