背景:之前jdk8環境下,使用的cxf框架,而且是動態加載解析作為客戶端。大家一直相處的很愉快。但是最近升級jdk17,發現cxf不好用了。網上百度,大部分都是說升級cxf版本,并且添加jaxb的相關依賴就可以了。但是。。。我不還是解決不了啊。
本著快的解決不了,就仔細研究下看看想法,了解了下cxf動態解析的工作方式,發現了不對勁。
CXF動態調用WebService,一般包含以下步驟:
- 下載WSDL文件
- 將WSDL文件解析成Java代碼模型
- 生成Java源碼
- 編譯源碼->Class文件
- 創建ClassLoader
- 加載Class
- 創建數據綁定&類型初始化
- 使用這些Class完成WebService交互
- 廢棄這些Class,等待JVM空閑時GC回收
原來如此,需要生成源碼,需要加載class,問了提供WS的服務端,反饋說是jdk8提供的wsdl。莫非問題就在這個地方。
? ? ?如果是這樣解決的思路就有兩個了。一個是從源頭解決問題,讓服務端升級jdk,估計不現實。哈哈,搞不定。另一個思路就是不要使用動態解析了,靜態的安排上。cxf,axis2,xfire等幾個流行框架都可以通過wsdl來生成相應的java樁代碼,然后大家又可以愉快的玩耍了。
? ? ? 按照思路2來折騰,搞定收工,相關代碼后續補充。