如何在wso2 esb中将响应输出格式化为xml

时间:2014-04-01 12:51:02

标签: xml web-services soap wso2esb cdata

我有一个SAP MII网络服务,当我尝试使用soap ui时,我会回复:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
       xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
       <soap:Body>
              <XacuteResponse xmlns="http://www.sap.com/xMII">
                     <Rowset>
                           <Row>
                                  <outxml><![CDATA[&lt;BAPI_PROCORD_GET_LIST&gt;
&lt;INPUT&gt;&lt;COLLECTIVE_ORDER/&gt;&lt;/INPUT&gt;
&lt;OUTPUT&gt;&lt;RETURN&gt;&lt;TYPE/&gt;&lt;ID/&gt;&lt;NUMBER&gt;000&lt;/NUMBER&gt;&lt;MESSAGE/&gt;&lt;LOG_NO/&gt;&lt;LOG_MSG_NO&gt;000000&lt;/LOG_MSG_NO&gt;&lt;MESSAGE_V1/&gt;&lt;MESSAGE_V2/&gt;&lt;MESSAGE_V3/&gt;&lt;MESSAGE_V4/&gt;&lt;PARAMETER/&gt;&lt;ROW&gt;0&lt;/ROW&gt;&lt;FIELD/&gt;&lt;SYSTEM/&gt;&lt;/RETURN&gt;&lt;/OUTPUT&gt;
&lt;TABLES&gt;&lt;MATERIAL_RANGE&gt;&lt;item&gt;&lt;SIGN&gt;I&lt;/SIGN&gt;&lt;OPTION&gt;EQ&lt;/OPTION&gt;&lt;LOW&gt;RUBBER_COMPOUND&lt;/LOW&gt;&lt;HIGH/&gt;&lt;/item&gt;&lt;/MATERIAL_RANGE&gt;&lt;MRP_CNTRL_RANGE/&gt;&lt;ORDER_HEADER&gt;&lt;item&gt;&lt;ORDER_NUMBER&gt;000070001202&lt;/ORDER_NUMBER&gt;&lt;PRODUCTION_PLANT&gt;3100&lt;/PRODUCTION_PLANT&gt;&lt;MRP_CONTROLLER/&gt;&lt;PRODUCTION_SCHEDULER/&gt;&lt;MATERIAL&gt;RUBBER_COMPOUND&lt;/MATERIAL&gt;&lt;EXPL_DATE&gt;2014-02-03&lt;/EXPL_DATE&gt;&lt;ROUTING_NO&gt;0000013579&lt;/ROUTING_NO&gt;&lt;RESERVATION_NUMBER&gt;0000069876&lt;/RESERVATION_NUMBER&gt;&lt;SCHED_RELEASE_DATE&gt;2014-02-03&lt;/SCHED_RELEASE_DATE&gt;&lt;ACTUAL_RELEASE_DATE&gt;2014-02-03&lt;/ACTUAL_RELEASE_DATE&gt;&lt;FINISH_DATE&gt;2014-02-03&lt;/FINISH_DATE&gt;&lt;START_DATE&gt;2014-02-03&lt;/START_DATE&gt;&lt;PRODUCTION_FINISH_DATE&gt;2014-02-03&lt;/PRODUCTION_FINISH_DATE&gt;&lt;PRODUCTION_START_DATE&gt;2014-02-03&lt;/PRODUCTION_START_DATE&gt;&lt;ACTUAL_START_DATE&gt;2014-02-04&lt;/ACTUAL_START_DATE&gt;&lt;ACTUAL_FINISH_DATE&gt;0000-00-00&lt;/ACTUAL_FINISH_DATE&gt;&lt;SCRAP&gt;0&lt;/SCRAP&gt;&lt;TARGET_QUANTITY&gt;100.000&lt;/TARGET_QUANTITY&gt;&lt;UNIT&gt;ST&lt;/UNIT&gt;&lt;UNIT_ISO&gt;PCE&lt;/UNIT_ISO&gt;&lt;PRIORITY/&gt;&lt;ORDER_TYPE&gt;PI01&lt;/ORDER_TYPE&gt;&lt;ENTERED_BY&gt;277458&lt;/ENTERED_BY&gt;&lt;ENTER_DATE&gt;2014-02-03&lt;/ENTER_DATE&gt;&lt;DELETION_FLAG/&gt;&lt;WBS_ELEMENT&gt;00000000&lt;/WBS_ELEMENT&gt;&lt;CONF_NO&gt;0000108111&lt;/CONF_NO&gt;&lt;CONF_CNT&gt;00000001&lt;/CONF_CNT&gt;&lt;INT_OBJ_NO&gt;000000000000000000&lt;/INT_OBJ_NO&gt;&lt;SCHED_FIN_TIME&gt;06:07:49&lt;/SCHED_FIN_TIME&gt;&lt;SCHED_START_TIME&gt;06:07:49&lt;/SCHED_START_TIME&gt;&lt;COLLECTIVE_ORDER/&gt;&lt;ORDER_SEQ_NO&gt;00000000000000&lt;/ORDER_SEQ_NO&gt;&lt;FINISH_TIME&gt;06:07:49&lt;/FINISH_TIME&gt;&lt;START_TIME&gt;06:07:49&lt;/START_TIME&gt;&lt;ACTUAL_START_TIME&gt;15:43:47&lt;/ACTUAL_START_TIME&gt;&lt;LEADING_ORDER/&gt;&lt;SALES_ORDER/&gt;&lt;SALES_ORDER_ITEM&gt;000000&lt;/SALES_ORDER_ITEM&gt;&lt;PROD_SCHED_PROFILE/&gt;&lt;MATERIAL_TEXT&gt;RubberCompound&lt;/MATERIAL_TEXT&gt;&lt;SYSTEM_STATUS&gt;TECO PCNF MACM SETC
&lt;/TABLES&gt;
&lt;/BAPI_PROCORD_GET_LIST&gt;]]></outxml>
                           </Row>
                     </Rowset>
              </XacuteResponse>
       </soap:Body>
</soap:Envelope>

问题是,当我通过webservice的代理创建传递然后在soap ui中运行服务时,我从esb获得垃圾值。我想将此响应转换为格式良好的响应xml结构。 我尝试使用xslt,但它在esb中出错,因为无法创建响应结构。在eclipse上运行时相同的xslt工作正常。请帮我。提前致谢并期待您的解决方案。

1 个答案:

答案 0 :(得分:0)

CDATA中的XML片段格式不正确(缺少结束标记)。

但是假设您找到了一种方法来纠正这种情况,并且如果帖子中的给定语法正是您所接收的,那么您可以尝试:

1-获取CDATA内容:

<property name="CDATA_CONTENT" expression="$body//outxml"/>

2-使用以下内容创建新的XML属性:

<script language="js">mc.setProperty("XML_CONTENT",new XML(new XML(mc.getProperty('CDATA_CONTENT'))));</script>

3-从此XML片段中提取值:

<log level="custom">
  <property name="result" expression="get-property('XML_CONTENT')"/>
  <property name="orderNumber" expression="get-property('XML_CONTENT')//ORDER_NUMBER/text()"/>
</log>

4-使用此XML片段更改当前消息有效内容:

<script language="js">mc.setPayloadXML(new XML(new XML(mc.getProperty('CDATA_CONTENT'))));</script>