0

I am getting following exceptions in gradle ant.xjc. its working perfectly when it has

generate("javax.xml.bind:jaxb-api:2.3.1") as a dependency.

Execution failed for task ':createWsdlSource'.
> java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlNs

Gradle task:

task 'createWsdlSource' {
    group 'nab build'

    def wsdlDir = 'src/main/resources/wsdls'
    def wsdlFiles = [
            "abc/1xx.wsdl",
            "abc/2xx.wsdl"
    ]
    def commonXsdFiles = [
            "dp/xjb/Misc.xjb",
            "dp/xjb/Header.xjb",
            "dp/xjb/Common.xjb"
    ]
    def xsdFiles = [
            [name: "dp/xsd/retrieveDirectDebitArrangement.xsd", binding: "dp/xjb/retrieveDirectDebitArrangement.xjb"],
            [name: "dp/xsd/updateDirectDebitArrangement.xsd", binding: "dp/xjb/updateDirectDebitArrangement.xjb"]
    ]

    inputs.dir("${projectDir}/${wsdlDir}")
    outputs.dir("${buildDir}/generated/wsdl")

    doLast {
        ant.taskdef(name: 'wsimport', classname: 'com.sun.tools.ws.ant.WsImport', classpath: configurations.generate.asPath)
        ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJCTask', classpath: configurations.generate.asPath)

        System.setProperty('javax.xml.accessExternalSchema', 'file')

        wsdlFiles.each {
            def wsdl = project.file("${wsdlDir}/${it}")
            ant.wsimport(wsdl: project.file(wsdl), sourcedestdir: outputs.files.singleFile, keep: true, xnocompile: true, xadditionalHeaders: true, extension: true)
        }

        xsdFiles.each { xsd ->
            ant.xjc(destdir: outputs.files.singleFile, schema: "$wsdlDir/$xsd.name", extension: true) {
                binding(dir: "$wsdlDir", includes: commonXsdFiles.get(0))
                binding(dir: "$wsdlDir", includes: commonXsdFiles.get(1))
                binding(dir: "$wsdlDir", includes: xsd.binding)
                classpath(path: configurations.xjc.asPath)
                arg(value: '-Xnamespace-prefix')
            }
        }

    }
}

Gradle Dependency:

dependencies{

    generate("jakarta.xml.bind:jakarta.xml.bind-api:${jakartaVersion}")
    generate("jakarta.xml.ws:jakarta.xml.ws-api:${jakartaVersion}")
    generate("jakarta.activation:jakarta.activation-api:2.1.0")

    generate("com.sun.xml.bind:jaxb-impl:4.0.5")
    generate("com.sun.xml.ws:jaxws-rt:${jaxwsVersion}")
    generate("com.sun.xml.ws:jaxws-tools:${jaxwsVersion}")

    xjc(group: 'org.jvnet.jaxb2_commons', name: 'jaxb2-namespace-prefix', version: '1.3')

Build environment : JDK 17 and Gradle 8.3

jakartaVersion = '4.0.2' jaxwsVersion = '4.0.2'

Could you please someone help on this ?

1
  • Can you add enough source code to simulate the missing class? Commented Jul 17, 2024 at 6:40

1 Answer 1

0

The problem is that the following dependency use jaxb-api 2.x and you're targeting jakarta with jaxb-api 4.x

    xjc(group: 'org.jvnet.jaxb2_commons', name: 'jaxb2-namespace-prefix', version: '1.3')

In order for you to solve your problem, you could use the equivalent in jaxb-tools :

    xjc(group: 'org.jvnet.jaxb', name: 'jaxb-plugins', version: '4.O.8')

See documentation of the plugin here and how to use the plugins here

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.