编译生成的Java 时找不到Jakarta 包。 模块的 build.gradle 中引用了 Jakarta 依赖项:
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 生成代码包括
classpath configurations.wsdl2java
生成的示例代码包括无法解析的导入
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlType;
当任务尝试编译时,错误是:
error: package jakarta.xml.bind.annotation does not exist
import jakarta.xml.bind.annotation.XmlAccessType;
然而,所有这些都应该包含在
jakarta.xml.bind:jakarta.xml.bind-api:4.0.0
完整的 build.gradle 文件是:
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'