Я получил утилиту Apache CXF 3.3.1 wsdl2java для работы с последней версией OpenJDK 11, выполнив 4 действия:
- Снимите этот jar-файл и поместите его в каталог {CXF_HOME} / lib:https://mvnrepository.com/artifact/javax.jws/jsr181-api/1.0-MR1
- Потяните эту банку и поместите ее в каталог {CXF_HOME} / lib: https://mvnrepository.com/artifact/javax.xml.ws/jaxws-api/2.3.1
- В моем случае, поскольку я работаю на 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.