亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關(guān)于jdk8升級jdk21 cxf報錯的踩坑記錄

 更新時間:2024年10月09日 09:14:46   作者:照貓畫狐  
在升級Java項(xiàng)目時,從JDK1.8和Spring2遷移到JDK21和Spring3后,遇到了JAXBException錯誤,原因是從JDK11開始移除了jaxb模塊,而cxf在編譯動態(tài)客戶端時默認(rèn)classpath不包含必要的類,解決方法是在jar包同級目錄創(chuàng)建libs并添加jakarta.xml.bind-api

項(xiàng)目場景

聽說jdk21有很多實(shí)用新特性,就想弄個玩玩,閑來無事把公司項(xiàng)目從spring2+jdk1.8直升到spring3+jdk21,折騰兩天升級完了,本以為就這么簡單結(jié)束了。

直到把項(xiàng)目發(fā)布到服務(wù)器測試調(diào)用第三方接口,一直報錯:

jakarta.xml.bind.JAXBException: "com.xx.xx" 不包含 ObjectFactory.class 或 jaxb.index

各種百度,翻看源碼,折騰兩個星期也未能解決問題,一度想要放棄。

經(jīng)過這么長時間折騰,我發(fā)現(xiàn)在IDEA中調(diào)用接口就不會報錯,一旦打成jar使用java -jar執(zhí)行就一定會報錯,這一定是jvm環(huán)境問題!

我用jconsole連接兩種不同場景下的jvm,經(jīng)過自己反復(fù)對比調(diào)試,終于發(fā)現(xiàn)了問題所在。

問題描述

使用cxf創(chuàng)建動態(tài)客戶端時報錯:

jakarta.xml.bind.JAXBException: "com.xx.xx" 不包含 ObjectFactory.class 或 jaxb.index

// 創(chuàng)建動態(tài)客戶端
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(addr);
client.invoke(methodName, param);

原因分析

從jdk11起移除了jaxb模塊,cxf編譯動態(tài)客戶端代碼時,默認(rèn)的classpath為java.class.path

當(dāng)打包成jar后,java.class.path指定的目錄就是當(dāng)前運(yùn)行的jar

由于jdk11也移除了rt.jar、tool.jar,cxf編譯動態(tài)客戶端java文件時,會因?yàn)檎也坏揭蕾嚨膉ar包報錯

解決方案

1. 在jar包同級目錄下新建一個libs目錄,放入jakarta.xml.bind-api-4.0.2.jar

2. 項(xiàng)目啟動時,把cxf編譯動態(tài)客戶端所依賴的jar包添加到j(luò)ava.class.path中。

// 獲取當(dāng)前jar所在目錄
String jarPath = (System.getProperty("user.dir")).replaceAll("\\\\", "/").replace("file:/", "/");
String classPath = jarPath + "/libs/jakarta.xml.bind-api-4.0.2.jar";

// 因?yàn)閺膉dk11起移除了jaxb模塊,cxf編譯動態(tài)客戶端代碼時,默認(rèn)的classpath為java.class.path,由于jdk11也移除了rt.jar、tool.jar,會導(dǎo)致編譯異常,報錯:
// jakarta.xml.bind.JAXBException: "com.xx.xx" 不包含 ObjectFactory.class 或 jaxb.index
System.setProperty("java.class.path", System.getProperty("java.class.path") + ";" + classPath + ";");

上面提供的示例程序,僅供參考

參考鏈接

[CXF-7932] JaxWsDynamicClientFactory in Spring Boot fat JAR with JDK11 leads to JAXBException ... doesnt contain ObjectFactory.class or jaxb.index - ASF JIRA

[CXF-7925] Dynamic WSDL Client creation fails on JDK 11 because it cannot compile generated classes - ASF JIRA

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java8 stream多字段排序的實(shí)現(xiàn)

    java8 stream多字段排序的實(shí)現(xiàn)

    這篇文章主要介紹了java8 stream多字段排序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 淺談SpringBoot項(xiàng)目打成war和jar的區(qū)別

    淺談SpringBoot項(xiàng)目打成war和jar的區(qū)別

    這篇文章主要介紹了淺談SpringBoot項(xiàng)目打成war和jar的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 淺析JavaWeb項(xiàng)目架構(gòu)之Redis分布式日志隊列

    淺析JavaWeb項(xiàng)目架構(gòu)之Redis分布式日志隊列

    架構(gòu)、分布式、日志隊列,標(biāo)題自己都看著唬人,其實(shí)就是一個日志收集的功能,只不過中間加了一個Redis做消息隊列罷了。下面通過本文給大家分享JavaWeb項(xiàng)目架構(gòu)之Redis分布式日志隊列,感興趣的朋友一起看看吧
    2018-01-01
  • javaweb圖書商城設(shè)計之購物車模塊(3)

    javaweb圖書商城設(shè)計之購物車模塊(3)

    這篇文章主要為大家詳細(xì)介紹了javaweb圖書商城設(shè)計之購物車模塊的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Java利用位運(yùn)算實(shí)現(xiàn)比較兩個數(shù)的大小

    Java利用位運(yùn)算實(shí)現(xiàn)比較兩個數(shù)的大小

    這篇文章主要為大家介紹了,在Java中如何不用任何比較判斷符(>,==,<),返回兩個數(shù)( 32 位整數(shù))中較大的數(shù),感興趣的可以了解一下
    2022-08-08
  • 如何在Java中調(diào)用python文件執(zhí)行詳解

    如何在Java中調(diào)用python文件執(zhí)行詳解

    豐富的第三方庫使得python非常適合用于進(jìn)行數(shù)據(jù)分析,最近在項(xiàng)目中就涉及到j(luò)ava調(diào)用python實(shí)現(xiàn)的算法,下面這篇文章主要給大家介紹了關(guān)于如何在Java中調(diào)用python文件執(zhí)行的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Spring內(nèi)部bean和級聯(lián)屬性用法詳解

    Spring內(nèi)部bean和級聯(lián)屬性用法詳解

    這篇文章主要介紹了Java內(nèi)部bean和級聯(lián)屬性用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • MyBatis-plus中的模糊查詢解讀

    MyBatis-plus中的模糊查詢解讀

    這篇文章主要介紹了MyBatis-plus中的模糊查詢解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • java.lang.OutOfMemoryError: Metaspace異常解決的方法

    java.lang.OutOfMemoryError: Metaspace異常解決的方法

    這篇文章主要介紹了java.lang.OutOfMemoryError: Metaspace異常解決的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java中String類getBytes()方法詳解與完整實(shí)例

    Java中String類getBytes()方法詳解與完整實(shí)例

    這篇文章主要給大家介紹了關(guān)于Java中String類getBytes()方法詳解與完整實(shí)例的相關(guān)資料,getBytes()是Java編程語言中將一個字符串轉(zhuǎn)化為一個字節(jié)數(shù)組byte[]的方法,需要的朋友可以參考下
    2023-10-10

最新評論