WSO2响应流重写时输出附带原有剩余流内容问题咨询
WSO2响应流重写残留原有内容解决方法
问题原因
原配置中foreach中介器执行迭代时,每次生成的<TABLE>节点默认会追加到当前消息体的对应节点下,不会清空原有外层的<VueTable>、<JTblView>结构,因此最终输出会保留原有外层标签,同时附带新生成的内容。
调整方案
你可以先将迭代生成的节点存入临时数组属性,迭代完成后直接用收集到的内容完全替换消息体,具体配置如下:
<property name="XMLBody" expression="$body//soap:Body//generic:xmlpres" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:gce="urn:GCE" xmlns:generic="http://www.generix.fr/technicalframework/businesscomponent/applicationmodule/common" type="OM" /> <!-- 提取目标节点到body --> <enrich> <source type="property" property="XMLBody" /> <target type="body" /> </enrich> <property name="XMLBody2" expression="$body//VueTable" type="OM" /> <enrich> <source type="property" property="XMLBody2" /> <target type="body" /> </enrich> <!-- 初始化数组存储生成的TABLE节点 --> <property name="generatedTables" scope="default" type="ARRAY"/> <foreach expression="$body//JTblViewRow"> <sequence> <payloadFactory media-type="xml"> <format> <TABLE xmlns=""> <Code>$1</Code> <Libelle>$2</Libelle> </TABLE> </format> <args> <arg evaluator="xml" expression="//Cletbl/business_data"/> <arg evaluator="xml" expression="//Lib1/business_data"/> </args> </payloadFactory> <!-- 将生成的TABLE节点加入数组 --> <property name="currentTable" expression="$body//TABLE" type="OM"/> <script language="js"><![CDATA[ var tables = mc.getProperty('generatedTables'); tables.add(mc.getProperty('currentTable')); mc.setProperty('generatedTables', tables); ]]></script> </sequence> </foreach> <!-- 用收集到的TABLE节点完全替换当前body,可根据需求调整外层结构 --> <payloadFactory media-type="xml"> <format> $1 </format> <args> <arg evaluator="xml" expression="get-property('generatedTables')"/> </args> </payloadFactory> <property name="ContentType" value="text/xml" scope="axis2"/>
内容的提问来源于stack exchange,提问作者jdevelay
相关产品推荐
相关产品推荐

