spring-boot - Spring Boot Consuming WebService - 如何使用 gradle 在不同的包上拥有多个 xsd 和 wsdl?
问题描述
我正在关注本指南: https ://spring.io/guides/gs/sumption-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
中的a 开始xjc
,但我总是把它覆盖,所以我把它移到了目录中。正如我所说,它不是那么干净,但对我来说它完成了工作。也许您可以使用它并在必要时对其进行调整。如果你有一些改进,请告诉我。
推荐阅读
- python - 在二十一点游戏中需要帮助以打印出总共两张牌
- python - 使用 python 创建直接 CLI
- objective-c - 屏幕放大时,带有 CGEventCreateMouseEvent 的鼠标事件不考虑坐标
- android - 为什么 Android+Kotlin 中 newStartIntent 的伴随对象?
- react-native - 在本机反应中更改反应导航选项卡的底部栏容器颜色
- unity3d - Unity中的透明视频
- css - 使用不同大小的antD Modal
- c - 将数字按升序插入链表的 AC 函数
- swift - 解码子时嵌套 Codable 结构中父结构的访问属性
- javascript - 如何将动态转换日期传递给 html 元素?