簡體   English   中英

如何使用 JDK 12 運行 Apache CXF wadl2java?

[英]How to run Apache CXF wadl2java with JDK 12?

以下命令曾經完美地工作:

C:\tools\apache-cxf-3.3.1\bin\wsdl2java -client -d generated foo.wsdl

它不再適用於最新版本的 JDK - 12。我已經下載了最新版本的 Apache CXF,但仍然出現相同的錯誤:

-Djava.endorsed.dirs=C:\tools\apache-cxf-3.3.1\bin\..\lib\endorsed is not supported. Endorsed standards and standalone APIs
in modular form will be supported via the concept of upgradeable modules.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

任何人都可以提供有關如何解決此問題的提示嗎?

我通過做 4 件事讓 Apache CXF 3.3.1 wsdl2java 實用程序與最新的 OpenJDK 11 一起使用:

  1. 拉下這個 jar 並將其放入 {CXF_HOME}/lib 目錄:https ://mvnrepository.com/artifact/javax.jws/jsr181-api/1.0-MR1
  2. 拉下這個 jar 並將其放在 {CXF_HOME}/lib 目錄中:https ://mvnrepository.com/artifact/javax.xml.ws/jaxws-api/2.3.1
  3. 就我而言,由於我在 Mac 上運行,因此我使用了 wsdl2java 腳本並確保在 CXF 類路徑上明確設置了這兩個 jar,方法是在執行 java 之前在腳本中執行以下聲明命令: cxf_classpath=${cxf_classpath}:../lib/jaxws-api-2.3.1.jar:../lib/jsr181-api-1.0-MR1.jar

  4. 最后,我從腳本末尾的 java 命令中刪除了 '-Djava.endorsed.dirs="${cxf_home}/lib/endorsed"' 參數,因為較新的 JDK 不再支持這個參數,所以我的命令現在看起來像這樣: $JAVA_HOME/bin/java -Xmx${JAVA_MAX_MEM} -cp "${cxf_classpath}" -Djava.util.logging.config.file=$log_config org.apache.cxf.tools.wsdlto.WSDLToJava "$@"

現在,使用 OpenJDK11,我能夠指向外部 WSDL 文件並成功生成使用以下命令使用此 SOAP 服務所需的客戶端代碼:

./wsdl2java -client -d src https://somewhere.com/service\?wsdl

就能夠調用和使用我編碼所針對的 SOAP 服務而言,這一切是否有效尚待定,但我至少現在已經克服了 Java9+ 支持問題,該工具特定於從 WSDL 生成客戶端代碼.

如果您的需求不同,我至少會刪除 '-Djava.endorsed.dirs="${cxf_home}/lib/endorsed"' JVM 參數並開始使用您需要設置的參數調用 wsd2java 命令,然后開始迭代添加回到丟失的庫中,它開始拋出 java.lang.NoClassDefFoundError 錯誤。

他們的常見問題解答特別指出,從 3.3.x 開始,將支持 Java 9+,但在實用程序中仍在傳遞的不再受支持的硬編碼 JVM 參數與支持較新的 JDK 的缺失庫之間顯然存在一些問題。庫已被刪除。

希望這可以幫助那些不幸的人仍然針對 SOAP 端點進行編程,但至少嘗試使您正在編寫的客戶端代碼保持最新並利用​​現代 JDK 的更新功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM