详细错误:

Caused by: java.lang.UnsupportedOperationException: This parser does not support specification "null" version "null"at javax.xml.parsers.SAXParserFactory.setSchema(SAXParserFactory.java:394)at net.loomchild.segment.srx.io.Srx2SaxParser.<init>(Srx2SaxParser.java:181)at org.languagetool.tokenizers.SrxTools.createSrxDocument(SrxTools.java:52)at org.languagetool.tokenizers.SRXSentenceTokenizer.<init>(SRXSentenceTokenizer.java:53)at org.languagetool.tokenizers.SimpleSentenceTokenizer.<init>(SimpleSentenceTokenizer.java:38)at org.languagetool.Language.<clinit>(Language.java:66)... 47 more

  分析如下:

  • 查了一下,说是跟xerces.jar有关。吾搜索了一下工程,并无此文件。
  • 单独运行LanguageToolTest是对的。
  • 整合到泰山OFFICE就错误了。

  那么就是泰山OFFICE的某个包冲突了?吾随后把包复制到LanguageToolTest进行排查。一次5个,几次就定位到了。是一个pull-parser-2.jar导致的。将此文件删除,功能正常。

  这事不能就这么结束了。为什么加个包就错了呢?于是通过源码跟踪,发现不同情形下,产生的SAXParserFactory不一样(这也是理所当然的):

