Nfe soap nfeRecepcao2

4 respostas
K

Pessoal,

Estou a mais de 2 dias tentando fazer funcionar mas não vai. :(
Meus passos até aqui:
Gerar a Nota, assinei com um certificado A1 e validei.
Verifico no site da SEFAZ e está OK inclusive com a assinatura.

Importei os certificados da SEFAZ para o IE e exportei.
Criei um keystore e joguei tudo lá dentro (3 certificados)

O WS de NfeStatusServico2 está funcionando 100%.
Agora quando vou enviar uma nota fiscal não dá certo e a msg não ajuda muito.
Já fiz funcionar uma vez agora não consigo mais.

WS Status Servico (Funcionando!!!)

public static void main(String[] args) {  
		StringBuilder soap = new StringBuilder();
		soap.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
		soap.append("<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">");
		soap.append("<soap12:Header>");
		soap.append("<nfeCabecMsg xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2\">");
		soap.append("<versaoDados>2.00</versaoDados>");
		soap.append("<cUF>42</cUF>");
		soap.append("</nfeCabecMsg>");
		soap.append("</soap12:Header>");
		soap.append("<soap12:Body>");
		soap.append("<nfeDadosMsg xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2\">");
		soap.append("<consStatServ xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"2.00\">");
		soap.append("<tpAmb>2</tpAmb>");
		soap.append("<cUF>42</cUF>");
		soap.append("<xServ>STATUS</xServ>");
		soap.append("</consStatServ>");
		soap.append("</nfeDadosMsg>");
		soap.append("</soap12:Body>");
		soap.append("</soap12:Envelope>");
		message(soap.toString(), "https://homologacao.nfe.sefazvirtual.rs.gov.br/ws/NfeStatusServico/NfeStatusServico2.asmx");
	}  

	public static void message(String envelope, String urlAddress) {  

		try {  
			MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);  
			SOAPMessage message;  

			try {
				System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");  
				System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");  
				System.setProperty("javax.net.ssl.keyStore", "c:/dotum/certificados/cliente.pfx");  // certificado do cliente
				System.setProperty("javax.net.ssl.keyStorePassword", "123456");  // senha do certificado do cliente

				System.setProperty("javax.net.ssl.trustStoreType", "JKS");  
				System.setProperty("javax.net.ssl.trustStore", "c:/dotum/certificados/dotum.jks");

				MimeHeaders header = new MimeHeaders();  
				header.addHeader("Content-Type", "application/soap+xml");  

				message = factory.createMessage(header, new ByteArrayInputStream(envelope.getBytes()));  
				SOAPConnection con = SOAPConnectionFactory.newInstance().createConnection();  
				message.getMimeHeaders().addHeader("SOAPAction", "http://www.portalfiscal.inf.br/nfe/wsdl/NfeRecepcao2/nfeRecepcaoLote2");
				
				URL url = new URL(urlAddress);  
				System.out.println("Message enviada \n"+message.toString());  
				SOAPMessage res = con.call(message, url);  

				ByteArrayOutputStream in = new ByteArrayOutputStream();  
				message.writeTo(in);  
				System.out.println("in :\n"+in.toString());  

				ByteArrayOutputStream out = new ByteArrayOutputStream();  
				res.writeTo(out);  
				System.out.println("out :\n"+desnormalizar(out.toString()));  

			} catch (IOException ex) {  
				System.out.println("" + ex.getMessage());  
			} finally {  
			}  
		} catch (SOAPException ex) {  
			System.out.println("" + ex.getMessage());  
		}  
	}  

	public static String desnormalizar(String texto) {  
		return texto.replace("<", "<").replace(">", ">").replace("''", "\"").replace(" ", "\r");  
	}

Agora o código que não funciona nem com reza brava.

public static void main(String[] args) {  
		try {
			StringBuilder soap = new StringBuilder();
			soap.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
			soap.append("<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">");
			soap.append("<soap12:Header>");
			soap.append("<nfeCabecMsg xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/NfeRecepcao2\">");
			soap.append("<versaoDados>2.00</versaoDados>");
			soap.append("<cUF>11</cUF>");
			soap.append("</nfeCabecMsg>");
			soap.append("</soap12:Header>");
			soap.append("<soap12:Body>");		
			soap.append("<nfeDadosMsg xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/NfeRecepcao2\">");

			soap.append( << aqui vai o XML da NFE assinada >>> );


			soap.append("</nfeDadosMsg>");		
			soap.append("</soap12:Body>");
			soap.append("</soap12:Envelope>");
			metodo2(soap.toString(), "https://homologacao.nfe.sefazvirtual.rs.gov.br/ws/nfeRecepcao/nfeRecepcao2.asmx?op=nfeRecepcaoLote2");
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	public static void metodo2(String envelope, String urlAddress) {  

		try {  
			MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);  
			SOAPMessage message;  

			try {
				Properties properties = System.getProperties();  
				properties.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");  
				properties.setProperty("javax.net.ssl.keyStoreType", "PKCS12");    
				properties.setProperty("javax.net.ssl.keyStore","c:/dotum/certificados/cliente.pfx");    // certificado do cliente
				properties.setProperty("javax.net.ssl.keyStorePassword", "123456"); // senha do certificado do cliente
				
				properties.setProperty("javax.net.ssl.trustStoreType", "JKS");    
				properties.setProperty("javax.net.ssl.trustStore", "c:/dotum/certificados/dotum.jks");  
				properties.setProperty("javax.net.ssl.trustStorePassword", "1234596");  
				properties.setProperty("com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump", "true");  
				//properties.setProperty("javax.net.debug", "all"); - for debug

				MimeHeaders header = new MimeHeaders();  
				header.addHeader("Content-Type", "application/soap+xml");  

				message = factory.createMessage(header, new ByteArrayInputStream(envelope.getBytes()));  
				SOAPConnection con = SOAPConnectionFactory.newInstance().createConnection();  

				URL url = new URL(urlAddress);  
				System.out.println("Message enviada \n"+message.toString());  
				SOAPMessage res = con.call(message, url);  

				ByteArrayOutputStream in = new ByteArrayOutputStream();  
				message.writeTo(in);  
				System.out.println("in :\n"+in.toString());  

				ByteArrayOutputStream out = new ByteArrayOutputStream();  
				res.writeTo(out);  
				System.out.println("out :\n"+desnormalizar(out.toString()));  

			} catch (IOException ex) {  
				System.out.println("" + ex.getMessage());  
			} finally {  
			}  
		} catch (SOAPException ex) {  
			System.out.println("" + ex.getMessage());  
		}  
	}  

	public static String desnormalizar(String texto) {  
		return texto.replace("<", "<").replace(">", ">").replace("''", "\"").replace(" ", "\r");  
	}

Agora o erro:

Message enviada com.sun.xml.internal.messaging.saaj.soap.ver1_2.Message1_2Impl@e24e2a 05/03/2011 10:51:29 com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection post SEVERE: SAAJ0008: Bad Response; Bad Request java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (400Bad Request

Ajudem uma alma... Juro que se conseguir vou colocar um tutorial passo a passo pra comunidade. :D

4 Respostas

Z

qual o erro que dá?

K

Message enviada
com.sun.xml.internal.messaging.saaj.soap.ver1_2.Message1_2Impl@e24e2a
05/03/2011 10:51:29 com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection post
SEVERE: SAAJ0008: Bad Response; Bad Request
java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (400Bad Request

Z

Message enviada
com.sun.xml.internal.messaging.saaj.soap.ver1_2.Message1_2Impl@e24e2a
05/03/2011 10:51:29 com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection post
SEVERE: SAAJ0008: Bad Response; Bad Request
java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (400Bad Request

Cara, olhando por cima, acho que o problema é sua URL

A correta é:
https://homologacao.nfe.sefazvirtual.rs.gov.br/ws/nfeRecepcao/nfeRecepcao2.asmx

e não:
https://homologacao.nfe.sefazvirtual.rs.gov.br/ws/nfeRecepcao/nfeRecepcao2.asmx[color=red]?op=nfeRecepcaoLote2[/color]

K

Pessoal,

Descobri o erro: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

Após dois dias de luta, o problema é no cabeçalho do XML.

No XML da minha nota tenho a TAG inicial abaixo:

Quando jogar isso dentro da msg soap ferrava com tudo.
Só tirei isso ai e funcionou.

Pelo menos agora sei que não é problema com certificados/assinaturas.

Ainda tenho outro problemas, mas pelo menos avancei.

Criado 4 de março de 2011
Ultima resposta 6 de mar. de 2011
Respostas 4
Participantes 2