xjc绑定编译器配置将xmlns元素添加到package-info类?

Lov*_*abu 2 spring web-services cxf xjc

我正在使用Gradle在我的项目中生成jaxb类.每个东西都工作正常,但在编组jaxb对象时,我们在输出xml中随机看到不同的名称空间前缀,如ns1,ns2 .. 但我们不想要这个,并希望为每个命名空间指定特定的命名空间前缀.我查了这里,发现该链接15772478说,我们必须有xmlns的元件封装,信息类,我怎么能说XJC绑定编译器添加的xmlns元素与prifixes和的namespaceURI?下面是我必须从模式生成Jaxb类的gradle配置.

  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'))
 }
Run Code Online (Sandbox Code Playgroud)

示例由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;
Run Code Online (Sandbox Code Playgroud)

我期待如下的package-info类.

@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;
Run Code Online (Sandbox Code Playgroud)

有人可以建议我实现这个需要什么配置?我不想使用NamespacePrefixMapper来指定前缀.

小智 5

您需要更新绑定文件,如下所示.它将使用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>
Run Code Online (Sandbox Code Playgroud)

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