После того, как вы прочитали все сообщения об этом на форумах 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: пространство именPrefixMapper
Я создал следующий класс и задал mapper для маршаллера:
// 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, он выдает исключение.
Я также добавил зависимость maven в моем pom, но кажется, что версия JRE имеет более высокий приоритет:
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.4</version>
</dependency>
Можете ли вы мне помочь?
PS: Я не могу включить непосредственно jar в свой путь к классам для создания причин. PS2: Я не могу использовать JDK7. Спасибо заранее.