1. 程式人生 > >解決cxf的jar包衝突

解決cxf的jar包衝突

本次做web service開發,遇到了一些問題,最終解決了,在此把過程總結一下

伺服器上的jar包是cxf2.0.13,jdk版本是jdk6。不過由於cxf2.0.13能夠找到的資料不多了,所以就想用cxf2.5.2來開發。

這個工作很順利就完成了,然後將程式碼提交到伺服器上,並用cxf2.5.2.jar替換了cxf2.0.13.jar,結果報了以下異常

java.lang.IncompatibleClassChangeError: Implementing class

感覺是jar包衝突,這下悲劇了,伺服器上有100多個jar包,只好逐一排查,最後發現是由於cxf依賴的包版本不一致造成的

cxf2.0.13依賴的是neethi-2.0.4以及XmlSchema-1.4.5,而cxf2.5.2依賴的是neethi-3.0.1以及xmlschema-core-2.0.1

用neethi-3.0.1和xmlschema-core-2.0.1替換之後,服務釋出成功啦!

本以為搞定了,結果跑了一下冒煙測試,又悲劇了,系統裡原來的一個基本功能掛了,跟進去一看,是系統原來的程式碼跟cxf2.5不相容

這下就有2個方案,一個是修改已有的程式碼,使之相容cxf2.5;或者基於cxf2.0,重新寫我們的web service

第一個方案風險太大,因為老程式碼涉及很廣,而且我們都不太熟悉,所以就決定用低版本的cxf包重寫我們的web service

但是cxf2.0的資料實在是很少,官網都不提供了,所以我們稍微升了一點,用cxf2.1

替換試了一下,發現cxf2.1和cxf2.0一樣,也是依賴neethi-2.0.4以及XmlSchema-1.4.5,只是額外依賴一些別的jar包,這樣就直接用cxf2.1替換了cxf2.0.13

然後驗了一下剛才失敗的基本特性,發現可以,看來老程式碼和cxf2.1是相容的,這樣就沒有後顧之憂了

這個時候,我們的web service倒是能釋出,但是呼叫失敗

呼叫的時候報以下異常:

java.lang.IllegalArgumentException: object is not an instance of declaring class

不管怎麼試,都是這個結果

一籌莫展了很長時間,因為這個時候不知道咋改了,程式碼沒有動過,用cxf2.5.2就OK,用cxf2.1就是不行

最後才發現,原來是cxf2.5.2和cxf2.1的配置檔案寫法不一樣

cxf2.5.2的寫法:
<jaxws:endpoint id="remedy"
		implementorClass="com.huawei.remedy.webservice.impl.RemedyWebServiceCMImpl"
		address="/RemedyWebService" />

cxf2.1的寫法:
<jaxws:endpoint id="remedy"
		implementor="com.huawei.remedy.webservice.impl.RemedyWebServiceCMImpl"
		address="/RemedyWebService" />

區別非常小,就是implementorClass和implementor的區別。。所以很難發現

最後獲得了圓滿的結果,使用cxf2.1,neethi-2.0.4,XmlSchema-1.4.5,相容了老程式碼,新開發的web service也釋出呼叫成功了

總結:

1、cxf早期版本依賴的jar包很多,要用cxf就要引一大堆jar包,新版本基本沒這個問題了

2、各版本cxf核心jar包的組合:

cxf-2.0.13.jar
neethi-2.0.4.jar
XmlSchema-1.4.5.jar

cxf-2.5.2.jar
neethi-3.0.1.jar
xmlschema-core-2.0.1.jar

3、不同版本cxf的配置檔案的寫法有細微的差別

相關推薦

解決jar衝突通用方法彙總

                        1.問題 先

解決v4v7衝突

configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.reque

分享知識-快樂自己:idea 中解決maven 衝突的問題(maven helper)

小編說到: 在我們日常開發當中常常我們會遇到JAR包衝突。找來找去還找不到很是煩人。那麼所謂的JAR包衝突是指的什麼那?JAR包衝突就是-引入的同一個JAR包卻有好幾個版本。 例如:   專案中引用了兩個 fastjson.jar的版本,分別為:fastjson:1.2.28、 fastjson:1.2.3

IntelliJ IDEA解決jar衝突

    最近把專案從eclipse遷移到IntelliJ IDEA,遇到了jar包衝突問題,我的WEB-INF/lib下有一個javax.mail.jar和一個mail.jar,eclipse預設使用的是前者,而idea則識別為後者,這樣導致原來在eclipse中正常的程式碼

