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