【发布时间】:2013-01-30 10:34:46
【问题描述】:
在阅读了 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());
}
使用 com.sun.xml.bind.namespacePrefixMapper 没有任何反应,使用 com.sun.xml.internal.bind.namespacePrefixMapper 会引发异常。 p>
我还在 pom 中添加了 maven 依赖,但似乎 JRE 版本的优先级更高:
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.4</version>
</dependency>
你能帮我解决这个问题吗?
PS:由于构建原因,我无法将 jar 直接包含在我的类路径中。 PS2:我不能使用 JDK7。 提前致谢。
【问题讨论】:
-
仅供参考,删除 ns2 仅适用于 JDK7(可能也适用于其他新的 JAXB 实现),但在简单的包结构中,如提到的 here,但我需要重用域模型类,然后我也有 @987654322 @。 PS重命名完美。
标签: jaxb xml-namespaces