Pře*_*tný 21 java apache-commons apache-fop tomcat7
我在Tomcat 7上开发webapp.在我的本地版本的Tomcat 上一切正常,但是当我在生产服务器上部署它时,它会抛出这个异常.
java.lang.VerifyError: (class: org/apache/commons/logging/impl/Log4JLogger, method: fatal signature: (Ljava/lang/Object;Ljava/lang/Throwable;)V) Incompatible object argument for function call
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2595)
at java.lang.Class.getConstructor0(Class.java:2895)
at java.lang.Class.getConstructor(Class.java:1731)
at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:410)
at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:529)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
at org.apache.fop.apps.FopFactory.<clinit>(FopFactory.java:68)
at cz.soma.tomcat.generator.DokumentaceUtils.createPdfDocument(DokumentaceUtils.java:818)
at cz.soma.tomcat.generator.FileFactory.createPdfDocument(FileFactory.java:58)
at cz.soma.tomcat.generator.Generator.doPost(Generator.java:111)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
Run Code Online (Sandbox Code Playgroud)
当我尝试FopFactory.newInstance();(来自Apache FOP 1.0)时抛出错误.之后,它试图LogFactory.getLog(FopFactory.class);.它logClass.getConstructor(logConstructorSignature);被称为,其中logConstructorSignature包含一个String.class.(至少在我的本地机器上)
try {
logConstructor = logClass.getConstructor(logConstructorSignature);
return (logConstructor);
} catch (Throwable t) {
throw new LogConfigurationException
("No suitable Log constructor " +
logConstructorSignature+ " for " + logClassName, t);
}
Run Code Online (Sandbox Code Playgroud)
在此之后调用java.lang.Class函数并抛出异常.您有任何想法,为什么错误只会在生产服务器上抛出,而不是在本地计算机上抛出?
当您针对与运行时(在生产服务器中)使用的库不同的库进行编译时,将出现java.lang.VerifyError错误。
您可以使用commons-logging-1.1.1.jar代替commons-logging-1.0.4.jar. 然后重建你的项目并检查。
资源链接: http://www.java-samples.com/showtutorial.php ?tutorialid=674
如果你使用maven,那么在你的pom.xml中添加这个依赖项,
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
并从 pom.xml 中删除以下依赖项
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.0.4</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
资源链接: 获取 java.lang.ClassNotFoundException:org.apache.commons.logging.LogFactory 异常
templatetypedef已经挖掘了这个问题并给出了 2 个解决方案
验证错误通常意味着您加载的类文件在某种程度上存在格式错误,或者引用了另一个类文件,该类文件的更改方式导致另一个类文件中的代码不再有效。例如,如果您编译了一个引用其他类中的方法的类文件,然后在更改该方法的签名后独立修改并重新编译了第二个类,则会出现此类错误。
我建议进行一次干净的构建,看看这个问题是否消失。如果没有,请检查您是否使用最新的 JAR 和源文件。
资源链接: /sf/answers/378806991/
如果本地服务器和生产服务器之间的 JDK 版本不匹配,请尽可能使其相同。您还可以尝试使用不同的 JDK 版本并在不同的计算机上进行编译。
资源链接: 出现 java.lang.VerifyError 的原因
希望它能帮助你。
| 归档时间: |
|
| 查看次数: |
668 次 |
| 最近记录: |