Pessoal , estou fazendo uma applet para consultas de NFe porem quando vou chamar o WebServices recebo o seguinte erro:
org.apache.axis2.AxisFault: Connection refused: connect
Segue o método que estou usando :
[code]public String consulta(String chave) {
try {
String codigoDoEstado = chave.substring(0,2);
// RIO DE JANEIRO
URL url = new URL(HOMOLOGACAO_CONSULTA_SP);
//System.setProperty("http.proxyPort", "80");
/**
* Xml de Consulta.
*/
StringBuilder xml = new StringBuilder();
xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
.append("<consSitNFe versao=\"2.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">")
.append("<tpAmb>"+AMBIENTE+"</tpAmb>")
.append("<xServ>CONSULTAR</xServ>")
.append("<chNFe>")
.append(chave)
.append("</chNFe>")
.append("</consSitNFe>");
OMElement ome = AXIOMUtil.stringToOM(xml.toString());
NfeConsulta2Stub.NfeDadosMsg dadosMsg = new NfeConsulta2Stub.NfeDadosMsg();
dadosMsg.setExtraElement(ome);
NfeConsulta2Stub.NfeCabecMsg nfeCabecMsg = new NfeConsulta2Stub.NfeCabecMsg();
/**
* Código do Estado.
*/
nfeCabecMsg.setCUF(codigoDoEstado);
/**
* Versao do XML
*/
nfeCabecMsg.setVersaoDados("2.00");
NfeConsulta2Stub.NfeCabecMsgE nfeCabecMsgE = new NfeConsulta2Stub.NfeCabecMsgE();
nfeCabecMsgE.setNfeCabecMsg(nfeCabecMsg);
NfeConsulta2Stub stub = new NfeConsulta2Stub(url.toString());
NfeConsulta2Stub.NfeConsultaNF2Result result = stub.nfeConsultaNF2(dadosMsg, nfeCabecMsgE);
String resposta = result.getExtraElement().toString();
System.out.println(resposta);
return resposta;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} [/code]
Eu tenho também a seguinte forma de obter o certificado da maquina do usuario mas não sei como setar isso para a conexção …
Algue já fez algo parecido ?
X509Certificate cert =
OnCert.funcCertificadoSelecionado(nomeCert,
new String(senhaCert));
Olá jcarlos78,
Cara, tenta fazer dessa forma.
public static String enviar(String envelope, String urlAddress) {
String retorno = "";
try {
MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
SOAPMessage message;
//setar certificados para conexão
try {
MimeHeaders header = new MimeHeaders();
header.addHeader("Content-Type", "application/soap+xml");
message = factory.createMessage(header, new ByteArrayInputStream(envelope.getBytes()));
SOAPConnection con = SOAPConnectionFactory.newInstance().createConnection();
System.out.println("urlAddress: '" + urlAddress + "'");
URL url = new URL(urlAddress);
System.out.println("Message enviada \n" + message);
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" + out.toString());
retorno = out.toString();
} catch (IOException ex) {
ex.getMessage();
}
} catch (SOAPException ex) {
ex.getMessage();
}
return retorno;
}
public String consultaNfe2(String mensagem, String enderecoServidor) {
StringBuffer soapMessage = new StringBuffer();
soapMessage.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
.append("<s:Envelope xmlns:s=\"http://www.w3.org/2003/05/soap-envelope\">")
.append("<s:Header>")
.append("<nfeCabecMsg xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2\">")
.append("<cUF>" + Utilitario.pegaUfCliente() + "</cUF>")
.append("<versaoDados>2.00</versaoDados>")
.append("</nfeCabecMsg>")
.append("</s:Header>")
.append("<s:Body xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">")
.append(mensagem)
.append("</s:Body>")
.append("</s:Envelope>");
return enviar(soapMessage.toString(), enderecoServidor);
}
public void ConsultaNfe(String chave, String enderecoServidor){
String idNfe = chave.substring(25, 34);
String nfeDados = "<nfeDadosMsg xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2\">"
+ "<consSitNFe versao=\"2.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">"
+ "<tpAmb>" + Utilitario.pegaTipoAmbiente() + "</tpAmb>"
+ "<xServ>CONSULTAR</xServ>"
+ "<chNFe>" + chave + "</chNFe>"
+ "</consSitNFe>"
+ "</nfeDadosMsg>";
log.info("Dados: " + nfeDados + "\n");
String retornoProc = null;
try {
retornoProc = consultaNfe2(nfeDados, enderecoServidor);
System.out.println("=================================================================");
System.out.println(retornoProc);
System.out.println("=================================================================");
} catch (Throwable e1) {
e1.printStackTrace();
}
}
e para invocar
ConsultaNfe(CHAVE, ENDERECO_SERVIDOR);
Qualquer coisa estou a disposição.
Vlw Mackrophus,
Acabei resolvendo meu probelma mudando :
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.setProperty("javax.net.ssl.keyStore", caminhoDoCertificadoDoCliente);
System.setProperty("javax.net.ssl.keyStorePassword", senhaDoCertificadoDoCliente);
Por:
//Utilizando Repositorio do Windows
System.setProperty("javax.net.ssl.keyStoreProvider", "SunMSCAPI");
System.setProperty("javax.net.ssl.keyStoreType", "Windows-MY");
System.setProperty("javax.net.ssl.keyStoreAlias", xcertificado); //alias do certificado
System.setProperty("javax.net.ssl.keyStorePassword", senhaDoCertificado);
Tive ajuda do samuk.exe@hotmail.com no forum Javac.com.br
Segue o código completo que estou usando agora :
public String consulta(String chave) {
String resposta = null;
try {
String codigoDoEstado = chave.substring(0,2);
// SÃO PAULO
URL url = new URL(HOMOLOGACAO_CONSULTA_SP);
//System.setProperty("http.proxyPort", "8080");
//System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");
/**
* Informações do Certificado Digital.
*/
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
//System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.clearProperty("javax.net.ssl.keyStore");
System.clearProperty("javax.net.ssl.keyStorePassword");
System.clearProperty("javax.net.ssl.trustStore");
System.setProperty("javax.net.ssl.keyStoreProvider", "SunMSCAPI");
System.setProperty("javax.net.ssl.keyStoreType", "Windows-MY");
System.setProperty("javax.net.ssl.keyStoreAlias", SESSAO.getAlias());
System.setProperty("javax.net.ssl.keyStorePassword", new String(SESSAO.getSenhaCert()));
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "C:/app/a1/NFeCacerts");
/**
* Xml de Consulta.
*/
StringBuilder xml = new StringBuilder();
xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
.append("<consSitNFe versao=\"2.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">")
.append("<tpAmb>"+AMBIENTE+"</tpAmb>")
.append("<xServ>CONSULTAR</xServ>")
.append("<chNFe>")
.append(chave)
.append("</chNFe>")
.append("</consSitNFe>");
OMElement ome = AXIOMUtil.stringToOM(xml.toString());
NfeConsulta2Stub.NfeDadosMsg dadosMsg = new NfeConsulta2Stub.NfeDadosMsg();
dadosMsg.setExtraElement(ome);
NfeConsulta2Stub.NfeCabecMsg nfeCabecMsg = new NfeConsulta2Stub.NfeCabecMsg();
/**
* Código do Estado.
*/
nfeCabecMsg.setCUF(codigoDoEstado);
/**
* Versao do XML
*/
nfeCabecMsg.setVersaoDados("2.00");
NfeConsulta2Stub.NfeCabecMsgE nfeCabecMsgE = new NfeConsulta2Stub.NfeCabecMsgE();
nfeCabecMsgE.setNfeCabecMsg(nfeCabecMsg);
NfeConsulta2Stub stub = new NfeConsulta2Stub(url.toString());
NfeConsulta2Stub.NfeConsultaNF2Result result = stub.nfeConsultaNF2(dadosMsg, nfeCabecMsgE);
resposta = result.getExtraElement().toString();
System.out.println(resposta);
return resposta;
} catch (MalformedURLException | XMLStreamException | RemoteException e) {
this.jTextPane1.setText(e.getMessage());
this.jTabbedPane1.setSelectedIndex(4);
//e.printStackTrace();
} finally {
this.jTextPane1.setText(resposta);
this.jTabbedPane1.setSelectedIndex(4);
}
return resposta;
}
A unica coisa que ficou faltando eu resolver é como obter o arquivo NFeCacerts dos estados, usando minha applet sem usar um caminho absouto da maquina mas isso acho melhor tratar em outra thread.
Vlw pela ajuda pessoal.
Blz brow, só coloca o post como resolvido, por favor.
Faz um tempo que eu tava tentando descobrir como fazer isso mudar o tópico para [RESOLVIDO] … rs
Só editar o primeiro post … nossa agora parece até bobo mas não foi tão logico até eu descobrir . rs …
Mackrophus, feito 