[quote=dsmdanbr][quote=viniciuspadua]colocar o prefixo vai depender da sua codificação: para mim fiz assim:
import org.dom4j.Element;
import org.dom4j.Namespace;
...
private final Namespace ansNameSpace = new Namespace("ans","http://www.ans.gov.br/padroes/tiss/schemas");
...
Element epilogo = pai.addElement(new QName("epilogo", namespace));
Element hash = epilogo.addElement(new QName("hash", namespace));
com isso ao gerar o xml ja vai com o namespace![/quote]
Então, no caso isso seria caso tivesse gerado o xml item por item não é isso?
Porque eu instanciei um objeto MensagemTISS setei os campos e salvei ele em XML
através da JAXB.
Olha como ficou o código de teste:
ObjectFactory objFactory = new ObjectFactory();
MensagemTISS mensagem = new MensagemTISS();
mensagem.setCabecalho(new CabecalhoTransacao());
mensagem.getCabecalho().setVersaoPadrao(“2.02.01”);
mensagem.getCabecalho().setIdentificacaoTransacao(new CabecalhoTransacao.IdentificacaoTransacao());
mensagem.getCabecalho().getIdentificacaoTransacao().setTipoTransacao(StTipoTransacao.ENVIO_LOTE_GUIAS);
mensagem.getCabecalho().getIdentificacaoTransacao().setSequencialTransacao(new BigInteger(“1”));
mensagem.setPrestadorParaOperadora(new MensagemTISS.PrestadorParaOperadora());
mensagem.getPrestadorParaOperadora().setLoteGuias(ctLoteGuias);
//mensagem.setCabecalho(new CabecalhoTransacao());
mensagem.setEpilogo(objFactory.createMensagemTISSEpilogo());
mensagem.getEpilogo().setHash("0");
MensagemTiss mTiss = new MensagemTiss();
try {
mTiss.setDocumentoMensagem(mensagem);
} catch (Exception e) {
e.printStackTrace();
}
mensagem.getEpilogo().setHash(mTiss.getHashCalculado());
try {
JAXBContext jc = JAXBContext.newInstance("br.gov.ans.padroes.tiss.schemas.v20201");
Marshaller m = jc.createMarshaller();
m.setProperty(m.JAXB_ENCODING, "ISO-8859-1");
m.setProperty(m.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(mensagem, new FileOutputStream("d:/a.xml"));
Unmarshaller unmarshaller = jc.createUnmarshaller();
File file = new File("d:/a.xml");
mensagem = (MensagemTISS) unmarshaller.unmarshal(new FileInputStream(file.getAbsolutePath()));
String mensagemTxt = security.log.util.LogUtil.readFile(file).replace("http://www.ans.gov.br/padroes/tiss/schemas/v20201", "http://www.ans.gov.br/padroes/tiss/schemas");
file.createNewFile();
FileWriter output = new FileWriter(file);
BufferedWriter bufOutput = new BufferedWriter(output);
bufOutput.write(mensagemTxt);
bufOutput.close();
MensagemTiss mensagemTiss = new MensagemTiss(file.getAbsolutePath());
System.out.println(mensagemTiss.getHashCalculado());
} catch (JAXBException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
Entendeu? Não teria como eu setar o prefixo através da JAXB?
Obrigado.[/quote]
Consegui colocar o prefixo, tem até um exemplo na página 6.
import com.sun.xml.bind.marshaller.NamespacePrefixMapper;
public class ANSPrefixMapper extends NamespacePrefixMapper {
public static final String PREFIXO_ANS = "ans";
@Override
public String getPreferredPrefix(String arg0, String arg1, boolean arg2) {
return PREFIXO_ANS;
}
}
Marshaller m = jc.createMarshaller();
m.setProperty("com.sun.xml.bind.namespacePrefixMapper", new ANSPrefixMapper());
Referência: http://www.j2ee.me/webservices/docs/2.0/jaxb/vendorProperties.html
Obrigado.