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

简介: 全网首发:跟踪分析This parser does not support specification “null“ version “null“

详细错误:

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();
  }

编译相关源码参考

目录
相关文章
|
7月前
|
SQL Java 数据库连接
MyBatis【源码探究 01】mapper.xml文件内<if test>标签判断参数值不等于null和空(当参数值为0)时筛选条件失效原因分析
MyBatis【源码探究 01】mapper.xml文件内<if test>标签判断参数值不等于null和空(当参数值为0)时筛选条件失效原因分析
898 0
MyBatis【源码探究 01】mapper.xml文件内<if test>标签判断参数值不等于null和空(当参数值为0)时筛选条件失效原因分析
|
7月前
|
SQL Java 关系型数据库
JDBC PreparedStatement 字段值为null导致TBase带宽飙升的案例分析
JDBC PreparedStatement 字段值为null导致TBase带宽飙升的案例分析
135 0
|
PHP
php开发实战分析(3):php中判断变量为空(0、false、null)的方法
php开发实战分析(3):php中判断变量为空(0、false、null)的方法
289 0
|
Java
java.lang.UnsupportedOperationException: This parser does not support specification “null“ version “
java.lang.UnsupportedOperationException: This parser does not support specification “null“ version “
157 0
|
Java 编译器
String拼接出现null?你看到的分析可是错的
String拼接出现null?你看到的分析可是错的
243 0
String拼接出现null?你看到的分析可是错的
|
iOS开发
“(null)” is of a model that is not supported by this version of Xcode. Please use a different device.
出现这个问题有两种情况: 第一: 就是手机系统的版本相对于Xcode的版本比较高,将xcode的版本升级就行了。 第二: 就是Xcode出问题了,判断失误,直接重启Xcode就好了。
893 0
|
SQL 关系型数据库 Oracle
not null constraint和check constriant的问题及分析
oracle的constraint有6类,如下。 但是基于列的constraint主要有 type 为C,P,R,U 接触比较多的。 今天来和大家讨论check constraint和not null constraint,它们的constraint type都为C,但是实际应用中还是有很大的差别。
971 0
|
7月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之从MySQL同步数据到Doris时,历史数据时间字段显示为null,而增量数据部分的时间类型字段正常显示的原因是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7月前
|
SQL 关系型数据库 MySQL
python在mysql中插入或者更新null空值
这段代码是Python操作MySQL数据库的示例。它执行SQL查询从表`a_kuakao_school`中选取`id`,`university_id`和`grade`,当`university_id`大于0时按升序排列。然后遍历结果,根据`row[4]`的值决定`grade`是否为`NULL`。若不为空,`grade`被格式化为字符串;否则,设为`NULL`。接着构造UPDATE语句更新`university`表中对应`id`的`grade`值,并提交事务。重要的是,字符串`NULL`不应加引号,否则更新会失败。
172 2

热门文章

最新文章