上线一个基于solr的基于rest的搜索应用服务的过程中,启动tomcat,后台抛出了两个异常

第一个异常

java.lang.RuntimeException: java.lang.ExceptionInInitializerErrorat com.taobao.terminator.manage.common.IndexBuilder.initialize(IndexBuilder.java:111)at com.taobao.terminator.manage.common.IndexBuilder.(IndexBuilder.java:59)at com.taobao.terminator.pubhook.servlet.BuildIndexAction$1.run(BuildIndexAction.java:170)at java.lang.Thread.run(Thread.java:636)
Caused by: java.lang.ExceptionInInitializerErrorat com.taobao.terminator.manage.common.IndexBuilder.initialize(IndexBuilder.java:94)... 3 more
Caused by: java.lang.RuntimeException: XPathFactory#newInstance() failed to create an XPathFactory for the default object model: http://java.sun.com/jaxp/xpath/dom with the XPathFactoryConfigurationException: javax.xml.xpath.XPathFactoryConfigurationException: No XPathFctory implementation found for the object model: http://java.sun.com/jaxp/xpath/domat javax.xml.xpath.XPathFactory.newInstance(Unknown Source)at org.apache.solr.core.Config.(Config.java:42)... 4 more

这个问题以前没有碰见过,并且在自己本地PC机上测试是不会抛出以上异常的,但是,在线上服务上就会抛出这样的异常。解决这个问题的办法是先在google上找果然找到答案,在apache solr的官方网站上找到了,http://wiki.apache.org/solr/SolrTomcat

Troubleshooting Errors

It's possible that you get an error related to the following:

SEVERE: Exception starting filter SolrRequestFilter
java.lang.NoClassDefFoundError: Could not initialize class org.apache.solr.core.SolrConfigat org.apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:76)
.........
Caused by: java.lang.RuntimeException: XPathFactory#newInstance() failed to create an XPathFactory for the default object model: http://java.sun.com/jaxp/xpath/dom with the XPathFactoryConfigurationException: javax.xml.x
path.XPathFactoryConfigurationException: No XPathFctory implementation found for the object model: http://java.sun.com/jaxp/xpath/domat javax.xml.xpath.XPathFactory.newInstance(Unknown Source)

This is due to your tomcat instance not having the xalan jar file in the classpath. It took me some digging to find this, and thought it might be useful for others. The location varies from distribution to distribution, but I essentially just added (via a symlink) the jar file to the shared/lib directory under the tomcat directory.

作者的解释是没有在%TOMCAT_HOME%shared/lib 这个文件夹中放xalan 相关的jar包,但是,按照作者的办法,我将xalan.jar从本地拷贝到服务上,重新启动还是不解决问题。

之后又对本地应用程序进行调试跟踪启动代码,最后定位到了

javax.xml.xpath.XPathFactoryFinder  这个类的主要职责就就是为XPathFactory工厂类的工厂方法,通过参数找XPath的解析对象。

XPathFactoryFinder类中找解析对象的流程是这样的:

  1. 先组装出一个key,这个key是一个类前缀和工厂方法参数的组合,比如:XPathFactoryFinder类的 public XPathFactory newFactory(String uri)方法 传入的参数是http://java.sun.com/jaxp/xpath/dom 那会组装一个key值是“javax.xml.xpath.XPathFactory:http://java.sun.com/jaxp/xpath/dom”
  2. 相会从系统变量中找 System.getProperty(key) 如果你在项目启动时在命令行中添加了 -Djavax.xml.xpath.XPathFactory:http://java.sun.com/jaxp/xpath/dom=XXXXXX这样的变量,那么就会用这个系统变量的值作为实现类作为方法的返回值
  3. 如果没有在系统变量中找到,那就到%java_home%jre/lib/jaxp.properties 这个配置为文件中找 javax.xml.xpath.XPathFactory:http://java.sun.com/jaxp/xpath/dom 这个变量,如果找到的话就用这个变量的值作为 .接口XPathFactory的实现类作为方法返回值返回。
  4. 如果在以上的过程中都没有找到  javax.xml.xpath.XPathFactory:http://java.sun.com/jaxp/xpath/dom 的值,那么XPathFactoryFinder会 返回一个默认对象作为返回结果。如果这个默认类在当前系统中不存在,那就会抛出异常了。
注意:以上在jaxp.properties这个类中的key中“:”前必须要加“\”反斜杠作为转义符,不然java 的Properties类会将“:”转义,例如在jaxp.properties中要这样写:javax.xml.xpath.XPathFactory\:http\://java.sun.com/jaxp/xpath/dom=com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl, 千万不能弄错,因为这个问题,让我折腾了好久。
第二个异常
2012-01-07 16:01:59,511 [org.apache.solr.core.Config] - ERROR - Exception during parsing file: solrconfig.xml:javax.xml.parsers.ParserConfigurationException: Feature 'http://apache.org/xml/features/xinclude' is not recognized.

    at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)
    at org.apache.solr.core.Config.<init>(Config.java:110)
    at org.apache.solr.core.SolrConfig.<init>(SolrConfig.java:130)
    at org.apache.solr.core.SolrConfig.<init>(SolrConfig.java:108)
    at com.taobao.terminator.manage.common.IndexBuilder.initialize(IndexBuilder.java:94)
    at com.taobao.terminator.manage.common.IndexBuilder.<init>(IndexBuilder.java:59)
    at com.taobao.terminator.pubhook.servlet.BuildIndexAction$1.run(BuildIndexAction.java:174)

