2017-12-03 1 views
1

두 개의 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의 네임 스페이스도 갖게됩니다.

여기에 뭔가가 있습니까?

+0

아무 것도 놓치지 않았습니다. JAXBContext의 모든 긴 동작입니다. 특정 JAXBContext에 대해 알려진 (정의 된) 모든 네임 스페이스가 마샬 결과 XML에 표시됩니다. 각 스키마에 대해 별도의 JAXBContext를 가져야하므로 다른 스키마에 대해서는 아무 것도 표시하지 않습니다. 그것이 바로 그 것이다. – Vadim

+0

답장 보내 주셔서 감사합니다. 각 스키마에 대해 별도의 JAXBContext를 사용한다고하면 build.gradle의 각 스키마에 대해 별도의 ant.xjc를 사용 했습니까? – user3097172

+0

@ user3097172 문제를 해결할 수 있었습니까? – agpt

답변

0

Nop. 그것은 xjc에 관한 것이 아닙니다. 나는 개미와 gradle에 대해 잘 모르겠다 ... 나는 그들과 함께 작동하지 않습니다. Xjc는 모두 훌륭합니다 - XSD에서 Java 클래스를 생성합니다. 딜은 그러한 클래스의 객체가 JAXB marshaller에 의해 XML에 정렬 될 때 런타임에 관한 것이다. Marshaller는 정의 된 클래스/패키지가있는 JAXBContext로 만듭니다. 해당 JAXBContext에 대한 모든 주어진 네임 스페이스가 결과 XML에 있습니다. 정말 큰 문제는 아니지만 성가신 불필요한 네임 스페이스가 XML을 더 크게 만들었습니다.

관련 문제