在阅读了 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:命名空间前缀映射器
我创建了以下类并将映射器设置为编组器:
// 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,它会抛出异常。
我还在我的 pom 中添加了 maven 依赖项,但似乎 JRE 版本具有更高的优先级:
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.4</version>
</dependency>
你能帮我解决这个问题吗?
PS:出于构建原因,我不能直接将 jar 包含在我的类路径中。PS2:我不能使用 JDK7。提前致谢。