2014-12-19 58 views
0

我正在使用Gradle在我的項目中生成jaxb類。每一件事情都很好,但在編組jaxb對象時,我們在輸出xml中隨機地看到不同的名稱空間前綴,如ns1,ns2 ..但是我們不想要這個,並且想要爲每個名稱空間指定特定的名稱空間前綴。我在這裏檢查並發現鏈接15772478說我們必須有包含xmlns元素的包信息類,我怎麼能說xjc綁定編譯器添加與prifixes和namespaceURI xmlns元素?下面是Gradle配置,我必須從模式生成Jaxb類。xjc綁定編譯器配置將xmlns元素添加到package-info類?

ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJCTask', classpath:configurations.jaxb.asPath) 
    ant.jaxbTargetDir = jaxbTargetDir 

    ant.xjc(destdir: '${jaxbTargetDir}', binding: 'xjc-bindings/bindings.jaxb', extension: true) { 
    //arg(value: '-npa') 
    arg(value: '-readOnly') 
    arg(value: file('src/main/webapp/schemas/primary1.xsd')) 
    arg(value: file('src/main/webapp/schemas/primary2.xsd')) 
    arg(value: file('xjc-bindings/xjc-a.xsd')) 
    arg(value: file('xjc-bindings/xjc-b.xsd')) 
} 

由xjc綁定生成的示例package-info.java。

@XmlSchema(namespace = "urn:neustar:names:decedm:1.0") 
package biz.neustar.dece.xml.jaxb.decedm; 
import javax.xml.bind.annotation.XmlSchema; 

我期待像下面的包信息類。

@XmlSchema(namespace = "<someuri>", 
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED, 
xmlns={ 
     @XmlNs(prefix="someprefix" , namespaceURI = "<some uri>") 
}) 
package biz.neustar.dece.xml.jaxb.core; 
import javax.xml.bind.annotation.XmlNs; 
import javax.xml.bind.annotation.XmlSchema; 

有人可以請我建議什麼是配置需要實現這個? 我不想使用NamespacePrefixMapper來指定前綴。

+0

參見:http://stackoverflow.com/questions/25184035/adding-annotations-to-package-info-generated-by-jaxb – lexicore 2015-01-06 12:26:37

回答

3

您需要像下面那樣更新綁定文件。它將使用eCH-0007作爲前綴。

<?xml version="1.0"?> 
<jxb:bindings version="1.0" 
       xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:namespace="http://jaxb2-commons.dev.java.net/namespace-prefix" 
       xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd 
       http://jaxb2-commons.dev.java.net/namespace-prefix http://java.net/projects/jaxb2-commons/sources/svn/content/namespace-prefix/trunk/src/main/resources/prefix-namespace-schema.xsd"> 

    <jxb:bindings schemaLocation="eCH-0007-3-0.xsd"> 
     <jxb:schemaBindings> 
      <jxb:package name="ch.ech.ech0007.v3" /> 
     </jxb:schemaBindings> 
     <jxb:bindings> 
      <namespace:prefix name="eCH-0007" /> 
     </jxb:bindings> 
    </jxb:bindings> 
</jxb:bindings> 

您可以在此鏈接查看完整的例子[https://java.net/projects/jaxb2-commons/pages/Namespace-prefix]

+0

這可能適用於一個模式,但如果有多個模式和名稱空間呢? – Lovababu 2014-12-20 12:23:06

+0

然後你可以使用這個解決方案http://java.dzone.com/articles/jaxb-and-namespace-prefixes – 2014-12-22 12:51:56