错误 org.gjt.xpp.jaxp11.SAXParserFactoryImpl@2328c243
正确 com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl@6659c656
{http://xml.org/sax/features/namespaces=true, http://xml.org/sax/features/validation=false}
true
com.sun.org.apache.xerces.internal.jaxp.validation.SimpleXMLSchema@6d5380c2
false

  产生SAXParserFactory的代码是:

 public Srx2SaxParser(Map<String, Object> parameterMap) {factory = SAXParserFactory.newInstance();}public static SAXParserFactory newInstance() {return FactoryFinder.find(/* The default property name according to the JAXP spec */SAXParserFactory.class,/* The fallback implementation class name */"com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl");}static <T> T find(Class<T> type, String fallbackClassName)throws FactoryConfigurationError
{T provider = findServiceProvider(type);if (provider != null) {return provider;}
}

  到了这里其实就明白了:优先搜索jar包中是否有SAXParserFactory的类,如果有就使用;否则使用默认的。

  原因找到了。怎么解决呢?首先修改JDK肯定不行。所以:

  • 办法一:去掉有问题的包。这个想法是好的,现实则有可能实现不了。
  • 办法二:在相关代码中直接指定工厂。具体代码:
    SAXParserFactory factory = SAXParserFactory.newInstance();try{Class<?> clazz = Class.forName("com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl");factory = (SAXParserFactory)clazz.newInstance();}catch (Exception e){e.printStackTrace();}
  • 编译相关源码参考

LINUX下载编译:segment.jar/net.loomchild.segment.srx.Srx2SaxParser_柳鲲鹏-CSDN博客

全网首发:跟踪分析This parser does not support specification “null“ version “null“相关推荐

  1. 全网首发!逆向分析学生机房管理助手7.4随机进程名算法

    一到九月份,学生机房管理助手就直接开始窜稀式更新,连更两个版本,这使我弄不到7.3的样本,只能分析7.4了.大伙有7.3样本欢迎联系我. 7.2版本分析见最新支持7.2!用C++干掉讨厌的学生机房管理 ...

  2. 软件测试面试必看,资深测试工程师面试题集锦 全网首发

    全网首发,最牛的全套软件测试  ,自动化测试面试题,这些面试题都在文章末尾,有需要的可以自取 废话少说直接开始咱们今天的整体内容, 1.自我介绍? 我是谁.工作几年.你上家公司做什么.负责什么.你的优 ...

  3. [Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  4. [Python从零到壹] 十三.机器学习之聚类算法四万字总结全网首发(K-Means、BIRCH、树状聚类、MeanShift)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  5. [Python从零到壹] 十二.机器学习之回归分析万字总结全网首发(线性回归、多项式回归、逻辑回归)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  6. PTA 栈 (20分)(全网首发)(实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1))

    题目描述: 我们知道平凡的栈有几个操作: push(value) 将 value 压入栈 pop() 将栈顶元素弹出, 并返回这个弹出的元素. 现在我们想要在平凡栈的基础上实现以下几个操作: push ...

  7. 全网首发!老大众奥迪碟盒通信协议破解,可以模拟数码碟盒,外接AUX蓝牙U盘等音频设备

    文章目录 前言 什么是碟盒? 碟盒接口定义 车机与碟盒之间的通信协议 主机向碟盒发送数据协议 数据帧格式 逻辑分析仪真机抓包分析 起始信号波形: 数据0信号波形: 数据1信号波形: 逻辑分析仪抓包分析 ...

  8. 全网首发,大众奥迪领驭帕萨特DIY数码碟盒增加USB和蓝牙播放音乐功能使用原车接口无损改装

    文章目录 全网首发!大众奥迪DIY数码碟盒增加USB和蓝牙播放音乐功能 前言 1.设计指标 2.方案设计 2.1.外壳选择 2.2.蓝牙方案 2.3.MCU方案 3.原理图设计 4.PCB设计 5.程 ...

  9. 2023年全网首发双端完美获取通讯录系统源码

    源码简介: ​ 2023年全网首发双端完美获取通讯录系统源码! 请勿非法使用! 仅供研究学习技术使用!无技术支持! ​ 下载链接 网盘源码   密码:3lev 背景 网络应用程序源码是指用于构建网络应 ...

  10. MAML-Tracker: 目标跟踪分析:CVPR 2020(Oral)

    MAML-Tracker: 目标跟踪分析:CVPR 2020(Oral) Tracking by Instance Detection: A Meta-Learning Approach 论文链接:h ...

最新文章

  1. [Linux].netrc或者_netrc使用可以
  2. 登陆共享服务器的位置,共享服务器哪里登陆
  3. Android实现程序之间的跳转
  4. [Spark][Python]groupByKey例子
  5. python文字游戏源代码求年纪_Python实现猜年龄游戏代码实例
  6. 8086算术移位指令SAL和SAR
  7. 070——VUE中vuex之使用getters计算每一件购物车中商品的总价
  8. 队列Queue:任务间的消息读写,安排起来~
  9. 温度记录仪开发_TinkerNode NBIoT物联网开发板
  10. 迭代DOM集合的几种方法
  11. matlab虚拟现实之V-Realm Builder2中viewpoint节点的使用
  12. 重拾React: React 16.0
  13. html5实时预览,对决JavaScript HTML5脚本API预览
  14. Java8 实战系列-04-lambda 内置函数
  15. Excel-财务函数1
  16. python第三方模块下载方法(最详最细)
  17. 学习笔记(1):《微电子器件》陈星弼(第四版)第1章 半导体物理基础及基本方程
  18. MySQL参数max_connect_errors分析释疑
  19. 如何开启计算机cpu虚拟化,win10如何开启虚拟化支持_win10开启cpu虚拟化的方法
  20. 小卡与质数2全网最简单思路 看不懂你来打我

热门文章

  1. php异步通知并查询,服务器异步通知的接收by php
  2. python 数学画图工具_[python][数据分析] matplotlib 和 pyecharts的绘图工具
  3. Spring Boot 配置文件bootstrap和application的加载顺序
  4. Idea 中使用Lombok 编译报找不到符号
  5. 关于element el-button使用$attrs的一个注意要点
  6. 前端项目框架搭建随笔---Tab组件的编写
  7. android读取xml文件来实现省份,城市,区的选择
  8. Linux vim编辑器简单使用之二:vim操作快捷键、小技巧
  9. 【安全组网】思科IOS设备基础应用
  10. Template Method (模板方法模式)