使用JDK的JAXB,不带ns2前缀

2023-12-23

在阅读了 Oracle 论坛、Stackoverflow、java.net 上有关此内容的所有帖子后,我终于在这里发帖了。 我正在使用 JAXB 创建 XML 文件,但问题是它添加了著名的ns2在我的元素之前添加前缀,我已经尝试了所有没有人为我工作的解决方案。 java -version 给出“1.6.0_37”

解决方案 1:使用 package-info.java

我在包中创建了包含 @Xml* 带注释的类的文件,内容如下:

@XmlSchema(
    namespace = "http://mynamespace",
    elementFormDefault = XmlNsForm.QUALIFIED,
    xmlns = {
        @XmlNs(namespaceURI = "http://mynamespace", prefix = "")
    }
)
package com.mypackage;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

解决方案2:NamespacePrefixMapper

我创建了以下类并将映射器设置为编组器:

// Change mapper to avoid ns2 prefix on generated XML
class PreferredMapper extends NamespacePrefixMapper {
    @Override
    public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
        return "";
    }
}
NamespacePrefixMapper mapper = new PreferredMapper();
try {
    marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", mapper);
}
catch (PropertyException e) {
   logger.info("No property for com.sun.xml.bind.namespacePrefixMapper found : " + e.getMessage());
}

With com.sun.xml.bind.namespacePrefixMapper什么也没有发生,与com.sun.xml.internal.bind.namespacePrefixMapper,它会抛出异常。

我还在我的pom中添加了maven依赖项,但似乎JRE版本具有更高的优先级:

<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.2.4</version>
</dependency>

你能帮我解决这个问题吗?

PS:由于构建原因,我无法直接将 jar 包含在我的类路径中。 PS2:我无法使用JDK7。 提前致谢。


如果没有 MOXy 的实施是不可能的。 JAXB 如果首选前缀是“”,它会生成一个新前缀。

我过去也遇到过同样的问题,我为每个package-info.java配置了每个前缀。

NamespacePrefixMapper 在 JAVADOC 中说

null if there's no prefered prefix for the namespace URI.
In this case, the system will generate a prefix for you.

Otherwise the system will try to use the returned prefix,
but generally there's no guarantee if the prefix will be
actually used or not.

return "" to map this namespace URI to the default namespace.
Again, there's no guarantee that this preference will be
honored.

If this method returns "" when requirePrefix=true, the return
value will be ignored and the system will generate one"

否则如果使用包信息

we know we can't bind to "", but we don't have any possible name at hand.
generate it here to avoid this namespace to be bound to "".

我希望我已经为您提供了有关您问题的所有答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用JDK的JAXB,不带ns2前缀 的相关文章

