目錄啟動CXF啟動報告LinkageError異常以及Java的endorsed機制

weixin_34377065發表於2013-06-22

本文純屬個人見解,是對前面學習的總結,如有描述不正確的地方還請高手指正~

Exception in thread "main" java.lang.LinkageError: JAXB 2.1 API is being loaded from the bootstrap classloader,
but this RI (from jar:file:/C:/apache-cxf-2.5.2/lib/jaxb-impl-2.2.4-1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.2 API.
Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See http://java.sun.com/j2se/1.5.0/docs/guide/standards/)
翻譯:Jaxb2.1的API正在從根類載入器中載入,但這個參考實現(jaxb-impl-2.2.4-1.jar)須要一個2.2的API
      請使用endorsed目錄機制來替換掉根類載入器中的jaxb-api.jar,請參考http://java.sun.com/j2se/1.5.0/docs/guide/standards/
分析:這是因為JDK啟動時載入的是自帶的jaxb-api-2.1.jar,而CXF須要用到的是jaxb-api-2.2.jar,於是報錯
    每日一道理
寬容,是一種坦蕩,可以無私無畏,無拘無束,無塵無染。寬容,是一種豁達,是比海洋和天空更為博大的胸襟,是寬廣和寬厚的疊加,延續和昇華。寬容有度,寬容無價,寬以待人,這是人生處世的基本法則。
注意:1)不是讓你去下載jaxb-api.jar,而是應該下載jaxb-api-2.2.jar
        該jar可從https://jaxb.java.net/下載,或從apache-cxf-2.5.2.zip\apache-cxf-2.5.2\lib\endorsed目錄中獲得
      2)不是讓你把下載到的jar放到%JAVA_HOME%/lib/endorsed/目錄下,而是應該自己找到正確的目錄
目錄:找到正確目錄的方法,還要根據JavaProject還是JavaWebProject而不同
      1)如果是JavaProject就簡略多了,直接在main方法裡執行System.out.println(System.getProperty("java.endorsed.dirs"));
        我的電腦上表現的目錄地址是這個D:\Develop\Java\jdk1.6.0_45\jre\lib\endorsed
      2)如果是JavaWebProject就要啟動一個沒有用到jaxb的Web專案,然後在jsp中執行<%=System.getProperty("java.endorsed.dirs")%>
        我的電腦上表現的目錄地址是這個D:\Develop\apache-tomcat-6.0.36/common/endorsed
解決:有兩種解決方法
      1)第一種就是把jaxb-api-2.2.jar放到下面找到的正確的endorsed目錄中,即可
      2)第二種是相對使用Eclipse啟動JavaProject而言的
        main-->Run As-->Open Run Dialog或者Run Configurations-->Arguments-->VM arguments中輸入下面引數-->Apply-->close
	-Djava.endorsed.dirs=C:\apache-cxf-2.5.2\lib\endorsed
	然後重新執行main方法即可

文章結束給大家分享下程式設計師的一些笑話語錄: 看到有人回帖“不頂不是中國人”,他的本意是想讓帖子沉了。

--------------------------------- 原創文章 By
目錄和啟動
---------------------------------

相關文章