How to generate java classes from XSD using Java 11 and gradle?

Viewed 2869

Java 11 has removed support for JAXB and tools like xjc which generate the java files from the XSD schema. I couldn't find many examples in Gradle for xjc generation and tried a few options but no luck so far. Also what dependencies should one add in spring boot Gradle project to provide full support for JAXB?

1 Answers

Adding the correct dependencies are key to success.

...

    project.ext {
        jaxbTargetDir = file("src/generated/java")
    }
    
    configurations {
        xsd2java
    }
    
    dependencies {
        xsd2java "com.sun.xml.bind:jaxb-xjc:3.0.2"
        xsd2java "com.sun.xml.bind:jaxb-impl:3.0.2"
        xsd2java "com.sun.xml.bind:jaxb-core:3.0.2"
        xsd2java "com.sun.activation:jakarta.activation:2.0.1"
        xsd2java "jakarta.xml.bind:jakarta.xml.bind-api:3.0.1"
    }
    
    task xsd2java() {
    
        doLast {
            jaxbTargetDir.mkdirs()
    
            ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJCTask', classpath: configurations.xsd2java.asPath)
            ant.jaxbTargetDir = jaxbTargetDir
    
            ant.xjc(
                    destdir: '${jaxbTargetDir}',
                    package: 'dk.myproject.domain.service.request',
                    schema: 'src/build-resources/project.xsd'
            )
    
            ant.xjc(
                    destdir: '${jaxbTargetDir}',
                    package: 'dk.myproject.domain.service.response',
                    schema: 'src/build-resources/myproject.xsd'
            )
    
        }
    }
    
    compileJava.dependsOn xsd2java

...
Related