上线一个基于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. msdn 上的关于delegate和event的一个例子,理解后加点评论
  2. pytorch 之 加载不同形式的预训练模型
  3. php实现文件留言,PHP文件操作及实例:留言板
  4. java初始化该字符串值_java字符串数组初始化和赋值
  5. C++中的sort函数对二维数组排序是按照什么准则?
  6. ubuntu下打开matlab_ubuntu下matlab安装,添加中文支持与启动
  7. 妙用Python集合求解啤酒问题(携程2016笔试题)
  8. Flask-login 原理
  9. 【CTR】ESMM:多任务联合学习
  10. python如何转换数据集_将数据集转换为HDF5数据
  11. android脚本录制非root,Android 自动精灵 V2.13.1 支持脚本录制免ROOT
  12. WAP网站浏览器(模拟器)大全
  13. css去掉按钮默认样式教程_50个针对设计师CSS3按钮教程
  14. 【seeprettyface.com】数据集:模特/明星人脸数据集
  15. excel计数连续负数(正数)
  16. 商业银行合规管理用OA:“上报、评估、整改、分析”全面数字化
  17. 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest:Gym 101667L
  18. 自学Java的心路历程
  19. 将数字编号翻译为英文编号(python)实现
  20. python十个实战项目

热门文章

  1. 「前端那些事儿」⑤ 定位性能指标FMP
  2. 零部件计算器 (CMD版)
  3. PAT 1099 Build A Binary Search Tree
  4. codevs1051
  5. 触发浏览器下载文件功能
  6. OpenCV 之BGR2YUV
  7. UESTC 1808 琪露诺的算术教室 打表+特判(找规律)
  8. java计算机毕业设计汽车租赁系统演示录像源代码+数据库+系统+lw文档
  9. 代码实现3X3矩阵求逆(C语言 用伴随矩阵实现)
  10. 数据备份中可能出错的情况及解决办法