Hon*_*ong 4 cxf wsdl2java java-12
以下命令曾经完美地工作:
C:\tools\apache-cxf-3.3.1\bin\wsdl2java -client -d generated foo.wsdl
Run Code Online (Sandbox Code Playgroud)
它不再适用于最新版本的 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.
Run Code Online (Sandbox Code Playgroud)
谁能提供有关如何解决此问题的提示?
小智 5
我通过执行以下 4 件事,让 Apache CXF 3.3.1 wsdl2java 实用程序能够与最新的 OpenJDK 11 配合使用:
就我而言,由于我在 Mac 上运行,因此我使用了 wsdl2java 脚本,并通过在执行 java 之前在脚本中执行以下声明,确保在 CXF 类路径上显式设置这两个 jar命令:cxf_classpath=${cxf_classpath}:../lib/jaxws-api-2.3.1.jar:../lib/jsr181-api-1.0-MR1.jar
最后,我从脚本末尾的 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
Run Code Online (Sandbox Code Playgroud)
就是否能够调用和使用我正在编码的 SOAP 服务而言,这一切是否有效尚待确定,但我现在至少已经克服了这个专门用于从 WSDL 生成客户端代码的工具的 Java9+ 支持问题。
如果您的需求不同,我至少会删除 '-Djava.endorsed.dirs="${cxf_home}/lib/endorsed"' JVM 参数并开始使用您需要设置的参数调用 wsd2java 命令,然后开始迭代添加回到丢失的库,它开始抛出 java.lang.NoClassDefFoundError 错误。
他们的常见问题解答明确指出,从 3.3.x 开始,将支持 Java 9+,但在实用程序中仍在传递的不再受支持的硬编码 JVM 参数与支持较新 JDK 的缺失库之间显然存在一些问题。库已被删除。
希望这可以帮助那些不幸仍然针对 SOAP 端点进行编程的人,但至少尝试保持您正在编写的客户端代码是最新的,并利用现代 JDK 的新功能。
| 归档时间: |
|
| 查看次数: |
3293 次 |
| 最近记录: |