websphere8.5 與cxf2.x沖突問題


一個客戶was部署的小問題,記錄一下。

問題現象

在我們的服務中用調用別人的webservice服務報錯,框架用的cxf。
報錯關鍵信息有:
E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet 錯誤]-[cvm_portal]: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userServiceClient': FactoryBean threw exception on object creation; nested exception is org.apache.cxf.service.factory.ServiceConstructionException
Caused by: java.lang.ClassCastException: com.xxx.xx.userservice.TestInTableToTable$JaxbAccessorF_requestBody incompatible with com.sun.xml.bind.v2.runtime.reflect.Accessor

解決辦法

  1. 加參數,設置JVM的參數為:-Dcom.ibm.websphere.webservices.DisableIBMJAXWSEngine=true
  2. 刪除應用中的部分jar包,列表如下:
    geronimo-stax-api_1.0_spec-1.0.1.jar
    stax-utils-20060502.jar
    geronimo-activation_1.1_spec-1.1.jar
    jaxb-api-2.2.3.jar
    jaxb-impl-2.2.4-1.jar

可以參見 https://stackoverflow.com/questions/31110951/apache-cxf-2-7-11-on-websphere-8-5

注意:
如果你的webservice的客戶端 (或服務端,具體看你充當的是服務端還是客戶端的角色)的類是用java6 編譯的 那么,was 也需要用1.6的JDK,如果用1.8的JDK也會報錯!

如果一定要用1.8 怎么辦?
也有辦法:
用1.8 報錯的信息是:xxxx incompatible with com.sun.xml.internal.bind.v2.runtime.reflect.Accessor

  1. jaxb-api-2.2.3.jar jaxb-impl-2.2.4-1.jar 放回去,不要刪除。
  2. 直接點擊步驟導航中你的服務器的名字 返回剛才的 服務器基礎結構/Java SDK 那一頁
    點擊Java 和進程管理 展開 點擊 進程定義 點擊右上角 Java 虛擬機
    在 通用 JVM 參數 一欄中 加上 -Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true

注意 - 前面有個空格
4. 停掉所有節點,重啟服務(在環境上重啟 不是在控制台 ),然后測試一下
參考 https://stackoverflow.com/questions/15569395/netbeans-with-jaxb-random-classcastexception-cannot-be-cast-to-com-sun-xml-bin/27118756#27118756


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM