두 개의 XSD가 있습니다.JaxB에 의해 생성 된 XML에는 다른 스키마의 네임 스페이스도 있습니다.
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>
다른 서비스에서 내 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의 네임 스페이스도 갖게됩니다.
여기에 뭔가가 있습니까?
아무 것도 놓치지 않았습니다. JAXBContext의 모든 긴 동작입니다. 특정 JAXBContext에 대해 알려진 (정의 된) 모든 네임 스페이스가 마샬 결과 XML에 표시됩니다. 각 스키마에 대해 별도의 JAXBContext를 가져야하므로 다른 스키마에 대해서는 아무 것도 표시하지 않습니다. 그것이 바로 그 것이다. – Vadim
답장 보내 주셔서 감사합니다. 각 스키마에 대해 별도의 JAXBContext를 사용한다고하면 build.gradle의 각 스키마에 대해 별도의 ant.xjc를 사용 했습니까? – user3097172
@ user3097172 문제를 해결할 수 있었습니까? – agpt