From 5ac769ad02af052ba3dbed016b178de7f35cca60 Mon Sep 17 00:00:00 2001 From: Alyson Date: Fri, 6 May 2016 14:00:29 -0300 Subject: [PATCH] =?UTF-8?q?Remo=C3=A7=C3=A3o=20do=20inputStream=20para=20n?= =?UTF-8?q?=C3=A3o=20dar=20mais=20o=20erro=20com.sun.org.apache.xerces.int?= =?UTF-8?q?ernal.impl.io.MalformedByteSequenceException:=20Byte=20inv?= =?UTF-8?q?=C3=A1lido=202=20da=20sequ=C3=AAncia=20UTF-8=20do=20byte=203.?= =?UTF-8?q?=20Esse=20problema=20normalmente=20est=C3=A1=20relacionado=20a?= =?UTF-8?q?=20caracteres=20especiais=20ou=20acentuados=20dentro=20do=20XML?= =?UTF-8?q?.=20@see=20http://goo.gl/42aPOh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nfe310/assinatura/AssinaturaDigital.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/fincatto/nfe310/assinatura/AssinaturaDigital.java b/src/main/java/com/fincatto/nfe310/assinatura/AssinaturaDigital.java index 6121f187c..7ebc42dbd 100755 --- a/src/main/java/com/fincatto/nfe310/assinatura/AssinaturaDigital.java +++ b/src/main/java/com/fincatto/nfe310/assinatura/AssinaturaDigital.java @@ -1,9 +1,6 @@ package com.fincatto.nfe310.assinatura; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; import java.security.KeyStore; import java.security.Provider; import java.security.cert.X509Certificate; @@ -26,6 +23,7 @@ import javax.xml.crypto.dsig.keyinfo.X509Data; import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec; import javax.xml.crypto.dsig.spec.TransformParameterSpec; +import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; @@ -42,6 +40,7 @@ import org.w3c.dom.NodeList; import com.fincatto.nfe310.NFeConfig; +import org.xml.sax.InputSource; public class AssinaturaDigital { private static final String C14N_TRANSFORM_METHOD = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"; @@ -96,8 +95,15 @@ public String assinarDocumento(final String conteudoXml) throws Exception { final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilderFactory.setNamespaceAware(true); - try (InputStream inputStreamXml = IOUtils.toInputStream(conteudoXml)) { - final Document document = documentBuilderFactory.newDocumentBuilder().parse(inputStreamXml); + // Remoção do inputStream para não dar mais o erro + // com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Byte inválido 2 da sequência UTF-8 do byte 3. + // Esse problema normalmente está relacionado a caracteres especiais ou acentuados dentro do XML. + // @see http://goo.gl/42aPOh + try (StringReader stringReader = new StringReader(conteudoXml)) { + InputSource inputSource = new InputSource(stringReader); + DocumentBuilder docBuilder = documentBuilderFactory.newDocumentBuilder(); + final Document document = docBuilder.parse(inputSource); + //final Document document = documentBuilderFactory.newDocumentBuilder().parse(inputStreamXml); for (final String elementoAssinavel : AssinaturaDigital.ELEMENTOS_ASSINAVEIS) { final NodeList elements = document.getElementsByTagName(elementoAssinavel);