异常排查:lineNumber: 1; columnNumber: 590; 元素内容必须由格式正确的字符数据或标记组成。

文章目录

今天应用服务启动式,出现一个异常lineNumber: 1; columnNumber: 589; 元素内容必须由格式正确的字符数据或标记组成。,经过一步步排查总算解决问题了。

异常排查

应用服务启动时,堆栈如下:
在这里插入图片描述

从堆栈我们可以发现JobPoolDeliveryMapper 这个类中xml中有不符合xml的语法错误。然后我们把断点设置到这个org.apache.ibatis.parsing.XPathParser#createDocument 这个方法中,断点如下,然后重新启动应用服务发现堆栈。
在这里插入图片描述
从异常信息中我们发现异常引起的动态SQL如下:
在这里插入图片描述
然后如上图,找到这个str字符串,找到字符,展开找到590个字符,发现在 <> 附近引起。
在这里插入图片描述
这时候我们找到原始的SQL

@Select("<script>" +
            " select count(*) totalMatchCount " +
            " ,sum(case when delivery_tag = 2 and confirm_tag =1 then 1 else 0 end) + sum(case when confirm_tag = 2 and charge_type = 1 then 1 else 0 end) currentTaskCount " +
            " ,sum(case when delivery_tag = 2 and confirm_tag =1 then 1 else 0 end) deliveryMatchCount " +
            " ,sum(case when confirm_tag = 2 then 1 else 0 end) confirmCount " +
            " ,sum(case when confirm_tag = 2 and charge_type = 1 then 1 else 0 end) freeConfirmCount " +
            " ,sum(case when confirm_tag = 2 and charge_type = 2 then 1 else 0 end) payConfirmCount " +
            " ,job_pool_id jobPoolId from job_pool_delivery where state <> 0 and delivery_finished = 1  " +
            "  and job_pool_id in <foreach item='item' index='index' collection='jobPoolIds' open='(' separator=',' close=')'> #{item} </foreach>" +
            " group by job_pool_id " +
            " </script>")
    List<JobProxyTaskCountBO> listJobProxyTaskCount(@Param("jobPoolIds") List<Long> jobPoolIds);

猜测是<> 这个查询过滤条件有问题,然后增加上 转义标签

<![CDATA[state <> 0]]>,然后重启项目解决。

总结

如上是一个排查思路,通过定位对应的mapper,然后进而定位到某个sql,进而定位到引起异常某个字符串附近,最终通过定位排查解决问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值