Я использую плагин no.nils.wsdl2java, полный файл gradle.build выглядит так:
plugins {
id 'org.springframework.boot' version '2.3.4.RELEASE'
id 'io.spring.dependency-management' version '1.0.12.RELEASE'
id 'java'
id "no.nils.wsdl2java" version "0.10"
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
configurations {
jaxb
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.oracle.database.jdbc:ojdbc8'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation group: 'com.oracle.ojdbc', name: 'orai18n', version: '19.3.0.0'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'com.google.code.gson:gson:2.8.5'
}
tasks.named('test') {
useJUnitPlatform()
}
wsdl2java {
generatedWsdlDir = file("build/generated/wsdl/Service")
wsdlsToGenerate = [
['-p', 'Service', '-wsdlLocation', 'classpath:wsdl/Service.wsdl',
'-autoNameResolution', "src/main/resources/wsdl/Service.wsdl"]
]
}
Когда я создаю проект с помощью gradle jvm версии 11, получаю исключение:
Не удалось загрузить класс «jakarta.xml.bind.JAXBException».
** Но в версии 8 возникает ошибка:
org/apache/cxf/tools/wsdlto/WSDLToJava был скомпилирован более новой версией среды выполнения Java (версия файла класса 55.0), эта версия среды выполнения Java распознает только версии файла класса до 52.0.
Я знаю о миграции пространства имен javax -> jakarta, но как решить мою проблему?
Spring Boot 2.3.4 ожидает классы из пакета javax.xml.bind. Либо обновитесь до Spring Boot 3.0 (который ожидает их от jakarta.xml.bind), либо убедитесь, что вы используете версию wsdl2java, которая генерирует классы с классами из пакета javax.xml.bind.
Ничего из вышеперечисленного не сработало, пытался работать с java 19, но проблема та же, исключение: невозможно загрузить класс «jakarta.xml.bind.JAXBException». Не могу перейти на Spring Boot 3.0, потому что для этого требуется как минимум Java 17, мне нужна Java 8.
Вы решили это? Я столкнулся с точно такой же проблемой и не имею возможности обновить java до более новой версии, чем 8.




В вашем build.gradle добавьте это:
wsdl2javaExt {
cxfVersion = "3.5.5"
}
чтобы явно указать версию Apache CXF. Он должен правильно компилироваться с Java 8.
Ну, ошибка говорит, что org/apache/cxf/tools/wsdlto/WSDLToJava скомпилирован с Java 11, но ваш проект использует Java 8. Этот класс загружается плагином wsdl2java:
def wsdlToJava = classLoader.loadClass("org.apache.cxf.tools.wsdlto.WSDLToJava").newInstance()
и это часть проекта Apache CXF. Чтобы увидеть, откуда он взялся, вы можете распечатать дерево зависимостей:
./gradlew app:dependencies --configuration wsdl2java
в результате вы можете найти:
+--- org.apache.cxf:cxf-tools-wsdlto-databinding-jaxb:+ -> 4.0.0
...
| +--- org.apache.cxf:cxf-tools-wsdlto-core:4.0.0
версия org.apache.cxf:cxf-tools-wsdlto-databinding-jaxb установлена на +, поэтому gradle использует самую новую версию, и на данный момент это 4.0.0. Плагин добавляет эти зависимости в эти строки:
// add cxf as dependency
project.dependencies {
wsdl2java "org.apache.cxf:cxf-tools-wsdlto-databinding-jaxb:$cxfVersion"
$cxfVersion по умолчанию установлено значение +, но вы можете переопределить его в build.gradle с помощью следующего кода:
wsdl2javaExt {
cxfVersion = "3.5.5"
}
использовать предыдущую версию Apache CXF (совместимую с Java 8)
Отвечает ли это на ваш вопрос? Класс был скомпилирован более новой версией Java Environment