Usando o JAXB do JDK sem o prefixo ns2
Depois de ler todos os posts sobre isso nos fóruns da Oracle, Stackoverflow, java.net, finalmente estou postando aqui. Estou usando o JAXB para criar arquivos XML, mas o problema é que ele adiciona o famosons2 prefixo antes dos meus elementos, eu tentei todas as soluções que ninguém trabalhou para mim. java -version dá "1.6.0_37"
Solução 1: Usando o package-info.java
Eu criei o arquivo no meu pacote contendo minhas classes anotadas @ Xml * com o seguinte conteúdo:
@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;
Solução 2: NamespacePrefixMapper
Eu criei a seguinte classe e configurei o mapeador para o marshaller:
// 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());
}
Comcom.sun.xml.bind.namespacePrefixMapper nada acontece, comcom.sun.xml.internal.bind.namespacePrefixMapper, lança a exceção.
Eu também adicionei a dependência maven no meu pom, mas parece que a versão do JRE tem uma prioridade mais alta:
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.4</version>
</dependency>
Você pode me ajudar nisso?
PS: Eu não posso incluir diretamente o jar no meu caminho de classe por razões de construção. PS2: Eu não posso usar o JDK7. Desde já, obrigado.