Problemas envio da NFE: 588 - Rejeição: não é permitida a presença de caracteres

Todos os meus XML não contém espaços entre tags, de nenhum tipo, nem da nota nem da assinatura, existe espaço em campos descritivos como o de municipio e quebras de linha no meio da assinatura, pois acredito que faz parte da própria assinatura.

E acredito que já foram uns 5000 xml para a homologação desde o começo do problema (aqui fizemos um esquema hibrido que manda nota pra produção e homologação ao mesmo tempo)
todos eles são rejeitados com o mesmo problema.

A propósito, o que são “caracteres de edição”?
ah e o erro 588 não está catalogado no manual, assim fica fácil acreditar neles (isso foi sarcasmo)

Acho que descobri o problema, porém ainda preciso descobrir como vou testar isso, seguinte:
abri 2 xml no notepad++ e mandei mostrar os caracteres estranhos (fiz isso desde o começo do problema, só que só percebi agora)
um xml foi eu que assinei com meu software
o outro foi o software da sefaz SP

percebi que as quebras de linha que estão dentro das tags <X509Certificate> e <SignatureValue> possuem CR e LF isso quando assinadas pelo meu assinador (Que peguei o código aqui no guj)
quando passa pelo assinador da SEFAZ as quebras de linha só contém LF
deve ser isso.

Agora a questão é: como vou fazer para meu assinador assinar sem colocar o maldito CR ali?

vixi… agora complicou :frowning:

