解析异常SAXParseExceptionis如何处理

news2025/1/16 17:08:04


1.问题背景

今天一位同事找我寻求帮助,售后向他反馈的问题不知道如何排查,他尝试分析服务器端日志文件, 但是日志文件中并没有报错信息,查询源码时候发现,报错信息被try...catch处理

2.排查过程

顺便提一句, 排查问题时候需要记住一句话:“相信日志, 相信数据、相信代码, 不要相信售后的嘴”。

没有报错日志,那么就先分析源码。 通过现有业务功能和日志文件中仅有的操作日志, 定位问题在某个订单处理过程中,我们发现只有某个客户存在问题,其他客户正常,断定是数据问题,因此我尝试了解订单数据,以便了解客户办理的业务信息,在这个过程中发现了可疑点。 

订单的详情内容XML 以CLOB方式存储, 在PLSQL中查看CLOB对象的时候, 发现存在错误提示,从信息看解析字符串异常


Error: 无效的 unicode 字符。
Line: (93)
Text: <remark>&#x0;</remark>
File:

查看订单内容信息,发现订单详情中缺失存在<remark>&#x0;</remark>,remak是用来记录一些备注信息,

          <createOperator>
            <version>0</version>
            <mustBindTerminal>false</mustBindTerminal>
            <isVIPOperator>false</isVIPOperator>
          </createOperator>
          <modifyOperator>
            <version>0</version>
            <mustBindTerminal>false</mustBindTerminal>
            <isVIPOperator>false</isVIPOperator>
          </modifyOperator>
          <remark>&#x0;</remark>
          <operationTerminal>
            <version>0</version>
          </operationTerminal>
          <operationSpot>
            <id>1484</id>
            <version>0</version>
          </operationSpot>
          <version>0</version>
          <code>000006816211</code>

订单的详情内容在Oracle数据库中以CLOB方式存储。 什么时候CLOB呢?Oracle 存储字符串一般使用VARCHAR2 变量类型,当大于其最大字节长度时候(网络上很多人说最大字节长度为32767),需要使用大数据类型来存储,也可以叫大对象类型( Large Object)。CLOB类型的最大优势就是容量大,最多能容纳4GB的数据。 

了解这些信息后, 尝试重现问题, 测试环境中找了1条类似的记录,将订单的对应字段修改为"&#x0" , 程序中取消try..catch处理,复现了现场问题, 查看日志发发现,日志中明确显示了XML中存在字符"&#x0"  造成解析XML错误

Caused by: org.xml.sax.SAXParseException; lineNumber: 93; columnNumber: 24; Character reference "&#x0" is an invalid XML character.
	at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
	at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
	at com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:108)
	... 122 more

3.解决方法

因为字符解析引发的问题, 因此通过replace函数将问题字符串替换为可解析的字符串即可

Replace() 函数是用另外一个值来替代串中的某个值

  • 函数:replace()
  • 含义:替换字符串
  • 用法:replace(原字段,“原字段旧内容“,“原字段新内容“)

需要注意的是使用下面的SQL无法达到解决问题的效果

update orderinfo o
   set o.ordercontent = replace(o.ordercontent,"&#x0", 'null')
where o.orderid = 61926418

字符 "&#x0"中的&会被oracle当做变量来处理,例如下面的SQL执行结果如下

--测试
select '&#x0;' from dual;

执行结果: 

为了解决此问题就需要用到Oralce的转义操作,在SQL语句中通过chr(38) 来替换字符&,参考SQL

--测试
select chr(38)||'#x0;' from dual;

执行结果:

&#x0;

最终使用以下方式解决问题

update orderinfo o
   set o.ordercontent = replace(o.ordercontent, chr(38)||'#x0;', 'null')
where o.orderid = 61926418

4. 文章总结

通过本次问题处理需要记住以下几点

  1. 使用try..catch捕获异常,一定要打印日志,排查问题时才会更加顺利
  2. 大数据CLOB最大的优势为容量大,
  3. SQL 中可以使用chr(38) 来替换特殊字符 “&”


