我有一个执行callout(阻塞)的序列,因为我需要从响应中提取一些数据来创建一个有效负载来执行另一个服务的新callout。
标注
<callout action="nextSource" initAxis2ClientOptions="false"
serviceURL="http://192.168.0.33:9764/services/AltaLigeraService?wsdl">
<source type="envelope" />
<target key="myresponse" />
</callout>
所以我可以记录回复:
<property expression="get-property('myresponse')"
name="rta" scope="default" type="STRING" />
<log level="custom">
<property expression="$ctx:rta" name="Respuesta" />
</log>
响应日志为:
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>
所以我需要知道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)"`
这样做的正确方法是什么?
由于
答案 0 :(得分:1)
只是一个测试:
<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] INFO - 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] INFO - LogMediator filename = test - 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"/>
答案 1 :(得分:0)
最后我可以。 请求:
`<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" />`