我有两个XSD。
XSD1具有名称空间abc.com
,XSD2具有名称空间xyz.com
XSD1还有一个类似于下面的绑定文件binding.xjb -
<?xml version="1.0"?>
<jxb:bindings version="1.0"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jxb:extensionBindingPrefixes="xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="XSD1.xsd" node="/xs:schema">
<jxb:globalBindings>
<xjc:simple />
</jxb:globalBindings>
</jxb:bindings>
</jxb:bindings>
另一项服务中的My Gradle文件导入XSD合同项目 -
task extractPackagedXml(type: Copy) {
from configurations.packagedXml.collect {
zipTree(it)
}
into "${buildDir}/xsd"
}
task jaxb(dependsOn: 'extractPackagedXml') << {
jaxbTargetDir.mkdirs()
ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJCTask', classpath: configurations.jaxb.asPath)
ant.xjc(extension: 'true', destdir: jaxbTargetDir, package: 'com.test.contract', binding: "${buildDir}/xsd/binding.xjb") {
schema(dir: "$buildDir/xsd", includes: "**/*.xsd")
}
}
现在,当我使用jaxb将XSD2类转换为XML时,生成的xml不仅具有xsd2的命名空间,还具有xsd1的命名空间。
我在这里错过了什么吗?
答案 0 :(得分:0)
NOP。它不是关于xjc。我不确定蚂蚁和gradle ...我不和他们一起工作。 Xjc做得很好 - 从XSD生成Java类。交易是关于运行时,这些类的对象由JAXB marshaller编组为XML。 Marshaller通过JAXBContext创建,其中定义了这些类/包。该JAXBContext的所有给定名称空间都在结果XML中。这真的不是什么大问题,但只是烦人且不需要的命名空间使XML变得更大。