JaxB生成的XML也有其他模式的命名空间

时间:2017-12-03 23:53:31

标签: xml gradle xsd jaxb xml-namespaces

我有两个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的命名空间。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:0)

NOP。它不是关于xjc。我不确定蚂蚁和gradle ...我不和他们一起工作。 Xjc做得很好 - 从XSD生成Java类。交易是关于运行时,这些类的对象由JAXB marshaller编组为XML。 Marshaller通过JAXBContext创建,其中定义了这些类/包。该JAXBContext的所有给定名称空间都在结果XML中。这真的不是什么大问题,但只是烦人且不需要的命名空间使XML变得更大。