You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataPower报incomplete markup错误,Non-xml类型MPG服务排障求助

解决DataPower MPG服务Non-xml类型下JSON请求错误及日志记录问题

一、错误根源:JSON格式不完整

你的请求JSON存在语法错误,缺少两个闭合的大括号:
原始错误JSON:

{ "meta": { "totalPages": 13 }

修正后正确格式:

{ "meta": { "totalPages": 13 } }

这个格式错误是触发"incomplete markup or missing document element"错误的直接原因——即使服务设置为Non-xml类型,DataPower在处理JSON时仍会做基础语法校验。

二、不修改服务类型,在错误规则中获取JSON值的方案

由于服务请求/响应类型是Non-xml,DataPower不会自动将请求内容解析为可被XSLT直接处理的DOM节点,需要通过DataPower扩展函数手动读取并解析原始请求:

实现步骤

  • 在错误规则的XSLT中,使用dp:request-content()获取原始请求的字符串内容;
  • 用json:parse()函数将字符串解析为JSONX格式的XML节点(DataPower专属的JSON转XML格式);
  • 针对解析后的节点提取所需字段,同时处理解析失败的异常情况;
  • 记录日志或返回自定义错误响应。

示例XSLT代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:dp="http://www.datapower.com/extensions"
                xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx"
                extension-element-prefixes="dp json">

  <xsl:template match="/">
    <!-- 获取原始请求内容 -->
    <xsl:variable name="rawRequest" select="dp:request-content()"/>
    
    <!-- 尝试解析JSON,捕获解析异常 -->
    <xsl:variable name="jsonData">
      <xsl:try>
        <json:parse select="$rawRequest"/>
        <xsl:catch>
          <dp:log-message level="error">JSON解析失败:<xsl:value-of select="$dp:exception-message"/></dp:log-message>
        </xsl:catch>
      </xsl:try>
    </xsl:variable>

    <!-- 提取并记录JSON中的totalPages字段 -->
    <xsl:if test="$jsonData/json:object/json:object[@name='meta']/json:number[@name='totalPages']">
      <dp:log-message level="error">
        请求格式错误,请求中的totalPages值:<xsl:value-of select="$jsonData/json:object/json:object[@name='meta']/json:number[@name='totalPages']"/>
      </dp:log-message>
    </xsl:if>

    <!-- 返回自定义错误响应 -->
    <dp:response-header name="Content-Type" value="application/json"/>
    <xsl:text>{"code":"INVALID_REQUEST","message":"请求格式不完整,请检查JSON语法"}</xsl:text>
  </xsl:template>
</xsl:stylesheet>

关键说明

  • 需确保DataPower固件版本在v7.0及以上,该版本开始支持json:parse()函数;
  • dp:request-content()直接读取请求的原始字节流,无需依赖服务的请求类型设置;
  • 异常处理部分避免因JSON格式错误导致XSLT执行失败,保证错误规则能正常完成日志记录和响应返回。

三、额外配置注意

在MPG服务的Error Handling设置中,将该XSLT规则绑定到对应的错误事件(比如Parse Error或General Error),确保请求解析失败时能触发该规则。

内容的提问来源于stack exchange,提问作者Daisy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 11:29:57