欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于jdk8升級(jí)jdk21 cxf報(bào)錯(cuò)的踩坑記錄

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

項(xiàng)目場景

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

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

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

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

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

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

問題描述

使用cxf創(chuàng)建動(dòng)態(tài)客戶端時(shí)報(bào)錯(cuò):

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

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

原因分析

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

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

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

解決方案

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

2. 項(xiàng)目啟動(dòng)時(shí),把cxf編譯動(dòng)態(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編譯動(dòng)態(tài)客戶端代碼時(shí),默認(rèn)的classpath為java.class.path,由于jdk11也移除了rt.jar、tool.jar,會(huì)導(dǎo)致編譯異常,報(bào)錯(cuò):
// 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é)

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

相關(guān)文章

  • Spring生命周期回調(diào)與容器擴(kuò)展詳解

    Spring生命周期回調(diào)與容器擴(kuò)展詳解

    這篇文章主要介紹了Spring生命周期回調(diào)與容器擴(kuò)展詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Java CGLib動(dòng)態(tài)代理機(jī)制(全面解析)

    Java CGLib動(dòng)態(tài)代理機(jī)制(全面解析)

    下面小編就為大家?guī)硪黄狫ava CGLib動(dòng)態(tài)代理機(jī)制(全面解析)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Spring MVC框架配置方法詳解

    Spring MVC框架配置方法詳解

    這篇文章主要為大家詳細(xì)介紹了Spring MVC框架的配置方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Java JVM虛擬機(jī)運(yùn)行機(jī)制

    Java JVM虛擬機(jī)運(yùn)行機(jī)制

    JVM(Java虛擬機(jī))一種用于計(jì)算設(shè)備的規(guī)范,可用不同的方式(軟件或硬件)加以實(shí)現(xiàn)。接下來通過本文給大家簡單介紹Java JVM虛擬機(jī)運(yùn)行機(jī)制,感興趣的朋友一起看看吧
    2017-03-03
  • Java面向?qū)ο蠡A(chǔ)知識(shí)之抽象類和接口

    Java面向?qū)ο蠡A(chǔ)知識(shí)之抽象類和接口

    這篇文章主要介紹了Java面向?qū)ο蟮某橄箢惡徒涌?文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-11-11
  • Java讀取本地json文件及相應(yīng)處理方法

    Java讀取本地json文件及相應(yīng)處理方法

    今天小編就為大家分享一篇Java讀取本地json文件及相應(yīng)處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Redis?command?timed?out兩種異常情況的解決方式

    Redis?command?timed?out兩種異常情況的解決方式

    Redis是我們開發(fā)中常用的數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關(guān)于Redis?command?timed?out兩種異常情況的解決方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Java中Jackson的序列化與反序列化詳解

    Java中Jackson的序列化與反序列化詳解

    這篇文章主要介紹了Java中Jackson的序列化與反序列化詳解,Jackson被認(rèn)為是"Java JSON庫"或"Java最好的JSON解析器",Jackson 還是一套用于 Java(和 JVM 平臺(tái))的數(shù)據(jù)處理工具,需要的朋友可以參考下
    2024-01-01
  • Struts攔截器實(shí)現(xiàn)攔截未登陸用戶實(shí)例解析

    Struts攔截器實(shí)現(xiàn)攔截未登陸用戶實(shí)例解析

    這篇文章主要介紹了Struts攔截器實(shí)現(xiàn)攔截未登陸用戶實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • JavaFx UI控件與代碼間的綁定方法

    JavaFx UI控件與代碼間的綁定方法

    這篇文章主要為大家詳細(xì)介紹了JavaFx UI控件與代碼間如何綁定,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評(píng)論