xjc绑定编译器配置以将xmlns元素添加到package-info类? [英] xjc binding compiler configuration to add xmlns element to the package-info class?

查看:159
本文介绍了xjc绑定编译器配置以将xmlns元素添加到package-info类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Gradle在我的项目中生成jaxb类。一切正常,但是在整理jaxb对象时,我们在输出xml中随机看到了不同的名称空间前缀,例如ns1,ns2..。但是我们不希望这样做,而是希望为每个名称空间指定特定的名称空间前缀。我在这里检查,发现链接 15772478 说我们必须具有xmlns元素的package-info类,如何对xjc绑定编译器说添加带有prifixes和namespaceURI的xmlns元素?以下是我必须从架构生成Jaxb类的gradle配置。

I am using Gradle to generate jaxb classes in my project. Every thing is working fine but while marshalling the jaxb object we are seeing different namespaces prefixes like ns1, ns2 .. randomly in the output xml. But we dont want this and want to specify specific namespace prefixes for each namespace. I checked here and found the link 15772478 saying we have to have package-info class with xmlns element, How can i say to xjc binding compiler to add xmlns element with prifixes and namespaceURI? below is the gradle configuration i have to generate Jaxb classes from schemas.

  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。

sample package-info.java generated by xjc binding.

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

我期望下面的package-info类。

I am expecting the package-info class like below.

@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指定前缀。

Can somebody please suggest me what is the configuration need to achieve this? I don't want to use NamespacePrefixMapper to specify the prefixes.

推荐答案

您需要像这样更新绑定文件以下。它将使用 eCH-0007 作为前缀。

You need to update you binding file like following. It will use eCH-0007 as prefix.

<?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]

You can check complete example on this link [https://java.net/projects/jaxb2-commons/pages/Namespace-prefix]

这篇关于xjc绑定编译器配置以将xmlns元素添加到package-info类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