Eu tinha lido que caracteres de edição eram os caracteres de uso do xml (Ex: <, >, ", /, =, etc)
mas agora estava lendo e parece que caracteres de edição são os caracteres os usados para dar uma melhor visualização de uma informação (Ex: máscaras).
Acho que posso ter me precipitado ao dizer que espaço não é um caractere de edição. :?

Como que eles não colocam esse erro no manual??! Eles são uns fdp mémo viu!! :evil:
Não acredito que eles não leram nenhuma reclamação sobre este erro!! deve ser preguiça ou desleixo deles!!

[quote=Rafael Rossignol]Engraçado, o meu também sempre foi gerado em uma única linha e ainda continua dando erro!
abri o XML no notepad++
mandei mostrar os caracteres de quebra de linha e não tem nenhum
só tem quebra na assinatura como o exemplo ai em cima!

Continuo com problema, vou continuar olhando aqui![/quote]Manda o teu XML aqui do jeito que mandei o meu, quem sabe um de nós não consegue ver alguma coisa que está te escapando.

Bom dia,

Aqui na empresa estamos com o mesmo problema em homologacao de SP, emitimos notas para BA e ES tb e nao temos o mesmo problema.
Acredito que o problema esta mesmo nos caracteres CR LF que sao adicionados no momento da assinatura.
Se alguem tiver uma luz de como daria no momento da assinatura nao colocar esse caracteres sera muito bem vinda.
To escrevendo um codigo pra remover esses caracteres depois, mas nao sei se seria a forma correta de resolver isso.

Obrigado.

Eu fiz um replaceAll("\r","") no final do meu assinador e mesmo assim não resolveu
Estou investigando mais algumas coisas, assim que tiver novidades eu aviso!

Segue um dos meus linguições, ops, XML:

http://twitpic.com/2xrqpb/full
(editei aqui, pq o xml aqui tava fazendo travar o post)

A propósito, achei que tinha a ver com encoding e coisas assim, forcei UTF-8 de todas as maneiras que consegui, e fiz replace de CR (\r) por nada ("") e não resolveu.
O problema é que após eu guardar o xml no BD ele coloca os marditos CR de novo, já pensei q podia ser isso mas não é, pois eu assino e envio o XML tudo em memória antes de armazenar no BD.

Então, assinei a nota com meu software e transmiti sem problemas pelo software da SEFAZ.
To achando que pode ser na hora que envio ou na hora que gero o lote.

Alguém pode me dizer como faz a transmissão?
Eu utilizei o apache axis2 e mandei gerar o cliente pelo eclipse, ele gera duas classes (pra cada webservice, segue exemplo)
NfeRecepcao2Stub e
NfeRecepcao2CallbackHandler

para transmitir

[code] OMElement ome = AXIOMUtil.stringToOM(xmlLote);
NfeRecepcao2Stub.NfeDadosMsg dadosMsg = new NfeRecepcao2Stub.NfeDadosMsg();
dadosMsg.setExtraElement(ome);

    NfeRecepcao2Stub.NfeCabecMsg nfeCabecMsg = new NfeRecepcao2Stub.NfeCabecMsg();
    nfeCabecMsg.setCUF(uf.toString());
    nfeCabecMsg.setVersaoDados(VERSAO);
    NfeRecepcao2Stub.NfeCabecMsgE nfeCabecMsgE = new NfeRecepcao2Stub.NfeCabecMsgE();
    nfeCabecMsgE.setNfeCabecMsg(nfeCabecMsg);

    NfeRecepcao2Stub stub = new NfeRecepcao2Stub();

    NfeRecepcao2Stub.NfeRecepcaoLote2Result result = stub
            .nfeRecepcaoLote2(dadosMsg, nfeCabecMsgE);
    return result.getExtraElement().toString();[/code]

To achando que o tal do cabeçalho ele manda com as tais quebras de linha.
Alguém faz diferente disso pra transmitir?
se faz, tem como mandar um exemplo?

Obrigado de antemão.

Alguém ainda está com esse problema ou sou só eu?

[quote=Rafael Rossignol]Então, assinei a nota com meu software e transmiti sem problemas pelo software da SEFAZ.
To achando que pode ser na hora que envio ou na hora que gero o lote.

Alguém pode me dizer como faz a transmissão?
Eu utilizei o apache axis2 e mandei gerar o cliente pelo eclipse, ele gera duas classes (pra cada webservice, segue exemplo)
NfeRecepcao2Stub e
NfeRecepcao2CallbackHandler

para transmitir

[code] OMElement ome = AXIOMUtil.stringToOM(xmlLote);
NfeRecepcao2Stub.NfeDadosMsg dadosMsg = new NfeRecepcao2Stub.NfeDadosMsg();
dadosMsg.setExtraElement(ome);

    NfeRecepcao2Stub.NfeCabecMsg nfeCabecMsg = new NfeRecepcao2Stub.NfeCabecMsg();
    nfeCabecMsg.setCUF(uf.toString());
    nfeCabecMsg.setVersaoDados(VERSAO);
    NfeRecepcao2Stub.NfeCabecMsgE nfeCabecMsgE = new NfeRecepcao2Stub.NfeCabecMsgE();
    nfeCabecMsgE.setNfeCabecMsg(nfeCabecMsg);

    NfeRecepcao2Stub stub = new NfeRecepcao2Stub();

    NfeRecepcao2Stub.NfeRecepcaoLote2Result result = stub
            .nfeRecepcaoLote2(dadosMsg, nfeCabecMsgE);
    return result.getExtraElement().toString();[/code]

To achando que o tal do cabeçalho ele manda com as tais quebras de linha.
Alguém faz diferente disso pra transmitir?
se faz, tem como mandar um exemplo?

Obrigado de antemão.[/quote]Eu cansei de tentar reiventar a roda e fiz a exportação do meu ERP para o Emissor do SEFAZ e depois eu leio os dados das notas enviadas no Emissor do SEFAZ e atualizo meu ERP.
O código que eu usava para enviar notas era esse, levava 2 horas para enviar um lote de notas.

[code]public TRetEnviNFe enviarNotaFiscal(String arquivoXML, String cUF) throws AxisFault, RemoteException, ParserConfigurationException, SAXException, IOException, JAXBException, KeyStoreException, NoSuchAlgorithmException, CertificateException {
if (!Global.PROPRIEDADES_CERTIFICADO_OK) {
setPropriedadesCertificado();
}
emissor.ws.h.recepcaonota.NfeRecepcao2Stub.NfeCabecMsg cabecalho = new emissor.ws.h.recepcaonota.NfeRecepcao2Stub.NfeCabecMsg();
cabecalho.setCUF(cUF);
cabecalho.setVersaoDados(NFe.VERSAO_LEIAUTE_NFE);

emissor.ws.h.recepcaonota.NfeRecepcao2Stub.NfeCabecMsgE cabE = new emissor.ws.h.recepcaonota.NfeRecepcao2Stub.NfeCabecMsgE();
cabE.setNfeCabecMsg(cabecalho);

String nfeDadosMsg = getXmlFromFile(arquivoXML);

OMElement el = null;
try {
    el = AXIOMUtil.stringToOM(nfeDadosMsg);
} catch (XMLStreamException e1) {
    e1.printStackTrace();
}
el.build();

NfeRecepcao2Stub.NfeDadosMsg dadosMsg = new NfeRecepcao2Stub.NfeDadosMsg();
dadosMsg.setExtraElement(el);

String urlRecepcaoNota = (String) mapUrlServicos.get(Global.TIPO_AMBIENTE_NFe).get(this.KEY_URL_RECEPCAO_NOTA);
NfeRecepcao2Stub stub = new NfeRecepcao2Stub(urlRecepcaoNota);

NfeRecepcao2Stub.NfeRecepcaoLote2Result result = null;
result = stub.nfeRecepcaoLote2(dadosMsg, cabE);

String strXmlRetorno = result.getExtraElement().toString();
//System.out.println("XML recepcao: " + strXmlRetorno);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
Document doc = factory.newDocumentBuilder().parse(new ByteArrayInputStream(strXmlRetorno.trim().getBytes("UTF8")));
Element root = doc.getDocumentElement();

// Para colocar o xml de retorno no objeto RTetEnviNFe
JAXBContext context = JAXBContext.newInstance("emissor.bean.nfe.consret");
Unmarshaller unmarshaller = context.createUnmarshaller();

TRetEnviNFe retorno = unmarshaller.unmarshal(root, TRetEnviNFe.class).getValue();
return retorno;

}
[/code]

Agora nem eu.
Meu problema era que na hora de consultar o recibo eu estava mandando quebra de linha, o idiota aqui conferiu tudo em relação ao xml da nota em si, mas não mexi no xml para envio do recibo.

Uma duvida galera

qdo fiz os webservices da versão 2.0 , para montar o xml de requisão tanto para serviço, consulta, consultaret, transmissão

é ou era necessario incluir a tag no inicio e no fim de todo o conteudo para poder funcionar

no caso da trasmissão que na mensagem de requisição colocamos a Nota , ex:

<?xml version="1.0" encoding="UTF-8"?><nfeDadosMsg><enviNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"> <idLote>201010438</idLote> <NFe> ................</enviNFe></nfeDadosMsg>

fiquei agora na duvida se é realmente valido colocar na mensagem , pois o erro 588 - deu a entender que tem algo a mais dentro da mensagem de requisição

só que tirando a tag da outros erros mais nebulosos , alguem sabe de algo do tipo ?

Galera seguinte

Fiz alguns teste e cheguei ao seguinte resultado sobre o erro 588

transmiti um nota seguindo o padrao que usava com a nota montada da seguinte maneira

XML - Nota

<?xml version="1.0" encoding="UTF-8"?><enviNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00">
<idLote>201010438</idLote>
<NFe>
<infNFe Id="NFeXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" versao="2.00">
<ide>..............
</NFe>
</enviNFe>

e na transmissão era colocado a tag antes da tag

ao consultar essa nota retornava o erro 588

peguei a msm nota agora removendo as tag e mantendo apenas na transmissão a tag

e não ocorreu mais o erro 588

como está voltado ainda falha no esquema XML ainda preciso confirmar se nao tem outro tipo de erro no meu xml

mais façam esse teste para ver se funciona

Evandro, parou de dar o erro 588 pois vc causou um erro pior q o 588 que é uma falha de scheema
eu não acrescento a tag <nfeDadosMsg> no meu
quem adiciona essa tag é o cliente xml que eu gerei no eclipse, portanto isso depende do metodo de envio do XML ao webservice.
O erro 588 ocorre por que tem quebra de linha no XML e espaço entre as tags
e isso não ocorre só no XML que contém a nota
eu estava com problema pois o XML que eu envio para o webservice RetRecepção (aquele xml que contem o numero do recibo) tinha esses problemas também (quebra de linha e tabs).

Rafael

é realmente nao aparece o 588 pq gerei outro erro rs , mais meu xml nao contem spaço entre as tag e tanto com quebra de linha ou sem quebra de linha o erro 588 se mantem

Você fala de qual XML? você conferiu o que você enviou no serviço nfeRecepcao

depois pra ver o resultado vc manda outro xml no nfeRetRecepcao
esse outro xml a tag raiz é <consReciNFe>
verifique se esse contém quebra de linha e espaço ou tab entre as tags!
tem q ser um linguição, uma linha só.

entao verifiquei e está aparentimente ok

<nfeDadosMsg><consReciNFe versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>2</tpAmb><nRec>351000023126416</nRec></consReciNFe></nfeDadosMsg>

sem quebra de linha e sem espaço

não tive esse problema aqui mas veja:
<consReciNFe versao=“2.00”

tem espaço duplo entre o atributo versao e a tag consReciNFe

tenta tirar isso!
ve se não tem espaço duplo em outros locais, eu arranquei todos!
>

tirei td q tinha de espaço a mais e continuou na msm

manda o seu xml para eu poder comparar , claro se for possivel

o xml de nota eu mandei alguns posts atras
esse dai eu nem armazeno eu gero e envio quando precisa

só pra lembrar a tag <nfeDadosMsg>
eu nunca enviei, o metodo de envio do xml eu mandei alguns posts atras também
eu gerei as classes usando axis2