上一篇:Log4j2安全 JNDI漏洞 CVE-2021-44228

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/44808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务框架 SpringCloud微服务架构 4 Ribbon 4.3 饥饿加载

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构4 Ribbon4.3 饥饿加载4.3.1 饥饿加载4.3.2 总结4 Ribbon 4.3 饥饿加载 4…

实验四-----数据库

一、实验目的 1.理解SQL 的视图以及与基本表的区别&#xff1b; 2.掌握SQL 视图的定义、查询、更新&#xff1b; 二、实验环境 1&#xff0e;实验室名称&#xff1a;软件实验室 2&#xff0e;主要仪器设备&#xff1a;PC机、SQL Server2008环境 三、实验内容 1.对学生数据…

阿里云服务器ECS共享型和企业级是什么?

阿里云服务器分为企业级和共享型&#xff0c;企业级具有高性能、稳定计算能力和平衡网络性能的特点&#xff0c;共享型云服务器采用非绑定CPU调度模式&#xff0c;每个vCPU会被随机分配到任何空闲CPU超线程上&#xff0c;不同实例vCPU会争抢物理CPU资源&#xff0c;并导致高负载…

前端策略模式:react hooks 表单验证

react hooks 表单验证—策略模式 1.前置知识概述 策略模式的定义 定义一系列的算法&#xff0c;把它们一个个封装起来&#xff0c;并且使它们可以相互替换&#xff0c;策略模式的目的就是将算法的使用与算法的实现分离开来&#xff0c;避免使用多重条件判断。 策略类封装了具…

Day14--商品详情-渲染商品导航区域

1.渲染商品导航区域 我的操作&#xff1a; 1》在UI结构处加上一个展示的位置 2》在data中写配置项 官方文档&#xff1a; 我的书写&#xff1a; 3》补齐其UI结构在1》中的留存的位置上 4》看看效果图&#xff1a; 5》美化其样式【固定定位】 ******************************…

WinCC通过OPCUA链接Kepware(WinCC作为客户端)

OpcUaServerWinCC服务暂停导致WinCC OPCUA功能不能使用 解决方法: 第一步 下载 连通包 connectivity pack 第二步 使用 Sim_EKB_Install_2017_06_03.exe 授权 connectivity 对应版本号 第三步 运行起来WinCC,查看OpcUaServerWinCC服务是否启动,否则重启。 网上关于OPCUA配置…

七客咖啡50店齐开,拓展咖啡赛道

疫情似乎成了餐饮界品牌的篦子&#xff0c;它检验着品牌的强弱及面对突发状况时的应对能力&#xff0c;从2020年至今&#xff0c;不少品牌都关门以求自保或直接破产。然而&#xff0c;七客咖啡却在6月3号微博发文宣布再开50家门店&#xff0c;具体在上海、武汉、成都、广州等地…

Spark系列之Spark应用程序运行机制

title: Spark系列 第六章 Spark应用程序运行机制 6.1 Spark的基本运行流程 Spark任务的核心执行流程主要分为四大步骤&#xff1a; Driver工作&#xff1a;Build DAG DAGScheduler工作&#xff1a;Split DAG to Stage TaskScheduler工作&#xff1a;Change Stage to TaskSet…

java成神之路-基础篇

java成神之路-基础篇 最近关注了个 主播&#xff0c;Hollis 阿里巴巴的一位专家&#xff0c;该博主总结了一份java成神之路的知识图谱&#xff0c;基于图谱打算出 几期总结文档也有助于自己巩固与学习。于是有了这篇文章。 图谱有着么几个阶段&#xff0c;附件我放到资源里 基…

最全面的SpringMVC教程(三)——跨域问题

前言 本文为 【SpringMVC教程】跨域问题 相关内容介绍。当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同时&#xff0c;就会产生跨域。那么究竟什么是跨域&#xff0c;跨域问题该如何解决&#xff0c;本文具体将对同源策略&#xff0c;什么是跨域&#xff0…

