Oi Pessoal,
Estou precisando de uma força aqui. Já procurei no google e aqui no forum, mas ainda não consegui achar uma solução.
Estou implementando uma solução NFe usando JAX-WS. Já fiz os seguintes passos:
- Baixei e importei o cerficado do Sefaz SP para um keystore.
- Baixei os arquivos WSDL e importei usando wsimport.
O meu cliente usa um certificado A3, mas até ai tudo bem, eu estou conseguindo acessar via SunMSCAPI.
Quando tento acessar o serviço de consulta de status, ocorre o seguinte erro:
javax.xml.ws.WebServiceException: java.net.SocketException: Unexpected end of file from server
at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.readResponseCodeAndMessage(Unknown Source)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(Unknown Source)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(Unknown Source)
at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Unknown Source)
at com.sun.xml.internal.ws.client.Stub.process(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(Unknown Source)
at $Proxy28.nfeStatusServicoNF(Unknown Source)
at Main.main(Main.java:49)
Caused by: java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
at com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl.getResponseCode(Unknown Source)
... 15 more
Abaixo segue o meu codigo:
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.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "c:\\nfe.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "123456");
System.setProperty("javax.net.ssl.keyStoreProvider", "SunMSCAPI");
System.setProperty("javax.net.ssl.keyStoreType", "Windows-MY");
NfeStatusServicoNF status = new ObjectFactory().createNfeStatusServicoNF();
String nfeCabecMsg = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
"<cabecMsg xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"1.02\">" +
"<versaoDados>1.07</versaoDados>" +
"</cabecMsg>";
String nfeDadosMsg = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" +
"<consStatServ xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"1.07\">" +
"<tpAmb>2</tpAmb>" +
"<cUF>35</cUF>" +
"<xServ>STATUS</xServ>" +
"</consStatServ>";
NfeStatusServico service = new NfeStatusServico();
NfeStatusServicoSoap soap = service.getNfeStatusServicoSoap();
String result = soap.nfeStatusServicoNF(nfeCabecMsg, nfeDadosMsg);
System.out.println(result);