以下命令用于完美地工作:
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.
任何人都可以提供一个如何解决这个问题的提示吗?
我使用Apache CXF 3.3.1 wsdl2java实用程序通过执行以下操作来处理最新的OpenJDK 11:
cxf_classpath = $ {cxf_classpath}:../ LIB / JAXWS-API-2.3.1.jar:../ LIB / JSR181-API-1.0-MR1.jar
$ 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的新功能。