Kvaser Leaf light HS v2 | 如何使用Excel发送和接收CAN报文数据

从1980年代&#xff0c;Kvaser就开始CAN产品的研发&#xff0c;在相关产品开发领域有近40多年的经验&#xff0c;对CAN和相关总线技术有着非常深入的研究。我们将分享一些有趣的发现和一些特定情况的技术处理&#xff0c;欢迎关注❤️广州智维电子科技有限公司❤️&#xff01;…

【微信小程序】冒泡事件与非冒泡事件、将文章数据从业务中分离、wxml的模块化

&#x1f3c6;今日学习目标&#xff1a;第十四期——冒泡事件与非冒泡事件、将文章数据从业务中分离、wxml的模块化 &#x1f603;创作者&#xff1a;颜颜yan_ ✨个人主页&#xff1a;颜颜yan_的个人主页 ⏰预计时间&#xff1a;30分钟 &#x1f389;专栏系列&#xff1a;我的第…

Day14--商品详情-渲染商品详情的数据并优化详情页的显示

提纲挈领&#xff1a; 那么如何在小程序中将这些html的字符串渲染成这莫好看的结构呢&#xff1f; 官方文档&#xff1a;【使用uni-ui组件库中的rich-text组件】 1.渲染商品详情信息 我的操作&#xff1a; 1》在页面结构中&#xff0c;使用 rich-text 组件&#xff0c;将带有…

盘点一个批量提取pdf文件目标信息的实用案例

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤你若盛开,清风自来。大家好&#xff0c;我是皮皮。一、前言前几天在帮助粉丝解决问题的时候&#xff0c;遇到一个简单的小需求&#xff0c;需要批量提取pdf文…

【零基础入门SpringMVC】第六期——尾声

一、注解配置SpringMVC 采用全注解开发&#xff0c;替代我们的web.xml和SpringMVC的核心配置文件 我们需要创建对应的配置类&#xff0c;继承AbstractAnnotationConfigDispatcherServletInitializer 使用的Servlet版本要求在3.0以上项目启动后容器会找到配置了&#xff0c;基于…

台积电跪舔美国,日本却醒悟了而选择独立发展芯片产业

近期台积电大举包机10架将精英人才和设备转往美国引发争议&#xff0c;然而这个时候日本却选择了独立发展芯片产业的道路&#xff0c;摆脱美国的限制&#xff0c;显然日本清醒地认识到依赖美国不会有好结果。台积电之前还在左右摇摆&#xff0c;希望既能继续获得美国芯片的订单…

测试用例的重要性,看完这篇就够了

测试用例对于测试工作的作用&#xff1a;1、指导测试的实施测试用例主要适用于集成测试、系统测试和回归测试。在实施测试时测试用例作为测试的标准&#xff0c;测试人员一定要按照测试用例严格按用例项目和测试步骤逐一实施测试。并对测试情况记录在测试用例管理软件中&#x…

干货 | 数字经济创新创业——如何发展绿色经济

下文整理自清华大学大数据能力提升项目能力提升模块课程“Innovation & Entrepreneurship for Digital Economy”&#xff08;数字经济创新创业课程)的精彩内容。主讲嘉宾&#xff1a;Kris Singh: CEO at SRII, Palo Alto, CaliforniaVisiting Professor of Tsinghua Unive…

[附源码]计算机毕业设计springboot房屋租赁系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【毕业设计】27-基于单片机的家庭监控及防盗报警_热释电报警_人体系统工程设计(原理图+源代码+仿真+实物照片+答辩论文)

【毕业设计】27-基于单片机的家庭监控及防盗报警/热释电报警/人体系统工程设计&#xff08;原理图源代码仿真实物照片论文&#xff09; 文章目录【毕业设计】27-基于单片机的家庭监控及防盗报警/热释电报警/人体系统工程设计&#xff08;原理图源代码仿真实物照片论文&#xff…