Общий конфликт с журнальным банком с клиентом мыла оси apache

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

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

Когда я удаляю все банки с общим протоколированием, я мог бы удалить эти ошибки, но эти банки поступают из другого apis, я не контролирую их.

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

Ответы

Ответ 1

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

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

Ответ 2

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

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

в настройках. Для некоторых людей легче включить этот код:

static
{
    System.setProperty(LogFactory.FACTORY_PROPERTY, LogFactory.FACTORY_DEFAULT);
}

Ответ 3

Ни одно из этих решений не помогло мне. Я нашел свое решение в документации по 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 дает больше альтернатив, у меня это сработало.

Ответ 4

Замените банку jcl-over-slf4j банкой для регистрации общих