随机推荐

  • 如何忽略 List 中的大小写敏感性

    假设我有这段代码 string seachKeyword List
  • 地图注释搜索

    我关注了一个如何使用 apples mapkit 搜索位置 https www thorntech com 2016 01 how to search for location using apples mapkit 关于搜索annotat
  • 如何获取 iPhone 中录制的音频的时间?

    我正在使用录制音频AVAudioRecorder 现在我想获得我录制的音频的确切持续时间 我怎样才能得到它 我试过这个 AVURLAsset asset AVURLAsset alloc initWithURL avAudioRecorde
  • 当我创建太多分区时,postgreSQL 的性能严重下降[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我不明白当我为表创建太多分区时 为什么 postgreSQL 会出现性能下降 100 gt 0 05 秒 200 gt 0 07 秒 40
  • 使用 RxJS 进行批处理?

    我猜想这应该很容易实现 但我在解决它时遇到了困难 我猜是概念上 我拥有的是一个返回 JSON 对象数组的 API 我需要单步执行这些对象 并对每个对象进行另一个 AJAX 调用 问题是处理每个 AJAX 调用的系统一次只能处理两个活动调用
  • 如何在带有 razor 的 MVC 3 中使用正则表达式

    当我将 MVC 3 与 razor 一起使用时 它工作正常 但是当我使用 section head 编写正则表达式时 他们不起作用 function isValidEmailAddress emailAddress var pattern
  • TortoiseSVN不保存密码

    我在 Windows 7 Professional 64 位中安装了 Tortoisesvn 1 8 7 乌龟总是要求保存密码 但还是不保存 我多次清除路径 AppData Roaming Subversion 但没有在 svn simpl
  • 禁用 Ruby on Rails 中的文本框?

    我有代码 我想禁用使用嵌入式 ruby 的文本框 但无法这样做 如果我能就我所面临的情况获得任何帮助 我将不胜感激 禁用文本框后 我想让一个按钮从数据库表 项目符号 生成四个随机 ID 并将它们以数组格式打印在禁用的文本框中 并利用这四个打
  • 编辑电子邮件地址后无法登录

    I have 格里特 v3 0 0在我的服务器上运行 昨天一切正常 这是我的身份验证方法 auth type http emailFormat 0 domain com 我不确定这是否是问题的原因 但我可能已删除我的电子邮件地址 电子邮件受
  • 将列值从一个数据库.表复制到另一个数据库.表

    让我们保持简短而甜蜜 我想这样做 我现在已经失败了很多次 一次尝试甚至用空白更新了行 UPDATE Database2 Table1 SET Database2 Table1 Column1 Database2 Table1 Column2
  • Node Express 强制所有静态路由指向根路径

    我有一个 node js 应用程序 我正在尝试对其进行通用化 以便无论后端的 URL 是什么 它始终使用根路径来提供静态文件 所以目前我的应用程序位于https myapp heroku com https myapp heroku com
  • 如何在 twitter-bootstrap 中停止图像响应?

    我正在使用 twitter bootstrap 来制作响应式布局 它的效果非常棒 它使图像过于敏感 我需要一些图像只需要固定宽度和高度 div class span1 img src http i ytimg com vi uGBKzIY4
  • 在asp.net MVC中,我们可以从另一个控制器调用一个控制器的方法吗?

    在asp net MVC中 我们可以从另一个控制器调用一个控制器的方法吗 您也可以直接重定向到该方法 如下所示 public class ThisController public ActionResult Index return Red
  • 如果 using 块返回,IDisposable 是否会被释放?

    例如 using var something GetSomething something DoSomething if something IsX return true return false 是的 一点没错 这Dispose方法被调
  • C# - 如何将转义字符串转换为文字字符串? [复制]

    这个问题在这里已经有答案了 可能的重复 我可以在运行时展开包含 C 文字表达式的字符串吗 https stackoverflow com questions 3298075 can i expand a string that contai
  • 有没有办法在 C++ 中传递字符串文字作为引用

    在 C 中 如果值不能为 NULL 则通常通过引用而不是指针传递 假设我有一个具有以下签名的函数 该函数通常与字符串文字一起使用 void setText const char text 我想知道如何更改函数以使其接受引用 并且具有不接受
  • Java中的paintComponent()没有被调用[重复]

    这个问题在这里已经有答案了 我正在尝试绘制一个简单的矩形 但我认为 PaintComponent 方法没有被调用 这是带有 main 方法的类的代码 package painting import java awt import javax
  • 电子,在browserify之后,fs.existsSync不是一个函数

    我读了很多关于 browserify 和 electro 以及 gui 浏览器问题 但 browserify 仍然存在问题 说 fs existsSync 不是一个函数 并且 required 未定义 完整的故事 我用电子创建了简单的图形用
  • 关于静态方法的 Java 编码约定

    这是一个非常简单的问题 但我认为这是一个有点争议的问题 当我编写 Java 类代码时 我使用以下顺序 class Foo static fields instance fields constructors methods non stat
  • 使用JDK的JAXB,不带ns2前缀

    在阅读了 Oracle 论坛 Stackoverflow java net 上有关此内容的所有帖子后 我终于在这里发帖了 我正在使用 JAXB 创建 XML 文件 但问题是它添加了著名的ns2在我的元素之前添加前缀 我已经尝试了所有没有人为