Spring Boot Consuming WebService - Как иметь несколько xsd и wsdl в разных пакетах с Gradle? - PullRequest
1 голос
/ 06 января 2020

Я следую этому руководству: https://spring.io/guides/gs/consuming-web-service/

Задача jaxb выглядит следующим образом:

task genJaxb {
  ext.sourcesDir = "${buildDir}/generated-sources/jaxb"
  ext.classesDir = "${buildDir}/classes/jaxb"
  ext.schema = "http://localhost:8080/ws/countries.wsdl"

  outputs.dir classesDir

  doLast() {
    project.ant {
      taskdef name: "xjc", classname: "com.sun.tools.xjc.XJCTask",
          classpath: configurations.jaxb.asPath
      mkdir(dir: sourcesDir)
      mkdir(dir: classesDir)

        xjc(destdir: sourcesDir, schema: schema,
            package: "com.example.consumingwebservice.wsdl") {
            arg(value: "-wsdl")
          produces(dir: sourcesDir, includes: "**/*.java")
        }

        javac(destdir: classesDir, source: 1.8, target: 1.8, debug: true,
            debugLevel: "lines,vars,source",
            classpath: configurations.jaxb.asPath) {
          src(path: sourcesDir)
          include(name: "**/*.java")
          include(name: "*.java")
          }

        copy(todir: classesDir) {
            fileset(dir: sourcesDir, erroronmissingdir: false) {
            exclude(name: "**/*.java")
        }
      }
    }
  }
}

Она отлично работает, если есть только один wsdl или даже несколько wsdl (с несколькими изменениями) в одном пакете.

Мне нужно обработать некоторые XSD и WSDL и поместить их в разные пакеты, но скомпилировать в одном источнике.

Пример:

  • wsdl1.wsdl -> com.example.wsdl1
  • wsdl2.wsdl -> com.example.wsdl2
  • xsd_folder1 / *. Xsd -> com. example.xsd
  • xsd_folder2 / *. xsd -> com.example.other_xsd

Затем скомпилируйте в том же проекте.

Как этого добиться?

1 Ответ

1 голос
/ 21 апреля 2020

У меня была такая же проблема. Я вроде заставил это работать, не так, как я хотел, но это делает работу. Может быть, это поможет вам. В противном случае я заинтересован в этом (чистом) ответе сам.

configurations {
    jaxb
}


task genJaxb {
    ext.sourcesDirWsdl = "${projectDir}/src/main/generated/wsdl"
    ext.classesDirWsdl = "${buildDir}/classes/jaxb/wsdl"
    ext.schemaDirWsdl = "${projectDir}/src/main/resources/wsdl"

    ext.sourcesDirXsd = "${projectDir}/src/main/generated/xsd"
    ext.classesDirXsd = "${buildDir}/classes/jaxb/xsd"
    ext.schemaDirXsd = "${projectDir}/src/main/resources/xsd"

    outputs.dir classesDirWsdl
    outputs.dir classesDirXsd

    doLast() {
        project.ant {
            taskdef name: "xjc", classname: "com.sun.tools.xjc.XJCTask",
                    classpath: configurations.jaxb.asPath
            mkdir(dir: sourcesDirWsdl)
            mkdir(dir: classesDirWsdl)
            mkdir(dir: sourcesDirXsd)
            mkdir(dir: classesDirXsd)

            xjc(destdir: sourcesDirWsdl) {
                schema(dir: schemaDirWsdl, includes: "*.wsdl")
                arg(value: "-wsdl")
                produces(dir: sourcesDirWsdl, includes: "**/*.java")
            }
            xjc(destdir: sourcesDirXsd) {
                schema(dir: schemaDirXsd, includes: "*.xsd")
                arg(value: "-wsdl")
                produces(dir: sourcesDirXsd, includes: "**/*.java")
            }

            javac(destdir: classesDirWsdl, source: 1.8, target: 1.8,
                    debug: true, debugLevel: "lines,vars,source",
                    includeantruntime: false,
                    classpath: configurations.jaxb.asPath) {
                src(path: sourcesDirWsdl)
                include(name: "**/*.java")
                include(name: "*.java")
            }
            javac(destdir: classesDirXsd, source: 1.8, target: 1.8,
                    debug: true, debugLevel: "lines,vars,source",
                    includeantruntime: false,
                    classpath: configurations.jaxb.asPath) {
                src(path: sourcesDirXsd)
                include(name: "**/*.java")
                include(name: "*.java")
            }

            copy(todir: classesDirWsdl) {
                fileset(dir: sourcesDirWsdl, erroronmissingdir: false) {
                    exclude(name: "**/*.java")
                }
            }
            copy(todir: classesDirXsd) {
                fileset(dir: sourcesDirXsd, erroronmissingdir: false) {
                    exclude(name: "**/*.java")
                }
            }
        }
    }
}

, и вы вставите свой dependencies

implementation('org.springframework.boot:spring-boot-starter-web-services') {
    exclude(group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat')
}
implementation('org.springframework.ws:spring-ws-core')

implementation('wsdl4j:wsdl4j:1.6.3')
jaxb("org.glassfish.jaxb:jaxb-xjc:2.3.2")
compile(files(genJaxb.classesDirWsdl, genJaxb.classesDirXsd).builtBy(genJaxb))

Редактировать: я начал с package: com.example.somepck в xjc, но я всегда перезаписывал его, поэтому я переместил его в каталог. Как я уже сказал, это не так чисто, но для меня он сделал свою работу. Может быть, вы можете использовать его и настроить при необходимости. Если у вас есть некоторые улучшения, пожалуйста, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...