Я использовал плагин Gradle для генерации Java-файлов на основе WSDL. Когда я разрабатываю его локально, используя любую IDE - Intellij, Eclipse и т. Д., Все работает нормально, и запросы WS проходят без каких-либо проблем.
Однако, когда я пытаюсь запустить его как исполняемый файл jar, сгенерированный моим методом bootJar, я получаю следующую ошибку, как только я пытаюсь взаимодействовать с тем же WS:
org.springframework.oxm.UncategorizedMappingException: Unknown JAXB exception; nested exception is com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 69 counts of IllegalAnnotationExceptions
There's no ObjectFactory with an @XmlElementDecl for the element {UrgTech/Service/Data/DataContract}Data.
this problem is related to the following location:
at protected javax.xml.bind.JAXBElement urgtech.service.data.datacontract.File.data
at urgtech.service.data.datacontract.File
at protected java.util.List urgtech.service.data.datacontract.Files.file
at urgtech.service.data.datacontract.Files
at public javax.xml.bind.JAXBElement urgtech.service.data.datacontract.operation.ObjectFactory.createCreateQuoteFiles(urgtech.service.data.datacontract.Files)
at urgtech.service.data.datacontract.operation.ObjectFactory
at protected javax.xml.bind.JAXBElement service.urgtech.supplierapi.service.CreateQuote.data
at service.urgtech.supplierapi.service.CreateQuote
at public service.urgtech.supplierapi.service.CreateQuote service.urgtech.supplierapi.service.ObjectFactory.createCreateQuote()
at service.urgtech.supplierapi.service.ObjectFactory
at protected javax.xml.bind.JAXBElement service.urgtech.supplierapi.service.ReadAssignments.authentication
at service.urgtech.supplierapi.service.ReadAssignments
There's no ObjectFactory with an @XmlElementDecl for the element {UrgTech/Service/Data/DataContract/Response}Message.
this problem is related to the following location:
at protected javax.xml.bind.JAXBElement urgtech.service.data.datacontract.response.RequestStatus.message
at urgtech.service.data.datacontract.response.RequestStatus
at public javax.xml.bind.JAXBElement service.urgtech.supplierapi.service.ObjectFactory.createCreateQuoteResponseCreateQuoteResult(urgtech.service.data.datacontract.response.RequestStatus)
at service.urgtech.supplierapi.service.ObjectFactory
at protected javax.xml.bind.JAXBElement service.urgtech.supplierapi.service.ReadAssignments.authentication
at service.urgtech.supplierapi.service.ReadAssignments
There's no ObjectFactory with an @XmlElementDecl for the element {UrgTech/Service/Data/DataContract/Response}CallerName.
this problem is related to the following location:
Что я пытался сделать до сих пор:
- Перемещение вокруг сгенерированных файлов практически везде в проекте - без эффекта.
- Проанализируйте зависимости на пути к классам - похоже, все они хорошо выровнены.
- Попробуйте выполнить все возможные конфигурации этого плагина wsdl2java.
- Сравните пути к классам в IntelliJ с изнутри банки - они одинаковы.
Вот мой build.gradle:
configurations {
jaxb
}
buildscript {
ext {
springBootVersion = "${springBootVersion}"
}
repositories {
jcenter()
mavenCentral()
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath('se.transmode.gradle:gradle-docker:1.2')
classpath('no.nils:wsdl2java:0.10')
}
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'eclipse'
apply plugin: 'docker'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'no.nils.wsdl2java'
group = 'com.urbanise.middleware'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
maven {
mavenLocal()
jcenter()
}
}
bootJar {
baseName = 'urgtech-plaza'
version = '0.0.1-SNAPSHOT'
from genJaxb.classesDir
dependsOn wsdl2java
}
dependencies {
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-actuator'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web-services'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-security'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-mail'
implementation group: 'org.springframework', name: 'spring-orm'
implementation group: 'org.springframework.cloud', name: 'spring-cloud-aws-autoconfigure'
implementation group: 'org.springframework.cloud', name: 'spring-cloud-aws-messaging'
implementation group: 'org.springframework.security.oauth', name: 'spring-security-oauth2', version: "${springSecurityOAuth2Version}"
implementation group: 'org.springframework.security.oauth', name: 'spring-security-oauth2'
implementation group: 'org.projectlombok', name: 'lombok', version: "${lombokVersion}"
implementation group: 'org.apache.commons', name: 'commons-lang3', version: "${apacheCommonsVersion}"
implementation group: 'wsdl4j', name: 'wsdl4j', version: "${wsdl4JVersion}"
implementation group: 'org.postgresql', name: 'postgresql', version: "${postgresqlVersion}"
implementation group: 'org.flywaydb', name: 'flyway-core', version: "${flywayVersion}"
implementation group: 'com.google.guava', name: 'guava', version: "${guavaVersion}"
implementation group: 'org.apache.commons', name: 'commons-text', version: "${apacheCommonsTextVersion}"
implementation group: 'commons-validator', name: 'commons-validator', version: "${apacheValidationVersion}"
implementation group: 'org.apache.camel', name: 'camel-spring-boot', version: "${camelVersion}"
implementation group: 'org.apache.camel', name: 'camel-jackson', version: "${camelVersion}"
implementation group: 'org.apache.camel', name: 'camel-metrics', version: "${camelVersion}"
implementation group: 'io.hawt', name: 'hawtio-springboot', version: "${hawtIoVersion}"
implementation group: 'io.hawt', name: 'hawtio-web', version: "${hawtIoWebVersion}"
implementation group: 'io.hawt', name: 'hawtio-core', version: "${hawtIoVersion}"
implementation group: 'io.hawt', name: 'hawtio-system', version: "${hawtIoVersion}"
implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-joda'
implementation group: 'org.freemarker', name: 'freemarker', version: "${freemakerVersion}"
implementation group: 'com.amazonaws', name: 'aws-java-sdk-ses', version: "${awsSDKSESVersion}"
compileOnly group: 'org.springframework.boot', name: 'spring-boot-configuration-processor'
jaxb group: 'org.glassfish.jaxb', name: 'jaxb-xjc', version: "${jaxbxjcVersion}"
implementation(files(genJaxb.classesDir).builtBy(genJaxb))
testImplementation('org.springframework.boot:spring-boot-starter-test')
}
dependencyManagement {
applyMavenExclusions false
imports {
mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Finchley.SR2'
}
}
wsdl2java {
generatedWsdlDir = file("${projectDir}/src/main/java/com/urbanise/middleware/urgtechplaza/generated")
wsdlsToGenerate = [
['-autoNameResolution', 'src/main/resources/urgtech.wsdl']
]
wsdlDir = file("$projectDir/src/main/resources")
locale = Locale.ENGLISH
stabilizeAndMergeObjectFactory = true
}
wsdl2javaExt {
cxfVersion = "3.3.2"
}
compileJava.dependsOn wsdl2java
sourceSets {
main.java.srcDirs += [wsdl2java.generatedWsdlDir]
}
и gradle.properties:
#Libraries versions
springBootVersion=2.0.6.RELEASE
elasticMqVersion=0.13.8
camelVersion=2.22.1
guavaVersion=27.0-jre
postgreSQLDriverVersion=42.2.2
hawtIoVersion=2.3.0
hawtIoWebVersion=1.5.11
lombokVersion=1.18.4
hibernateVersion=5.3.2.Final
springBootJPAVersion=2.0.3.RELEASE
apacheCommonsTextVersion=1.4
apacheValidationVersion=1.6
flywayVersion=5.0.7
springSecurityOAuth2Version=2.3.4.RELEASE
postgresqlVersion=42.2.2
apacheCommonsVersion=3.8.1
wsdl4JVersion=1.6.3
jaxbxjcVersion=2.3.2
springCloudAwsVersion=2.0.1.RELEASE]
jaywayJsonPath=2.4.0
plazaExternalModelVersion=1.1.20
urgtechWSDLModelVersion=1.0.0
awsSDKSESVersion=1.11.490
freemakerVersion=2.3.28
#TEST DEPENDENCIES
randomBeansVersion=3.7.0
mockitoVersion=2.0.2-beta
Точный плагин gradle, который я использую, можно найти здесь: https://plugins.gradle.org/plugin/no.nils.wsdl2java,, но я не думаю, что проблема с ним, он не работал бы локально, если бы это было так.
Должно быть какая-то проблема с тем, как он упакован, но я не настолько опытен в Gradle, поэтому я действительно не знаю, где искать. Любая помощь будет принята с благодарностью.