【问题标题】:xjc binding compiler configuration to add xmlns element to the package-info class?xjc 绑定编译器配置以将 xmlns 元素添加到 package-info 类?
【发布时间】:2015-02-18 07:54:26
【问题描述】:

我正在使用 Gradle 在我的项目中生成 jaxb 类。一切正常,但在编组 jaxb 对象时,我们在输出 xml 中随机看到不同的命名空间前缀,如 ns1、ns2 ..。但是我们不想要这个并且想要为每个命名空间指定特定的命名空间前缀。我在这里检查并找到链接15772478 说我们必须有带有 xmlns 元素的 package-info 类,我怎么能对 xjc 绑定编译器说添加带有 prifixes 和 namespaceURI 的 xmlns 元素?下面是我必须从模式生成 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'))
 }

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;

我期待下面的 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;

有人可以建议我实现这一目标需要什么配置吗? 我不想使用 NamespacePrefixMapper 来指定前缀。

【问题讨论】:

标签: spring web-services cxf xjc


【解决方案1】:

您需要更新您的绑定文件,如下所示。它将使用 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>

您可以在此链接Namespace-prefix 上查看完整示例。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多