at java.lang.Thread.run(Thread.java:636)

处理这个异常只要在tomcat的启动命令JAVA_OPTS参数上,添加一个系统变量:-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl 这样就好了。

solor启动和xpath相关抛异常的解决相关推荐

  1. springboot无法启动,不报任何异常,解决方法如下

    mvn clean install -Dmaven.test.skip=true 项目根目录下面,执行上面的命令,重新启动,OK了 执行上面的语句,会调用系统配置的maven,如果系统未配置,需要先配 ...

  2. 近日测试发现所有Excel相关功能均会抛异常,查后发现与福昕阅读器不兼容

    近日测试发现所有Excel相关功能均会抛异常,查后发现与福昕阅读器不兼容 参考文章: (1)近日测试发现所有Excel相关功能均会抛异常,查后发现与福昕阅读器不兼容 (2)https://www.cn ...

  3. java 代码段 执行超时 抛异常_Java 并发队列详解TransferQueue、BlockingQueue、BlockingDeque

    阻塞队列 BlockingQueue java.util.concurrent 包里的 BlockingQueue 接口表示一个线程安放入和提取实例的队列. BlockingQueue 用法 Bloc ...

  4. 记一次Task抛异常,调用线程处理而引发的一些随想

    记一次Task抛异常,调用线程处理而引发的一些随想 多线程调用,任务线程抛出异常如何在另一个线程(调用线程)中捕获并进行处理的问题. 1.任务线程在任务线程执行语句上抛出异常. 例如: 1 priva ...

  5. Apollo 客户端日志抛异常 c.c.f.a.i.RemoteConfigLongPollService : Long polling failed, will retry ...

    目录 问题背景 解决办法 根因分析 问题背景 微服务依赖 apollo-client 并完成配置.启动微服务之后,会每隔两分钟在控制台输出内容 " c.c.f.a.i.RemoteConfi ...

  6. 关于接口使用抛异常还是返回错误码,下列哪些说法符合《阿里巴巴Java开发手册》

    关于接口使用抛异常还是返回错误码,下列哪些说法符合<阿里巴巴Java开发手册>:答案在文末 A. 向公司外部提供的http/api接口,推荐使用"错误码"方式返回异常或 ...

  7. java通过抛异常来返回提示信息

    结论: 如果把通过抛异常的方式得到提示信息,可以使用java.lang.Throwable中的构造函数: public Throwable(String message) {fillInStackTr ...

  8. memcached的基本命令(安装、卸载、启动、配置相关)

    memcached的基本命令(安装.卸载.启动.配置相关): -p 监听的端口  -l 连接的IP地址, 默认是本机   -d start 启动memcached服务  -d restart 重起me ...

  9. 扩展方法where方法查询不到数据,不会抛异常,也不是返回的null

    如题,"扩展方法where方法查询不到数据,不会抛异常,也不是返回的null",示例代码如下: Product类: public class Product{private str ...

最新文章

  1. centos python2.7升级到3.7_centos系统升级python 2.7.3
  2. [导入]用Ext做的登陆窗口的例子
  3. Nginx教程-http_core_module变量
  4. Guava入门~CharMatcher
  5. 通过gdb调试分析Linux内核的启动过程
  6. python-day19-面向对象进阶-加载顺序,命名空间,组合(实现松耦合)
  7. 根据应用场景人工智能技术有哪些分类?
  8. java txt 二维数组_java 将一个二维数组存到txt文件里,然后再读取
  9. 如何使ArcIMS图例显示中文
  10. python 移动文件位置-python工具-文件及文件夹移动及处理
  11. 颜色及图片识别原理,颜色识别传感器介绍
  12. 在python中month函数的用法_Python代码中calendar.monthrange(year,month)函数其什么作用呢?...
  13. 提高排名的 15 个基本 SEO 技巧
  14. 豫教科计算机资源管理教案,豫科版小学五年级上册信息技术教案(全册.doc
  15. Java正则表达式实现港、澳、台身份证验证
  16. java小白日记第五天
  17. python枚举是什么意思_什么是枚举python,
  18. 怎样识别三洋18650锂电池电芯
  19. 2021年中式烹调师(高级)考试及中式烹调师(高级)考试试卷
  20. vs2015+qt国际化翻译问题:Linguist中源代码不可见

热门文章

  1. ubuntu chinese letter 屏幕跟读器
  2. 无刷直流电机的无位置传感器控制学习笔记
  3. json_object_put: Assertion `jso->_ref_count > 0‘ failed.Aborted (core dumped)
  4. matlab 多智能体系统编队控制仿真,非线性,一致性
  5. 最新v4.2版本CRMEB商城API接口文档标准版前台(二)
  6. 林汉文简历:简单易用的30个SEO优化小技巧
  7. 问题 B: 走向人生巅峰
  8. PClint报错分析实战
  9. jstl中fn表达式
  10. Python办公自动化之Excel做表自动化