transformClassesWithJarMergingForRelease解決辦法 解決版本衝突 解決jar衝突

因為重複引用造成打包時候出現 transformClassesWithJarMergingForRelease的解決辦法 可以通過gradle配置或者在依賴宣告時新增exclude的方式來排除指定的引用。   exclude可以接收group和module兩個引數,這兩個引數可以單獨使用

docker運維(1):安裝centos7.0 docker引擎時,解決lvm衝突問題

1. 問題 centos7.0安裝docker engine時,系統有以下提示: # yum install docker-engine Running transaction check Running transaction test

weblogic11g(10.3.6)部署war時,解決jar衝突的超簡方案

親測有效:weblogic11g(10.3.6) + jdk7,打包使用jdk7或jdk8,注意weblogic用的jdk和打包時jdk的相容。   分別配置web專案下pom.xml和weblogic.xml 1,web專案增加打包配置,排除掉衝突jar包,./pom.xml <b

gradle 使用 exclude 解決jar衝突

1.檢視衝突的jar包,使用一下命令檢視 的 Terminal下敲 gradlew-qapp:dependencies 命令, - com.android.support.test.espresso:espresso-core:2.2.2      +--- com.s

Maven解決jar衝突

在使用Maven時,經常會遇到jar包衝突的問題,解決辦法: 在pom.xml檔案中使用maven的exclusions工具,語法如下: 避免hadoop-client-2.2.0.jar引入hado

用maven工具解決jar衝突問題或重複載入問題

在使用maven開發專案的過程中,經常會遇到jar包重複載入或者jar包衝突的問題的,但是由於有些jar是由於maven的依賴載入自動載入進來的, 而不是開發者自己配置的,特別是當專案中pom中配置的jar包依賴本身很多時,開發者靠自己的經驗,有時很難找出是哪

詳述使用 IntelliJ IDEA 解決 jar 衝突的問題

在實際的 Maven 專案開發中,由於專案引入的依賴過多,遇到 jar 衝突算是一個很常見的問題了。在本文中,我們就一起來看看,如何使用 IntelliJ IDEA 解決 jar 包衝突的問題!簡單粗暴,直接上示例: 標註 1: Maven Projec

eclipse利用maven工具解決jar衝突問題

專案中出現的問題如下: Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.Log4jLoggerFactory 原因 :  maven自動載

maven專案解決jar衝突的四種方式

依賴一個jar包往往會下載相互關聯的jar包這就是依賴傳遞 依賴傳遞經常出現ja包衝突,解決方案:直接排除指定的jar包 1、排除原則 <exclusions> <exc

maven 工具的依賴樹以及解決版本衝突問題

1、如何檢視一個工程的依賴樹 ? maven工具牛B的地方在於包的依賴匯入。如果需要新增一個第三方包,只要在pom檔案中jar的依賴就可以。在工程的左側目錄中除了External Lib包下存在很多jar包,這些jar包有直接依賴的包,也有間接依賴的

IntelliJ IDEA查詢依賴關係,解決jar衝突

<dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind<

Maven 解決jar衝突的原理

管理包依賴是 Maven 核心功能之一,下面通過如何引入 jar 包;如何解析 jar 包依賴;包衝突是如何產生;如何解決包衝突;依賴管理解決什麼問題;什麼是依賴範圍;使用包依賴的最佳實踐等 6 個問題來介紹。 如何引入 jar 包 在程式碼開發時,如果需要使用第三方 jar 包提供的類庫,那麼需要在 pom

android studio解決衝突

在android的更目錄下面加上 packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt'

@IntelliJ IDEA查詢依賴關係,解決jar衝突

使用Intellij idea,想看看它的maven依賴圖,在開啟的pom.xml檔案上右鍵Diagrams--Show Dependencies,就可以看到了。對於pom.xml配置的依賴,idea預設不是立即更新的,需要執行Maven--Reimport才能生效。不過可以

weblogic解決Jar衝突

把weblogic 檔案修改成如下: <?xml version="1.0" encoding="UTF-8"?> <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-w

如何解決jar衝突和類衝突

方法 一定要講究方法, 胡亂的嘗試是效果最差, 且最沒有提高的方式. 工具 //打印出工程的所有jar依賴關係 mvn -U dependency:tree -Dverbose log4j, logback, loggin的類衝突 這類衝突是比較難