общий конфликт журналирования с клиентом apache axis - PullRequest
15 голосов
/ 27 февраля 2012

Я получаю это исключение при попытке вызвать веб-сервис SOAP с использованием оси.в основном я написал осевой клиент.

org.apache.commons.discovery.DiscoveryException: Class org.apache.commons.logging.impl.SLF4JLogFactory does not implement org.apache.commons.logging.LogFactory.

Когда я удаляю все баночки с общим журналом, я могу удалить эти ошибки, но эти баночки исходят от других API, я не могу их контролировать.

Есть ли способ решить эту проблему?

Ответы [ 3 ]

11 голосов
/ 27 февраля 2012

Существует довольно подробное объяснение того, что может быть проблемой, и способы ее устранения в документации commons logging . Ваша конкретная проблема может быть,

Существует также еще один необычный способ, которым этот бросок может потерпеть неудачу: даже когда двоичный файл совместим, класс реализации загружается в среда выполнения может быть связана с другим экземпляром класса LogFactory. Для получения дополнительной информации см. Техническое руководство .

7 голосов
/ 21 января 2016

Ссылка на вышеупомянутую Документацию на раздел "Исправления" предлагает включить

 -Dorg.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl

в вашей настройке. Для некоторых людей может быть проще включить этот код:

static
{
    System.setProperty(LogFactory.FACTORY_PROPERTY, LogFactory.FACTORY_DEFAULT);
}
4 голосов
/ 05 октября 2016

Ни одно из этих решений не помогло мне.Я разобрался со своим решением в документации SLF4J

http://slf4j.org/faq.html#excludingJCL

альтернатива 2) при условии, что область Commons-logging может быть довольно просто и удобно исключена в качестве зависимости, объявив ее в предоставленномобласть действия в файле pom.xml вашего проекта.Фактические классы регистрации общего ресурса будут предоставлены jcl-over-slf4j.Это приводит к следующему фрагменту файла pom:

<dependency>  
   <groupId>commons-logging</groupId>  
   <artifactId>commons-logging</artifactId>
   <version>1.1.1</version>  
   <scope>provided</scope>
</dependency> 

<dependency>
   <groupId>org.slf4j</groupId>  
   <artifactId>jcl-over-slf4j</artifactId>
   <version>1.7.21</version>
</dependency>

Первое объявление зависимости, по сути, гласит, что регистрация общего достояния будет «каким-то образом» предоставлена ​​вашей средой.Второе объявление включает в ваш проект jcl-over-slf4j.Поскольку jcl-over-slf4j является идеальной бинарно-совместимой заменой для ведения общего журнала, первое утверждение становится истинным.К сожалению, несмотря на то, что объявление регистрации общего доступа в предоставленной области выполнит свою работу, ваша IDE, например Eclipse, все равно будет размещать файл commons-logging.jar в пути к классам вашего проекта, как это видно в вашей среде IDE.Вам нужно убедиться, что jcl-over-slf4j.jar виден перед commons-logging.jar вашей IDE.

SLF4J документация дает больше альтернатив, это работает для меня.

...