Как запустить Apache CXF wadl2java с JDK 12? - PullRequest
0 голосов
/ 03 апреля 2019

Следующая команда работала без нареканий:

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 голосов
/ 11 апреля 2019

Я получил утилиту Apache CXF 3.3.1 wsdl2java для работы с последней версией OpenJDK 11, выполнив 4 действия:

  1. Снимите этот jar-файл и поместите его в каталог {CXF_HOME} / lib:https://mvnrepository.com/artifact/javax.jws/jsr181-api/1.0-MR1
  2. Потяните эту банку и поместите ее в каталог {CXF_HOME} / lib: https://mvnrepository.com/artifact/javax.xml.ws/jaxws-api/2.3.1
  3. В моем случае, поскольку я работаю на Mac, яСделайте сценарий wsdl2java и убедитесь, что эти два jar-файла явно заданы на пути к классам CXF, выполнив следующее объявление внутри сценария непосредственно перед выполнением команды java:

cxf_classpath = $ {cxf_classpath}: ../ Библиотека / JAXWS-апи-2.3.1.jar: ../ Библиотека / jsr181-апи-1,0-MR1.jar

Наконец, я удалил параметр '-Djava.endorsed.dirs = "$ {cxf_home} / lib / endorsed" "из команды java в конце скрипта, так как более новые 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.xJava 9+ будет поддерживаться, но что-то явно упало между не поддерживаемыми жестко закодированными аргументами JVM, все еще передаваемыми в утилите, и отсутствующими библиотеками для поддержки более новых JDK, в которых эти устаревшие библиотеки были удалены.

Надеюсь, что это поможет кому-то там, к несчастью, ТАКЖЕ по-прежнему программировать для конечных точек SOAP, но при этом стараться, по крайней мере, поддерживать клиентский код, который вы обновляете, в актуальном состоянии и использовать преимущества новых функций современного JDK.

...