NFe+Axis 1.4 => Consulta de Status de Serviço => funciona no PR e nao funciona no MS

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)

Abaixo o XML de cabeçalho e de dados em SOAP 1.2 para o MS (com versão 1.07):

<?xml version=“1.0” encoding=“UTF-8”?>
<cabecMsg versao=“1.07” xmlns=“http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico”>
<versaoDados>1.07</versaoDados>
</cabecMsg>
<?xml version=“1.0” encoding=“UTF-8”?>
<consStatServ versao=“1.07” xmlns=“http://www.portalfiscal.inf.br/nfe”>
<tpAmb>2</tpAmb>
<cUF>50</cUF>
<xServ>STATUS</xServ>
</consStatServ>

================

Abaixo o XML de cabeçalho e de dados em SOAP 1.2 para o PR (com versão 1.07):

<?xml version=“1.0” encoding=“UTF-8”?>
<cabecMsg versao=“1.07” xmlns=“http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico”>
<versaoDados>1.07</versaoDados>
</cabecMsg>
<?xml version=“1.0” encoding=“UTF-8”?>
<consStatServ versao=“1.07” xmlns=“http://www.portalfiscal.inf.br/nfe”>
<tpAmb>2</tpAmb>
<cUF>41</cUF>
<xServ>STATUS</xServ>
</consStatServ>

================

Abaixo o XML SOAP completo de REQUEST para o PR:

<?xml version=“1.0” encoding=“UTF-8”?>
<soapenv:Envelope xmlns:soapenv=“http://www.w3.org/2003/05/soap-envelope” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>
<soapenv:Body>
<nfeStatusServicoNF soapenv:encodingStyle=“http://www.w3.org/2003/05/soap-encoding”>
<nfeCabecMsg xsi:type=“xsd:string”><?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></nfeCabecMsg>
<nfeDadosMsg xsi:type=“xsd:string”><?xml version="“1.0"” encoding="“UTF-8"”?><consStatServ xmlns="“http://www.portalfiscal.inf.br/nfe”" versao="“1.07"”><tpAmb>2</tpAmb><cUF>41</cUF><xServ>STATUS</xServ></consStatServ></nfeDadosMsg>
</nfeStatusServicoNF>
</soapenv:Body>
</soapenv:Envelope>

================

Abaixo o XML SOAP completo de RESPONSE do PR:

<?xml version=“1.0” encoding=“utf-8”?>
<retConsStatServ versao=“1.07” xmlns=“http://www.portalfiscal.inf.br/nfe”>
<tpAmb>2</tpAmb>
<verAplic>v3314</verAplic>
<cStat>107</cStat>
<xMotivo>Serviço em OperaçãoServiço em Operação</xMotivo>
<cUF>41</cUF>
<dhRecbto>2009-08-06T16:11:17</dhRecbto>
<tMed>0</tMed>
</retConsStatServ>

================