如何在JDK 12上运行Apache CXF wadl2java?

时间:2019-04-02 21:59:33

标签: cxf wsdl2java java-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.

有人可以提供有关如何解决此问题的提示吗?

1 个答案:

答案 0 :(得分:0)

我通过执行以下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

  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的新功能。 / p>