spring-boot - Spring Boot消耗WebService-如何在具有gradle的不同软件包上具有多个xsd和wsdl?

标签 spring-boot web-services gradle

我正在遵循此指南:
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

  • 然后在同一项目中编译。

    我该如何实现?

    最佳答案

    我遇到过同样的问题。我有点使它工作了,虽然不像我想要的那样,但是它确实可以完成工作。也许它将为您提供帮助。否则我会对这个(干净的)答案感兴趣。

    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开始,但是我总是将其覆盖,因此我将其移至目录。正如我说的那样,它不是那么干净,但是对我来说,它确实起作用了。也许您可以使用它,并在必要时对其进行调整。
    如果您有任何不足之处,请告诉我。

    关于spring-boot - Spring Boot消耗WebService-如何在具有gradle的不同软件包上具有多个xsd和wsdl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59612453/

    相关文章:

    gradle - Unresolved reference : launch

    android - FaSTLane gradle 命令 - 未传递属性

    eclipse - 导入 (libGDX) Gradle 项目导致 Eclipse 崩溃

    java - 如何创建跨服务域模型映射?

    java - 事务注释在 Spring Boot 2.1.3 中不起作用

    jquery - [ScriptMethod(ResponseFormat = ResponseFormat.Json)]

    java - 在 Bluemix 服务器上发布端点

    java - 如何使用 XML 风格的 MyBatis-SpringBoot-MySQL 执行正确的 SQL INSERT?

    java - 我们可以避免将所有字段都映射到springdata中用于Elasticsearch的实体类,因为json文档中有100多个字段吗?

    php - 为网络协作编码