2012-02-27 26 views
14

Tôi nhận được ngoại lệ này trong khi cố gắng gọi SOAP webservice bằng cách sử dụng trục. về cơ bản tôi đã viết một ứng dụng trục.xung đột khai thác gỗ phổ biến với khách hàng xà phòng trục apache

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

Khi tôi loại bỏ tất cả các bình thường- đăng nhập lọ, tôi có thể loại bỏ các lỗi này nhưng những jars đến từ apis khác, tôi không kiểm soát chúng.

Có cách nào để khắc phục sự cố này không?

+0

Có lẽ giải pháp tốt nhất được đưa ra dưới đây. Nhưng nếu bạn đang sử dụng dự án maven thì bạn có thể loại bỏ việc ghi nhật ký bằng cách loại trừ. trục trục 1,4 \t \t \t \t commons-logging \t \t \t commons-logging Purushothaman

Trả lời

9

Có một giải thích khá chi tiết về vấn đề có thể là gì và cách gỡ lỗi trong số commons logging documentation. vấn đề cụ thể của bạn có thể được,

Ngoài ra còn có một cách khác lạ hơn, trong đó diễn viên này có thể thất bại: ngay cả khi nhị phân tương thích, lớp thực hiện nạp tại runtime có thể được liên kết với một trường hợp khác nhau của Lớp LogFactory. Để biết thêm thông tin, hãy xem tech guide.

6

Các Liên kết với các nêu trên Documentation mục "Sửa chữa" gợi ý để bao gồm

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

trong thiết lập của bạn. Đối với một số người, có thể dễ dàng bao gồm mã này thay thế:

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

Không có giải pháp nào phù hợp với tôi. Tôi tìm ra giải pháp của tôi trong tài liệu SLF4J

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

thay thế 2) cung cấp phạm vi Commons-logging có thể khá đơn giản và loại trừ thuận tiện như một sự phụ thuộc bằng cách tuyên bố nó trong cung cấp phạm vi trong pom. tệp xml của dự án của bạn. Các lớp học thực tế commons-logging sẽ được cung cấp bởi jcl-over-slf4j. này chuyển thành đoạn tập tin pom sau:

<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> 

Việc kê khai phụ thuộc đầu tiên về cơ bản nói rằng commons-logging sẽ là "bằng cách nào đó" cung cấp bởi môi trường của bạn. Khai báo thứ hai bao gồm jcl-over-slf4j vào dự án của bạn. Như jcl-over-slf4j là một sự thay thế tương thích nhị phân hoàn hảo cho ghi nhật ký commons, xác nhận đầu tiên trở thành sự thật. Thật không may, trong khi tuyên bố ghi nhật ký trong phạm vi được cung cấp nhận được công việc được thực hiện, IDE của bạn, ví dụ: Eclipse, sẽ vẫn đặt commons-logging.jar trên đường dẫn lớp của dự án của bạn như được thấy bởi IDE của bạn. Bạn cần phải thực hiện chắc chắn rằng jcl-over-slf4j.jar hiển thị trước commons-logging.jar bởi IDE của bạn.

Tài liệu SLF4J cung cấp nhiều giải pháp thay thế hơn, điều này phù hợp với tôi.

Các vấn đề liên quan