在WEB-INF / lib和CLASSPATH中包含相同Jar时的类转换异常

时间:2012-09-25 04:03:20

标签: java servlets jboss classcastexception

我有一个.jar文件添加到JBoss 5启动(run.bat / run.sh)文件的CLASSPATH中。这是一个依赖jar,它是从基于servlet的应用程序引用的。如果我使用此设置,servlet加载正常并按预期工作。但是,我注意到如果我在servlet的WEB-INF / lib目录中有相同的jar,我会得到一个类转换异常,如下所示:

ERROR [STDERR] ERROR: com.idoox.wasp.ProtocolRepositoryImpl - Exception in protocolHandler soap, protocolHandler com.server.saaj.soap.SOAP11ProtocolHandler, class space root.wasp-impl.SOAP : 
ERROR [STDERR] EXCEPTION: 
ERROR [STDERR] com.systinet.saaj.soap.SOAP11ProtocolHandler cannot be cast to org.idoox.wasp.ProtocolHandler 
ERROR [STDERR] java.lang.ClassCastException: com.server.saaj.soap.SOAP11ProtocolHandler cannot be cast to org.idoox.wasp.ProtocolHandler 

这不是问题,因为我不会在这两个地方都有jar,但我只是想知道为什么会这样。这是一个类加载问题吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

您提到的jar文件已经可以JBoss使用。你把它放在WEB-INF/lib; JBoss已经从JBoss提供的jar加载了类,并且与web-inf文件夹中的类存在冲突。即使类相同,由不同类加载器加载的类也会被视为不同。
当您放入run.bat时,只加载了一个jar文件。 JBoss加载它并且没有冲突的jar。