- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
现在我将 Web 应用程序升级到了 Java 8,在 Tomcat 8 中运行的 axis Web 服务遇到了奇怪的类加载问题。
安装 Web 应用程序后首次调用 Web 服务将导致 RuntimeException 和“在类路径中找不到编译器!(您可能需要添加 'tools.jar')”错误。
接下来对该 Web 服务的所有调用都可以正常工作(显然 tools.jar 确实存在吗?)。
通过删除部署目录中展开的 webapp 文件夹可以重现该行为。下次tomcat启动后,第一次调用又会失败。如果展开的文件夹已经存在,则重新启动 tomcat 不会导致错误。
当 tomcat/webapp 仍在使用 Java 7 运行时,不会发生该错误。
现在, Axis 心国的错误有着悠久的传统。早期的解决方案是将tools.jar复制到tomcats lib目录中(又名使tools.jar在tomcats类路径中可用)。默认情况下它不存在,因为 axis 显然是使用 JRE 运行的(即使您在 JAVA_HOME 中使用 JDK 启动 tomcat)。
遗憾的是这没有帮助。我尝试了几种方法将tools.jar放入tomcats类路径:
没有任何帮助,第一次调用仍然失败。
然后我尝试了 JAVA_HOME 和 JRE_HOME。 Tomcat 尽可能以 JRE 启动,并且仅在使用某些需要 JDK 的功能时才使用 JDK。我尝试让 tomcat 使用 JDK 而不是 JRE,但错误仍然存在。
那么,提问时间:
tomcat爆webapp.war时类加载与普通的有什么区别如果 war 在早期的服务器运行中已经爆发了?
启动时,tomcat 会将以下内容写入日志文件:
Server version: Apache Tomcat/8.0.15
Server built: Nov 2 2014 19:25:20 UTC
Server number: 8.0.15.0
OS Name: Windows Server 2008 R2
OS Version: 6.1
Architecture: x86
JAVA_HOME: C:\Dev\Java\jdk1.8.0_25\jre
JVM Version: 1.8.0_25-b18
JVM Vendor: Oracle Corporation
CATALINA_BASE: C:\Dev\apache-tomcat-8.0.15
CATALINA_HOME: C:\Dev\apache-tomcat-8.0.15
Command line argument: -Djava.util.logging.config.file=c:\Dev\apache-tomcat-8.0.15\conf\logging.properties
Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
Command line argument: -Djava.endorsed.dirs=c:\Dev\apache-tomcat-8.0.15\endorsed
Command line argument: -Dcatalina.base=c:\Dev\apache-tomcat-8.0.15
Command line argument: -Dcatalina.home=c:\Dev\apache-tomcat-8.0.15
Command line argument: -Djava.io.tmpdir=c:\Dev\apache-tomcat-8.0.15\temp
所以显然它以某种方式获得了对 JRE 的引用(尽管我只指定了 JDK,请参见上文)。我怎样才能改变它?
编辑2:罪魁祸首是 axis 第一次调用 Web 服务时编译的 .jws 文件。这些编译文件的存在是错误仅在第一次调用时发生的原因。
当然,这根本不能解释为什么第一次调用会因“编译器丢失”错误而失败,即使创建了必要的编译文件并可用于后续调用......
编辑:根据请求的 Axis 错误的堆栈跟踪。与此处处理丢失的tools.jar 的所有其他主题相比,没有什么特别的:
java.lang.RuntimeException: No compiler found in your classpath! (you may need to add 'tools.jar')
at org.apache.axis.components.compiler.Javac.compile(Javac.java:156)
at org.apache.axis.handlers.JWSHandler.setupService(JWSHandler.java:199)
at org.apache.axis.handlers.JWSHandler.invoke(JWSHandler.java:72)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:249) at org.apache.axis.transport.http.QSMethodHandler.invokeEndpointFromGet(QSMethodHandler.java:129)
at org.apache.axis.transport.http.QSMethodHandler.invoke(QSMethodHandler.java:94)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.apache.axis.transport.http.AxisServlet.processQuery(AxisServlet.java:1226)
at org.apache.axis.transport.http.AxisServlet.doGet(AxisServlet.java:249)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:277)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2407)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2396)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
最佳答案
我得到的堆栈跟踪中的实际消息是原始发布者的消息,但前面有此消息。
看起来编译器返回的值与预期不同,但编译仍然完成并引发异常。这是来自 http://www.docjar.org/html/api/org/apache/axis/components/compiler/Javac.java.html
136 if (modern) {
137 int compilationResult =
138 ((Integer)compile.invoke(compiler, new Object[]
139 {
140 toStringArray(fillArguments
141 (new ArrayList()))})).intValue();
142
143 result = (compilationResult == 0);
144 log.debug("Compilation Returned: "
145 + Integer.toString(compilationResult));
146 }
147 else {
148 Boolean ok =
149 (Boolean)compile.invoke(compiler, new Object[]
150 {toStringArray(fillArguments(new ArrayList()))});
151
152 result = ok.booleanValue();
153 }
154 } catch (Exception cnfe){
155 log.error(Messages.getMessage("noCompiler00"), cnfe);
156 throw new RuntimeException(Messages.getMessage("noCompiler00"));
5-Apr-2015 20:16:42 ERROR 160663 [http-nio-10470-exec-10] org.apache.axis.components.compiler.Javac.compile(Javac.java:155) - No compiler found in your classpath! (you may need to add 'tools.jar')
java.lang.ClassCastException: com.sun.tools.javac.main.Main$Result cannot be cast to java.lang.Integer
at org.apache.axis.components.compiler.Javac.compile(Javac.java:137)
at org.apache.axis.handlers.JWSHandler.setupService(JWSHandler.java:199)
at org.apache.axis.handlers.JWSHandler.generateWSDL(JWSHandler.java:294)
at org.apache.axis.strategies.WSDLGenStrategy.visit(WSDLGenStrategy.java:33)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.generateWSDL(SimpleChain.java:104)
at org.apache.axis.server.AxisServer.generateWSDL(AxisServer.java:454)
at org.apache.axis.transport.http.QSWSDLHandler.invoke(QSWSDLHandler.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.axis.transport.http.AxisServlet.processQuery(AxisServlet.java:1226)
at org.apache.axis.transport.http.AxisServlet.doGet(AxisServlet.java:249)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
我已经更改了代码axis-1_4\src\org\apache\axis\components\compiler\Javac.java 如下所示,因为原始代码需要 JDK 8 之前的编译器的整数。 JDK 8 返回一个枚举。我只在本地副本上执行此操作并重新构建并且工作正常。
// Call the compile() method
Method compile = c.getMethod("compile",
new Class [] { String[].class });
if (modern) {
log.info("Using modified axis for jdk 8 compiler");
Object compilationResult = (compile.invoke(compiler, new Object[]
{
toStringArray(fillArguments
(new ArrayList()))}));
result = ("OK".equalsIgnoreCase(compilationResult.toString()));
log.debug("Compilation Returned: "+ compilationResult);
}
关于java - tools.jar 丢失 - 但仅在第一次调用时(Tomcat 8/Java 8/Axis),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27965823/
我仅在 WIN7 PC 上收到此通知,仅使用 IE。 Firefox 总是很好,旧版 Windows 上的 IE 似乎也不错。这让我大吃一惊,我不知道为什么 IE 认为 SSL 证书有问题。有没有人以
概述 对于我产品的新版本 v1.9.0,我创建了一个新的 MSI 安装程序。该应用程序的先前版本是 v1.7.0。 卸载旧版本然后安装新版本工作正常。 但是当我尝试使用 v1.9.0 安装程序更新旧版
该网站有一个全高图像启动。更多内容位于首屏下方,图像底部有一个“滚动”元素,以提示用户发现其余内容。单击后,我成功地使网站向下滚动 300 像素。然而,我想顺利地做到这一点。这是我当前的代码: w
var i = 0; function Myfunc() { var newdiv = document.createElement('div'); var el = document
这纯粹是为了学习目的;我知道 CSS 将是这种情况下的首选方法。 我知道在 JavaScript 中,您可以使用内联事件处理将鼠标悬停在图像上,如下所示: 我知道您可以在您的站点中安装 jQuery
我只想从curl请求中获取 header curl -I www.google.com 一切都很棒。现在我想这样做,但也传递发布数据: curl -I -d'test=test' www.google
以下代码旨在更改一个字段的颜色: Untitled Document var bkColor =
我正在使用 grep 递归搜索目录,并使用以下参数希望只返回第一个匹配项。不幸的是,它返回了不止一个——事实上,我上次查看时返回了两个。似乎我有太多的争论,尤其是没有得到想要的结果。 :-/ # gr
我只想搜索当前目录中的所有文件。我试过这个 grep foo * 但我收到此错误 grep: bar: Is a directory 我也尝试过这个 grep -r foo 但这也在搜索子目录。 最佳
我正在构建一个销售点应用程序,我想打印一张收据。问题是我使用的打印机无法打印纯文本的任何图形,我在 javafx 中只能找到使用 Print API 打印节点或使用像 jasper 这样都包含图形的报
是否有任何操作系统在完全加载时仅提供用于控制台应用程序执行的 java 环境?理想情况下,它会在加载时自动启动程序 最佳答案 这是一个名称为:JavaOS 的东西 从我的角度来看,更好的方法是安装一个
在工作中,我们有一个每晚执行 mysql 数据转储的脚本。对于开发,我们通常需要使用来自最近转储的数据。一段时间以来,我们一直每天都进行数据库还原,但现在我们已经到了每天还原花费近一个小时的地步。有没
我的移动模式菜单有问题。 onClick 它淡出。我想保留此设置,但我不希望它在单击下拉部分时淡出。这是链接:http://jsfiddle.net/zLLzrs6b/3/感谢您的帮助! html:
经过大量研究和反复试验,我谦虚地向各位 CSS 专家寻求帮助。这就是我需要的: 我有两张图片:titlelogo 和 newlogo。 在全屏模式下,newlogo 需要在左边,titlelogo 在
这个问题在这里已经有了答案: Exclusive CSS selector (3 个答案) 关闭 3 年前。 我的文档结构如下: ... ... something something someth
我有一个具有以下要求的表: 所有列的宽度必须可变 所有列的宽度不得超过必要的宽度 所有单元格必须保留空白(white-space:pre/pre-wrap) 当(且仅当)超过最大定义宽度 (1000p
我正在寻找一个正则表达式来仅匹配具有特殊 字符且大小为4+ 的数字 字符串。我对此处发布的问题做了一些评论: 测试网站: http://regexlib.com/RETester.aspx 1- re
我正在为我的元素开发一个纯 CSS 灯箱解决方案。我用谷歌搜索了它,但到目前为止只找到了部分解决方案。 我正在寻找这些功能: 显示任意宽任意高的内容(无固定高/宽) 垂直居中和水平居中 如果内容宽度和
出于各种原因,我目前正在尝试使用 HTML/CSS 创建网格布局(我知道 Bootstrap 等,但在这种情况下没有选择,而且我无法添加标记元素)。 我有以下代码(容器 div,每次都有一个带有 ul
有没有办法使用String.format()格式化 double 以仅获取小数? System.out.println(String.format("%.2f", 1.23456d)); 正如预期的那
我是一名优秀的程序员,十分优秀!