我有一个.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,但我只是想知道为什么会这样。这是一个类加载问题吗?
谢谢。
答案 0 :(得分:1)
您提到的jar文件已经可以JBoss
使用。你把它放在WEB-INF/lib
; JBoss已经从JBoss提供的jar
加载了类,并且与web-inf
文件夹中的类存在冲突。即使类相同,由不同类加载器加载的类也会被视为不同。
当您放入run.bat
时,只加载了一个jar
文件。 JBoss加载它并且没有冲突的jar。