Пакет Karaf не может найти Log4j LogManager.class во время выполнения.

В настоящее время я работаю над проектом, который мне нужно передать стороннему JAR-файлу в наше приложение Karaf D-OSGi. Мы не должны менять какой-либо код внутри jar, но с ограниченным исходным кодом мы можем его отлаживать.

Проблема в том, что сторонний jar зависит от jar log4j-1.2.9. однако, когда во время выполнения был вызван сторонний jar, logManager.class не может быть найден из стороннего jar.

вот журналы исключений от Karaf.

karaf@root()> lde

org.apache.cxf.interceptor.Fault: org/apache/log4j/LogManager в org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162)[166:org.apache.cxf.cxf-core :3.1.7] в org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128)[166:org.apache.cxf.cxf-core:3.1.7] ... org.eclipse. jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)[115:org.eclipse.jetty.util:9.2.19.v20160908] в org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool .java:555)[115:org.eclipse.jetty.util:9.2.19.v20160908] в java.lang.Thread.run(Thread.java:745)[:1.8.0_25] Вызвано: java.lang. NoClassDefFoundError: org/apache/log4j/LogManager по адресу com.p******h.eis.tools.logging.LoggingSetup.isConfigured(LoggingSetup.java:77) по адресу com.p******ho ****l.sdk.configurator.Configurator.checkLogging(Configurator.java:623) (------------ внутри стороннего jar------------- ------) в ком.п*******хо** **l.sdk.configurator.Configurator.load(Configurator.java:383) в com.p*******ho****l.sdk.configurator.Configurator.getInstance(Configurator.java:72) в com.p******ho****l.sdk.transactionProcessor.TransactionProcessor.(TransactionProcessor.java:43) в ca.esc.pbm.integr.chase.provider.service.PbmChaseApiImpl.getCCtokenFromChasePaymentGateWay( PbmChaseApiImpl.java:98)

    ... 36 more

Вызвано: java.lang.ClassNotFoundException: org.apache.log4j.LogManager не найден org.ops4j.pax.logging.pax-logging-api [1] в org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl. java:1574) на org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:79) ... ... еще 50

karaf@root()>

в комплекте pom.xml имеет зависимость log4j 1.2.8. и в bnd.bnd, Export-Package: org.apache.log4j.*, .....


Я проверил сгенерированный jar пакета из maven, пакет/jar log4j был импортирован в пакет и во время выполнения Karaf.

Я провел некоторую отладку / исследование, похоже, что регистратор Pax взял на себя / делегировал Log4j, который скрывает LogManager из пакета.


Кроме того, я попытался вызвать LogManager из пакета напрямую, не привлекая сторонний Jar, я получаю то же исключение, что LogManager.class не может быть найден.

Я понимаю, что Karaf использует регистратор Pax для ведения журнала и делегирует реализацию log4j Pax, однако в моем случае, как я могу позволить неприкосновенному классу Jar успешно вызывать LogManager?

Спасибо

Пол Н.


person Paul Ning    schedule 21.10.2017    source источник
comment
Моя версия Карафа 4.0.8.   -  person Paul Ning    schedule 21.10.2017


Ответы (1)


Пара вещей, которые вы можете проверить:

Найдите путь к классу для файла jar, содержащего класс logmanager, и попытайтесь переопределить его с помощью файла jar, специфичного для преследования, log4j.

person mohan    schedule 24.10.2017