Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 821
Dan Avatar asked Aug 03 '26 14:08

Dan


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

...
like image 79
Jan Nielsen Avatar answered Aug 06 '26 23:08

Jan Nielsen



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!