E ae galera,
Estou com um grande problema aqui que é adicionar um namespace no xmlns gerado com JAXB.
Meu código esta gerando a seguinte informação:
<mensagemTiss xmlns="http://www.ans.gov.br/padroes/tiss/schemas">
E eu preciso que ele gere da seguinte forma:
<ansTISS:mensagemTiss xmlns:ansTISS="http://www.ans.gov.br/padroes/tiss/schemas">
Pois todas as tags do meu xml precisam dessa nomenclatura “ansTISS”.
Já tentei setar na classe root mas ai ele gera assim, xmlns:ns2.
Alguém ai já passou por isso?
Grato!
Movido para o fórum de Java Avançado.
Olá Wender !! Já passei por isso. Segue o caminho:
1- Crie a seguinte classe extendendo NamespacePrefixMapper.
import com.sun.xml.bind.marshaller.NamespacePrefixMapper;
/**
*
* @author rogério cruz sousa
*/
public class ANSPrefixMapper extends NamespacePrefixMapper {
public static final String PREFIXO_ANS = "ansTISS";
@Override
public String getPreferredPrefix(String arg0, String arg1, boolean arg2) {
return PREFIXO_ANS;
}
}
Coloque esse código quando for fazer a conversão usando o JAXB
marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", new ANSPrefixMapper());
Até mais
Rogério
Rogerio,
Implementei como indicou mas esta dando a seguinte exceção:
Exception in thread "main" javax.xml.bind.PropertyException: name: com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper value: tttr.AnsPrefixMapper@61542a75
at javax.xml.bind.helpers.AbstractMarshallerImpl.setProperty(AbstractMarshallerImpl.java:338)
at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.setProperty(MarshallerImpl.java:532)
at tttr.Main.main(Main.java:69)
Java Result: 1
A unica coisa que modifiquei aqui foi o import que coloquei:
Dai modifiquei na classe ANSPrefixMapper e na instrução setProperty do marshaller.
marshaller.setProperty("com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper", new AnsPrefixMapper());
Grato!
Já faz uns três anos q eu fiz esse código, no meu import está?
import com.sun.xml.bind.marshaller.NamespacePrefixMapper;
Se ajudar, segue o resto do cabeçalho:
JAXBContext jaxbContext;
jaxbContext = JAXBContext.newInstance("br.gov.ans.padroes.tiss.schemas.v20103");
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", new ANSPrefixMapper());
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.TRUE);
marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, schemaPath);
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
Até mais
Rogerio,
Valeu cara, foi isso mesmo. Só não estava funcionando no meu projeto teste, passei pro projeto original que é web e funcionou perfeitamente.
pode postar o resultado final ?
Tu quer o código completo?
pode ser! manda os import tb
Sei que está resolvido, mas eu implementei de uma forma mais simples.
Para um namespaces no seu xml, crie o arquivo package-info.java dentro do package onde está a sua classe JAXB e cole o conteúdo abaixo:
@javax.xml.bind.annotation.XmlSchema (namespace = “seunamespace”, elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package seupackage;
Só isso. Isso automaticamente inserirá o namespace no seu xml:
…
rbcneto
Outubro 5, 2012, 10:58am
#12
Ola…Boa Tarde…
se alguem conseguiu fazer isso funcionar… por favor me ajude…
aqui apresenta o seguinte erro:
Exception in thread "main" javax.xml.bind.PropertyException: name: br.gov.ans.padroes.tiss.schemas value: app.ANSPrefixMapper@1191056
at javax.xml.bind.helpers.AbstractMarshallerImpl.setProperty(AbstractMarshallerImpl.java:358)
at com.sun.xml.bind.v2.runtime.MarshallerImpl.setProperty(MarshallerImpl.java:499)
at app.App.main(App.java:60)
Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)
alguem me da uma ideia???
obrigado
Mrwin
Novembro 21, 2012, 12:39am
#13
Usei o exemplo do amigo acima com o package-info.java e funcionou tranquilamente
ThiagoInGuj, caraaaa… vc salvou meu dia, fiz como você informou e deu certinho…
Diferente dessas pessoas que somente diz que resolveu e não posta a solução, vou postar aqui.:
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.meunamespace.inf.br",
xmlns =
{
@javax.xml.bind.annotation.XmlNs(prefix = "",
namespaceURI="http://www.meunamespace.inf.br")
},
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package br.inf.portalfiscal.nfe;
Criei o arquivo package-info.java, coloquei dentro da pasta onde gera o XML e funfou perfeitamente.