Estou com um problema na hora de fazer a comunicação com um webservice utilizando um certificado A3.
Executei todo o processo utilizando um certificado A1 e funciona perfeitamente, mas quando tento utilizar um A3 ele retorna um erro no momento da comunicação.
Estou usando uma leitora GemPC Twin e um cartão da Certisign.
Arquivo do provider:
name=SmartCard
library=C:/WINDOWS/system32/aetpkss1.dll
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
if (token) {
Provider p = new sun.security.pkcs11.SunPKCS11(CTePropriedade.getInstance().getPropriedade("cert.token"));
Security.addProvider(p);
System.setProperty("javax.net.ssl.keyStoreType", CTePropriedade.getInstance().getPropriedade("cert.tipo"));
System.setProperty("javax.net.ssl.keyStore", "NONE");
System.setProperty("javax.net.ssl.keyStoreProvider", "SunPKCS11-SmartCard");
System.setProperty("javax.net.ssl.keyStorePassword", CTePropriedade.getInstance().getPropriedade("cert.senha"));
} else {
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
System.setProperty("javax.net.ssl.keyStoreType", CTePropriedade.getInstance().getPropriedade("cert.tipo"));
System.setProperty("javax.net.ssl.keyStore", CTePropriedade.getInstance().getPropriedade("cert.caminho"));
System.setProperty("javax.net.ssl.keyStorePassword", CTePropriedade.getInstance().getPropriedade("cert.senha"));
}
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", CTePropriedade.getInstance().getPropriedade("keystore.caminho"));
System.setProperty("javax.net.ssl.trustStorePassword", CTePropriedade.getInstance().getPropriedade("keystore.senha"));
} catch (Exception e) {
e.printStackTrace();
}
Fragmento do código da classe de comunicação:
CteStatusServico statusServico = new CteStatusServicoLocator();
CteStatusServicoSoap12 serv = statusServico.getCteStatusServicoSoap12();
CteCabecMsg cteCabecMsg = new CteCabecMsg(CTePropriedade.getInstance().getPropriedade("uf.id"), CTePropriedade
.getInstance().getPropriedade("xml.versao"));
SOAPHeaderElement element = new SOAPHeaderElement("http://www.portalfiscal.inf.br/cte/wsdl/CteStatusServico",
"cteCabecMsg", cteCabecMsg);
((Stub) serv).setHeader(element);
CteStatusServicoCTResult resultado = serv.cteStatusServicoCT(cteDadosMsg);
Na última linha desse fragmento de código está ocorrendo o erro, exatamente no momento em que eu tento pegar o retorno da comunicação.
Erro:
org.xml.sax.SAXException: Processing instructions are not allowed within SOAP messages
AxisFault
faultCode: {http://www.w3.org/2003/05/soap-envelope}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXException: Processing instructions are not allowed within SOAP messages
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException: Processing instructions are not allowed within SOAP messages
at org.apache.axis.encoding.DeserializationContext.startDTD(DeserializationContext.java:1161)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.doctypeDecl(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.doctypeDecl(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at br.inf.portalfiscal.www.cte.wsdl.CteStatusServico.CteStatusServicoSoap12Stub.cteStatusServicoCT(CteStatusServicoSoap12Stub.java:190)
at br.com.wesleybez.sped.cte.comandos.StatusServicoComando.execute(StatusServicoComando.java:76)
at br.com.wesleybez.sped.cte.PrincipalCTe.main(PrincipalCTe.java:124)
at br.com.wesleybez.sped.cte.testes.TesteWebServices.main(TesteWebServices.java:39)
{http://xml.apache.org/axis/}hostname:ares-e22c3955fc
org.xml.sax.SAXException: Processing instructions are not allowed within SOAP messages
at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:701)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at br.inf.portalfiscal.www.cte.wsdl.CteStatusServico.CteStatusServicoSoap12Stub.cteStatusServicoCT(CteStatusServicoSoap12Stub.java:190)
at br.com.wesleybez.sped.cte.comandos.StatusServicoComando.execute(StatusServicoComando.java:76)
at br.com.wesleybez.sped.cte.PrincipalCTe.main(PrincipalCTe.java:124)
at br.com.wesleybez.sped.cte.testes.TesteWebServices.main(TesteWebServices.java:39)
Caused by: org.xml.sax.SAXException: Processing instructions are not allowed within SOAP messages
at org.apache.axis.encoding.DeserializationContext.startDTD(DeserializationContext.java:1161)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.doctypeDecl(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.doctypeDecl(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
… 12 more
Lembrando que com o certificado A1, tudo funciona perfeitamente.
Se alguem puder me ajudar fico grato.