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

标签 spring web-services cxf xjc

我正在使用 Gradle 在我的项目中生成 jaxb 类。一切正常,但在编码 jaxb 对象时,我们在输出 xml 中随机看到不同的命名空间前缀,如 ns1、ns2 ..。但我们不希望这样,而是想为每个命名空间指定特定的命名空间前缀。我在这里查看并找到了链接 15772478说我们必须有带有 xmlns 元素的 package-info 类,我怎么能告诉 xjc 绑定(bind)编译器添加带有 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 绑定(bind)生成的示例 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 来指定前缀。

最佳答案

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

关于spring - xjc 绑定(bind)编译器配置将 xmlns 元素添加到 package-info 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27565031/

相关文章:

web-services - 在 Windows 7 上部署 .asmx(不是 WCF)Web 服务

java - minOccurs 和 maxOccurs

java - 打印 SOAP 消息的 XML 内容

java - 将接口(interface)名称也用作 bean 名称时的 Spring 行为?

java - 配置 Eclipse Web 项目来测试 Spring/JPA 的理想方法是什么

spring - 为什么没有像 RequestContextHolder 这样的 Response 持有者类

javascript - 如何在 php 中通过 curl 发送请求负载

c# - .NET Web 服务的可扩展性

java - 通过设置 use.async.http.conduit 上下文属性来使用 CXF HttpAsyncClient

java - spring + jpa + hibernate,列出表中的所有行