Использование JAXB JDK без префикса ns2
После прочтения всех сообщений об этом на форумах Oracle, Stackoverflow, java.net я наконец-то разместил здесь сообщение. Я использую JAXB для создания файлов XML, но проблема в том, что он добавляет знаменитыйns2 Префикс перед моими элементами, я попробовал все решения, которые никто не работал для меня. Java-версия дает "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
Я создал следующий класс и установил 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: я не могу напрямую включить флягу в мой classpath по причинам сборки. PS2: я не могу использовать JDK7. Заранее спасибо.