Estou brigando há 1 semana com o serviço de envio de notas da NF-e 2.0.
Já consegui comunicar com a SEFAZ (consulta status do serviço), logo meus certificados e o restante está ok.
A única coisa que está pegando é que eles modificaram o tipo do parâmetro de dados de string (versão 1.10) para XML (versão 2.0). No entanto, ao enviar a nota assinada ele está “transformando” meu XML, como se de fato ele fosse uma string. Logo, deixando de funcionar.
Estou utilizando o JAX para a comunicação. Alguém tem alguma ideia sobre como enviar uma String sem que o Java tente “corrigir” nosso conteúdo?
Na verdade, eu estressei com as classes dando esses erros e fiz no melhor estilo “Chuck Norris Mode”. Chamei os procedimentos da SEFAZ como se fosse um serviço HTTP comum, montando o XML no braço e funcionou tudo certo. Não ficou elegante mas me resolveu. Talvez mais pra frente eu volte à verificar como resolver o problema anterior.
Abaixo, trecho para enviar a mensagem para quem estiver sofrendo e quiser uma luz.
// Preparando conexão SSL - Tem vários exemplos no GUJ para certificado A1 e A3
prepararSSL();
// Montando XML de envio no braço
String mensagem = "<?xml ..........";
URL u = new URL(caminhoWebService);
HttpURLConnection connection = (HttpURLConnection) u.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
connection.connect();
enviarEnvelopeXML(connection, mensagem);
String xmlRetornado = getResposta(connection);
Com o HttpConnection acho que você não vai ter muito sucesso,
O jeito mais fácil é usando um SoapMessage, ai vc escreve o XML inteiro do SOAP, incluindo o envelope e envia. Simples e fácil.
Não tenho um exemplo pra te mostrar, eu perdi o meu que eu usava pra comparar o soap que tinha que enviar com o soap que o Axis2 enviava
Obs:
na versão 1.0, vc devia enviar uma string, ai tinha que converter os < e > para as respectivas entidades html, agora o que vc deve enviar é o xml inteiro
É justamente este o problema que eu grilei com o JAX. Talvez por não saber como fazer isto da melhor maneira, admito. Mas ficar mapeando o XML inteiro como tive que fazer no processo de verificação do status é que eu não vou ficar fazendo.