【问题标题】:how to format the response output to xml in wso2 esb如何在 wso2 esb 中将响应输出格式化为 xml
【发布时间】:2014-05-12 06:15:13
【问题描述】:

我有一个 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>

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

【问题讨论】:

    标签: xml web-services soap wso2esb cdata


    【解决方案1】:

    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>
    

    【讨论】:

    • 感谢 Jean 的回复,但是当我想记录属性 CDATA_CONTENT 的值时,我什么也得不到。这是代码
    • ws.apache.org/ns/synapse">
    • 这是因为命名空间,XPATH 应该类似于 $body//sap:outxml 与 xmlns:sap="h ttp://www.sap.com/xMII" (之间没有空格h 和 ttp ......但否则它会在此评论中消失)
    • 仍然有同样的问题。还有一件事,如果我将属性记录为 $body 我会看到 垃圾值,如 YQ==:二进制>
    • 不确定,您的响应 SOAP 消息似乎不是您在帖子中显示的消息:尝试在 outSequence 中使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 2022-01-22
    相关资源
    最近更新 更多