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

问题描述 投票:0回答:1

以下命令用于完美地工作:

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.

任何人都可以提供一个如何解决这个问题的提示吗?

cxf wsdl2java java-12
1个回答
0
投票

我使用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

  1. 最后,我从脚本末尾的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服务方面,这一切是否仍然是TBD,但我至少现在已经克服了Java9 +支持问题,这个工具专门用于从WSDL生成客户端代码。

如果您的需求不同,我至少会删除'-Djava.endorsed.dirs =“$ {cxf_home} / lib / endorsed”'JVM参数并开始使用您需要设置的参数调用wsd2java命令,然后开始迭代添加回到缺少的库中,它开始抛出java.lang.NoClassDefFoundError错误。

他们的常见问题解答具体说从3.3.x开始,Java 9+将得到支持,但是在实用程序中仍然传递的不再支持的硬编码JVM参数和缺少的库之间明显地放弃了这些参数,以支持这些遗留下来的新JDK库已被删除。

希望这可以帮助那些不幸的人仍然可以编写针对SOAP端点的编程,但尝试至少保留您正在编写的客户端代码并利用现代JDK的新功能。

© www.soinside.com 2019 - 2024. All rights reserved.