JAXB Marshaller

Alguem sabe como mudar o NameSpace de ns1 para outro qualquer?? no meu schema ja esta definido “C”, quando eu fasso um Unmarshaller ele encontra as tas com “C”, mas quando fasso um Marshaller ele não vai como"C" vai como ns1 no namespace, como fasso pra alterar???

vlwssss

Você vai ter que fazer uma classe que extende a NameSpacePrefixMapper

exemplo:


public class NameSpacePrefixMapperImpl extends NamespacePrefixMapper {

    @Override
    public String getPreferredPrefix(String namespaceURI, String sugestion, boolean requiredPrefix) {

        if (namespaceURI.equals("http://meunamespace")) {
            return "C";
        }
        
        return sugestion;
    }

e no marshaller vc coloca assim:


Marshaller m = ctx.createMarshaller();
...
...
m.setProperty("com.sun.xml.bind.namespacePrefixMapper", new NameSpacePrefixMapperImpl())
...
...

[]s

[quote=cristiano.andrade]Você vai ter que fazer uma classe que extende a NameSpacePrefixMapper

exemplo:


public class NameSpacePrefixMapperImpl extends NamespacePrefixMapper {

    @Override
    public String getPreferredPrefix(String namespaceURI, String sugestion, boolean requiredPrefix) {

        if (namespaceURI.equals("http://meunamespace")) {
            return "C";
        }
        
        return sugestion;
    }

e no marshaller vc coloca assim:


Marshaller m = ctx.createMarshaller();
...
...
m.setProperty("com.sun.xml.bind.namespacePrefixMapper", new NameSpacePrefixMapperImpl())
...
...

[]s
[/quote]

Aqui tem um jeito mais fácil de se fazer http://www.func.nl/community/knowledgebase/customize-namespace-prefix-when-marshalling-jaxb . O único problema é que ele remove o namespace e adiciona um em branco… Após esta etapa, um replace deste namespace para o adequado precisa ser feito.