Jakarta packages are not found when the generated Java is compiled. Jakarta dependencies are referenced in build.gradle for the module:
plugins {
id 'java-library'
}
configurations {
wsdl2java
}
dependencies {
wsdl2java 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0'
wsdl2java 'com.sun.xml.bind:jaxb-ri:4.0.2'
wsdl2java 'com.sun.xml.bind:jaxb-xjc:4.0.2'
wsdl2java 'com.sun.xml.bind:jaxb-core:4.0.2'
wsdl2java 'com.sun.xml.bind:jaxb-impl:4.0.2'
wsdl2java 'org.apache.cxf:cxf-tools-wsdlto-core:4.0.0'
wsdl2java 'org.apache.cxf:cxf-tools-wsdlto-frontend-jaxws:4.0.0'
wsdl2java 'org.apache.cxf:cxf-tools-wsdlto-databinding-jaxb:4.0.0'
}
Gradle to generate the code includes
classpath configurations.wsdl2java
Resulting example code includes imports that do not resolve
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlType;
When the task attempts to compile, error is:
error: package jakarta.xml.bind.annotation does not exist
import jakarta.xml.bind.annotation.XmlAccessType;
Yet, all these are supposed to be included in
jakarta.xml.bind:jakarta.xml.bind-api:4.0.0
Full build.gradle file is:
plugins {
id 'java-library'
}
configurations {
wsdl2java
}
dependencies {
wsdl2java 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0'
wsdl2java 'com.sun.xml.bind:jaxb-ri:4.0.2'
wsdl2java 'com.sun.xml.bind:jaxb-xjc:4.0.2'
wsdl2java 'com.sun.xml.bind:jaxb-core:4.0.2'
wsdl2java 'com.sun.xml.bind:jaxb-impl:4.0.2'
wsdl2java 'org.apache.cxf:cxf-tools-wsdlto-core:4.0.0'
wsdl2java 'org.apache.cxf:cxf-tools-wsdlto-frontend-jaxws:4.0.0'
wsdl2java 'org.apache.cxf:cxf-tools-wsdlto-databinding-jaxb:4.0.0'
}
def allmyWsdl = task allmyWsdl {
String[] wsdls = ["one", "two", "three"];
wsdls.each {name->
def thing = task "myWsdl${name}" (type: JavaExec) {
// Defining these mean the task can run incrementally
inputs.files("${projectDir}/src/main/resources")
outputs.dir("${projectDir}/out/generated-sources/cxf-ws")
String wsdl = "${projectDir}/src/main/resources/wsdls/${name}.wsdl"
String genSrcDir = "${projectDir}/out/generated-sources/cxf-ws"
inputs.file wsdl
outputs.dir genSrcDir
classpath configurations.wsdl2java
main "org.apache.cxf.tools.wsdlto.WSDLToJava"
args '-client', '-impl', '-exsh', 'true', '-noAddressBinding', '-autoNameResolution', "-wsdlLocation", "classpath:wsdls/${name}.wsdl", '-p', "com.my.webservices.${name}", '-encoding', 'UTF-8', '-d', genSrcDir, wsdl
final OutputStream baos = new ByteArrayOutputStream()
errorOutput = new OutputStream() {
void write(int b) {System.err.write(b); baos.write(b) }
void flush() { System.err.flush(); baos.flush() }
void close() { System.err.close(); baos.close() }
}
doLast {
def str = baos.toString()
if (str.contains('Usage : wsdl2java') || str.contains('WSDLToJava Error')) {
throw new TaskExecutionException(tasks[name],
new IOException('Apache CXF WSDLToJava has failed. Please see System.err output.'))
}
}
}
}
}
allmyWsdl.dependsOn(tasks.matching { task -> task.name.startsWith( 'myWsdl' ) } )
compileJava.dependsOn += allmyWsdl
sourceSets.main.java.srcDirs += 'out/generated-sources/cxf-ws'
The issue is that while generating java from wsdl you are adding all libraries to classpath classpath configurations.wsdl2java
. But while compiling those libraries are not in the classpath so you get those errors.
You need to adjust dependencies
section as follow.
dependencies {
implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0'
implementation 'jakarta.xml.ws:jakarta.xml.ws-api:4.0.0'
wsdl2java 'com.sun.xml.bind:jaxb-ri:4.0.2'
wsdl2java 'com.sun.xml.bind:jaxb-xjc:4.0.2'
wsdl2java 'com.sun.xml.bind:jaxb-core:4.0.2'
wsdl2java 'com.sun.xml.bind:jaxb-impl:4.0.2'
wsdl2java 'org.apache.cxf:cxf-tools-wsdlto-core:4.0.0'
wsdl2java 'org.apache.cxf:cxf-tools-wsdlto-frontend-jaxws:4.0.0'
wsdl2java 'org.apache.cxf:cxf-tools-wsdlto-databinding-jaxb:4.0.0'
}
As jakarta.xml.bind-api
and jakarta.xml.ws-api
libraries don't need while generating java classes. But those are required while compiling. So added those 2 as implementation dependencies which adds to Java compile and runtime classpaths.