在阅读了 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。
提前致谢。