Eu tenho o codigo abaixo que funciona 100% com o PR, mas da erro com o MS… sendo que ambos tem suporte para SOAP 1.2 e versao 1.07:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.StringReader;
import java.util.Iterator;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.rpc.ParameterMode;
import javax.xml.soap.MimeHeader;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class TesteNFe {
static final String ELEMENT_CABECMSG = "nfeCabecMsg";
static final String ELEMENT_CABECMSG_VERSAO = "versao";
static final String ELEMENT_CABECMSG_VERSAODADOS = "versaoDados";
//
static final String ELEMENT_DADOSMSG = "nfeDadosMsg";
static final String ELEMENT_RETCODIGO = "cStat";
static final String ELEMENT_RETMOTIVO = "xMotivo";
static final String ELEMENT_RETINFREC = "infRec"; // retorno de envLote
static final String ELEMENT_RETNREC = "nRec"; // retorno de envLote
static final String ELEMENT_RETPROTNFE = "protNFe"; // retorno de retLote
static final String ELEMENT_RETINFPROT = "infProt"; // retorno de retLote
static final String ELEMENT_RETNPROT = "nProt"; // retorno de retLote
public static final String PREFIXOMSGERRO = "ERRO FISCAL ";
public static final String PREFIXOMSGEMPROC = "EM PROC. ";
/*****************************************************************************
* Consulta Status de Servico
****************************************************************************/
// Elements para consulta de status de servico
static final String ELEMENT_CONSSTATSERV_FP01 = "consStatServ";
static final String ELEMENT_CONSSTATSERV_FP02 = "versao";
static final String ELEMENT_CONSSTATSERV_FP03 = "tpAmb";
static final String ELEMENT_CONSSTATSERV_FP04 = "cUF";
static final String ELEMENT_CONSSTATSERV_FP05 = "xServ";
// Codigo de Retorno de Processamento OK
static final String RET_CONSSTATSERV_NOERRO = "107";
/*****************************************************************************
* Envio de Lote NF-e
****************************************************************************/
static final String ELEMENT_ENVLOTE_FP01 = "enviNFe";
static final String ELEMENT_ENVLOTE_FP02 = "versao";
static final String ELEMENT_ENVLOTE_FP03 = "idLote";
static final String ELEMENT_ENVLOTE_FP04 = "NFe";
// Codigo de Retorno de Processamento OK
static final String RET_ENVLOTE_NOERRO = "103";
/*****************************************************************************
* Retorno de Recepção e Processamento de Lote NF-e
****************************************************************************/
static final String ELEMENT_RETLOTE_FP01 = "consReciNFe";
static final String ELEMENT_RETLOTE_FP02 = "versao";
static final String ELEMENT_RETLOTE_FP03 = "tpAmb";
static final String ELEMENT_RETLOTE_FP04 = "nRec";
/*****************************************************************************
* Cancelamento de NF-e
****************************************************************************/
static final String ELEMENT_CANCNFE_CP01 = "cancNFe";
static final String ELEMENT_CANCNFE_CP02 = "versao";
static final String ELEMENT_CANCNFE_CP03 = "infCanc";
static final String ELEMENT_CANCNFE_CP04 = "Id";
static final String ELEMENT_CANCNFE_CP05 = "tpAmb";
static final String ELEMENT_CANCNFE_CP06 = "xServ";
static final String ELEMENT_CANCNFE_CP07 = "chNFe";
static final String ELEMENT_CANCNFE_CP08 = "nProt";
static final String ELEMENT_CANCNFE_CP09 = "xJust";
static final String ELEMENT_CANCNFE_CP10 = "Signature";
// Codigo de Retorno de Processamento OK
static final String RET_RETLOTE_NOERRO = "104";
static final String RET_RETLOTE_NOERROPROTNFE = "100";
static final String RET_RETLOTE_EMPROC = "105";
static final String RET_CANCNFE_NOERRO = "101";
//
boolean debug;
//
public static void main(final String[] args) {
try {
//System.setProperty("javax.net.debug", "ssl");
//
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
// Keystore com o certificado do cliente
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.setProperty("javax.net.ssl.keyStore", "/sistemas/emonitor/instalacoes/480/1/cert/lima2.pfx");
System.setProperty("javax.net.ssl.keyStorePassword", "MINHASENHA");
String siglaUF = "MS", uf = "", url = "", versao = "", versaoDados = "";
if (siglaUF.equals("PR")) {
uf = "41";
url = "https://homologacao.nfe.fazenda.pr.gov.br/NFENWebServices/services/nfeStatusServicoNF";
versaoDados = "1.07";
versao = "1.07";
}
/*
else if (siglaUF.equals("MT")) {
uf = "51";
url = "https://homologacao.sefaz.mt.gov.br/nfews/NfeStatusServico";
versaoDados = "1.02";
versao = "1.02";
}
*/
else if (siglaUF.equals("MS")) {
uf = "50";
url = "https://homologacao.nfe.ms.gov.br/homologacao/services/NfeStatusServico";
versaoDados = "1.07";
versao = "1.07";
}
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "/sistemas/emonitor/UFs/" + siglaUF + "/chavepub.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "MINHASENHA");
String xmlnsCabecMsg = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico";
String xmlnsDadosMsg = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico";
String xmlnsDadosMsgElement = "http://www.portalfiscal.inf.br/nfe";
String tpAmb = "2", xServ = "STATUS";
String action = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico/nfeStatusServicoNF";
String[] msgErro = new String[]{""};
consStatServ(xmlnsCabecMsg, uf, versaoDados, xmlnsDadosMsg, xmlnsDadosMsgElement, versao, tpAmb, xServ, url, action, msgErro);
System.out.println(msgErro[0]);
} catch (Exception e) {
e.printStackTrace();
}
}
static void printSOAPMessage(String obs, SOAPMessage msg) {
try {
System.out.println(obs);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
msg.writeTo(baos);
String str = baos.toString();
for (Iterator i = msg.getMimeHeaders().getAllHeaders(); i.hasNext();) {
MimeHeader header = (MimeHeader) i.next();
String name = header.getName();
String value = header.getValue();
System.out.println(name + " = " + value);
}
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}
}
static Call getCallAxis(String url, String action) throws Exception {
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName(getActionAxis(action));
return call;
}
static String getActionAxis(String action) {
return action.substring(action.lastIndexOf("/")+1);
}
static String getCabecMsgAxis(String xmlnsCabecMsg, String uf, String versao, String versaoDados) {
return
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<cabecMsg xmlns=\"" + xmlnsCabecMsg + "\" versao=\"" + versao + "\"> " +
"<versaoDados>" + versaoDados + "</versaoDados>" +
"</cabecMsg>";
}
static String invokeAxis(Call call, String cabecMsg, String dadosMsg) throws Exception {
call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP12_CONSTANTS);
call.setReturnType(XMLType.XSD_STRING);
Object[] params = new Object[] {cabecMsg,dadosMsg};
call.addParameter("nfeCabecMsg", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("nfeDadosMsg", XMLType.XSD_STRING, ParameterMode.IN);
return (String) call.invoke(params);
}
static public boolean consStatServ(
String xmlnsCabecMsg,
String uf, String versaoDados,
String xmlnsDadosMsg, String xmlnsDadosMsgElement,
String versao, String tpAmb, String xServ,
String url, String action,
String[] msgErro
) throws Exception {
final String RET_CONSSTATSERV_NOERRO = "107";
//
Call call = getCallAxis(url,action);
String cabecMsg = getCabecMsgAxis(xmlnsCabecMsg,uf,versao,versaoDados);
String dadosMsg =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<consStatServ xmlns=\"" + xmlnsDadosMsgElement + "\" versao=\"" + versao + "\">" +
"<tpAmb>" + tpAmb + "</tpAmb>" +
"<cUF>" + uf + "</cUF>" +
"<xServ>" + xServ + "</xServ>" +
"</consStatServ>";
System.out.println(cabecMsg);
System.out.println(dadosMsg);
String response = invokeAxis(call, cabecMsg, dadosMsg);
printSOAPMessage("REQUEST..........\n",call.getMessageContext().getRequestMessage());
System.out.println("RESPONSE.......\n"+ response);
Document doc = createDocumentFromString(response);
return processResponse(doc,msgErro,RET_CONSSTATSERV_NOERRO);
}
public static Document createDocumentFromString(String strXML)
throws ParserConfigurationException, IOException, SAXException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(strXML)));
return doc;
}
static boolean processResponse(Document response, String[] msgErro, String CodRetOK)
throws SOAPException {
return processResponse(response, null, msgErro, CodRetOK);
}
static boolean processResponse(
Document response,
String[] nRec, String[] msgErro, String CodRetOK)
// nRec (envLote), nProt (retLote), nProtCanc (cancNFe)
throws SOAPException {
//
boolean Result = false;
org.w3c.dom.Node bodyelem;
NodeList it1, it2;
String tag, msgErroAux = "";
//
it1 = response.getChildNodes();
bodyelem = (org.w3c.dom.Node) it1.item(0);
//
it1 = bodyelem.getChildNodes();
//
boolean isCancNFe = CodRetOK.equals(RET_CANCNFE_NOERRO);
if (isCancNFe) {
bodyelem = (org.w3c.dom.Node) it1.item(0);
it1 = bodyelem.getChildNodes();
}
//
int i = 0, lenit1 = it1.getLength();
while (i < lenit1) {
bodyelem = (org.w3c.dom.Node) it1.item(i);
tag = bodyelem.getNodeName();
if (tag.equals(ELEMENT_RETCODIGO)) {
Result = bodyelem.getTextContent().equals(CodRetOK);
if (!Result && bodyelem.getTextContent().equals(RET_RETLOTE_EMPROC)) {
msgErroAux = "(" + PREFIXOMSGEMPROC + bodyelem.getTextContent() + ") ";
}
}
else if (tag.equals(ELEMENT_RETMOTIVO))
msgErro[0] = bodyelem.getTextContent();
else if (tag.equals(ELEMENT_RETINFREC)) {
it2 = bodyelem.getChildNodes();
int j = 0, lenit2 = it2.getLength();
while (j < lenit2) {
bodyelem = (org.w3c.dom.Node) it2.item(j);
tag = bodyelem.getNodeName();
if (nRec != null && tag.equals(ELEMENT_RETNREC)) {
nRec[0] = bodyelem.getTextContent();
break;
}
j++;
}
}
else if (isCancNFe && tag.equals(ELEMENT_CANCNFE_CP08))
nRec[0] = bodyelem.getTextContent();
else if (Result && // lote foi processado, verificar protocolo
tag.equals(ELEMENT_RETPROTNFE)) {
it2 = bodyelem.getChildNodes();
bodyelem = (org.w3c.dom.Node) it2.item(0);
tag = bodyelem.getNodeName();
if (tag.equals(ELEMENT_RETINFPROT)) {
it2 = bodyelem.getChildNodes();
int j = 0, lenit2 = it2.getLength();
while (j < lenit2) {
bodyelem = (org.w3c.dom.Node) it2.item(j);
tag = bodyelem.getNodeName();
if (tag.equals(ELEMENT_RETCODIGO)) {
if (!bodyelem.getTextContent().equals(RET_RETLOTE_NOERROPROTNFE))
msgErroAux = "(" + PREFIXOMSGERRO + bodyelem.getTextContent() + ") ";
}
else if (tag.equals(ELEMENT_RETMOTIVO)) {
msgErro[0] = bodyelem.getTextContent();
}
else if (nRec != null && tag.equals(ELEMENT_RETNPROT)) {
nRec[0] = bodyelem.getTextContent(); // nProt
}
j++;
}
}
}
//
i++;
}
msgErro[0] = msgErroAux + msgErro[0];
return Result;
}
}
Abaixo o erro que ocorre ao chamar o "invoke" para o MS:
init:
deps-jar:
Compiling 1 source file to /sistemas/nbprojects/emonitor/build/classes
compile-single:
run-single:
<?xml version="1.0" encoding="UTF-8"?><cabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico" versao="1.07"> <versaoDados>1.07</versaoDados></cabecMsg>
<?xml version="1.0" encoding="UTF-8"?><consStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.07"><tpAmb>2</tpAmb><cUF>50</cUF><xServ>STATUS</xServ></consStatServ>
AxisFault
faultCode: {http://www.w3.org/2003/05/soap-envelope}Sender
faultSubcode:
faultString: Cannot find dispatch method for {}nfeStatusServicoNF
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:Cannot find dispatch method for {}nfeStatusServicoNF
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1774)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2930)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
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 emonitor.view.testes.TesteNFe.invokeAxis(TesteNFe.java:179)
at emonitor.view.testes.TesteNFe.consStatServ(TesteNFe.java:202)
at emonitor.view.testes.TesteNFe.main(TesteNFe.java:133)
{http://xml.apache.org/axis/}hostname:edilmar.intersite.com.br
Cannot find dispatch method for {}nfeStatusServicoNF
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1774)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2930)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
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 emonitor.view.testes.TesteNFe.invokeAxis(TesteNFe.java:179)
at emonitor.view.testes.TesteNFe.consStatServ(TesteNFe.java:202)
at emonitor.view.testes.TesteNFe.main(TesteNFe.java:133)
CONSTRUÍDO COM SUCESSO (tempo total: 6 segundos)