Загрузчик классов ищет неправильный класс пакета

У меня есть два приложения (скажем, App1 и App2) на сервере Tomcat. У обоих есть ESAPI-2.0-rc5.jar в папке C:\Tomcat7_0_29\webapps\AppX\WEB-INF\lib. App2 использует opensaml-2.6.0.jar (внутри папки C:\Tomcat7_0_29\webapps\App2\WEB-INF\lib) для нужд SAML.

Теперь каждый раз, когда я пытаюсь закодировать данные поля в App1, я получаю ошибку java.lang.ClassNotFoundException: org.opensaml.ESAPISecurityConfig . Перепробовал много вариантов и ни разу не работал вместе. Пожалуйста помоги

Полная трассировка стека:

org.owasp.esapi.errors.ConfigurationException: java.lang.ClassNotFoundException: org.opensaml.ESAPISecurityConfig SecurityConfiguration class (org.opensaml.ESAPISecurityConfig) must be in class path.
    at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:113)
    at org.owasp.esapi.ESAPI.securityConfiguration(ESAPI.java:445)
    at org.owasp.esapi.ESAPI.encoder(ESAPI.java:208)
    at xxx.xxx.xxxx.xx.removeBadChars(BaseObject.java:131)
    at xxx.xxx.xxxx.xx.convert(ClaimsUtil.java:45)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.opensaml.ESAPISecurityConfig
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:85)
    ... 24 more

person user2807714    schedule 08.10.2014    source источник
comment
ПРИМЕЧАНИЕ. ESAPI до версии 2.1.0 содержит потенциально ужасный недостаток шифрования: bugzilla.redhat. com/show_bug.cgi?id=1013589   -  person avgvstvs    schedule 09.10.2014
comment
возможный дубликат: stackoverflow.com/questions/22856730/   -  person avgvstvs    schedule 10.10.2014
comment
Спасибо Avgvstvs. ссылка выше касалась двух пакетов в одном приложении. Но в моем случае одно приложение пытается получить доступ к пакету из jar-файла, который не является частью этого приложения, а также не находится в библиотеке tomcat.   -  person user2807714    schedule 14.10.2014


Ответы (2)


  1. Убедитесь, что библиотека opensaml находится в пути к классам. Если это простое решение не подходит...

  2. Взгляните на репозиторий maven для самой последней версии opensaml:

http://mvnrepository.com/artifact/org.opensaml/opensaml/2.6.1

Похоже, что библиотека opensaml зависит от esapi 2.0.1, и может случиться так, что ESAPI-2.0-rc5.jar загружается до зависимости opensaml. Единственный совет, который действительно возможен для тех, кто не может клонировать вашу среду, — это попытаться загрузить исходный код для opensaml и собрать его после обновления его управления зависимостями, чтобы он указывал на вашу версию ESAPI.

person avgvstvs    schedule 09.10.2014

Столкнулся с точно такой же проблемой, как я решил ее, скопировав файл opensaml-2.6.1.jar в общую/общую папку lib tomcat «/tomcat/lib/».

person user13090    schedule 18.04.2016