Fala folks, estou fazendo uma aplicação para consultar o status do serviço e preciso que ela seja somente em soap, não podendo utilizar aquelas classes Stubs que são geradas pelos arquivos wsld.
Então estou utilizando o código abaixo:
package br.com.eitconsultas.service;
import br.com.eit.DummyConnector;
import br.com.eitconsultas.usefull.Certificado;
//import com.sap.conn.jco.util.Codecs.Base64;
import java.io.ByteArrayInputStream;
import java.io.StringWriter;
import java.net.URL;
import java.net.URLConnection;
import javax.xml.soap.*;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.commons.codec.binary.Base64;
/**
* Classe responsavel por consumir o Webservice da Sefaz.
*
* @author Dilnei Cunha.
*/
public class WSConsultaProtocolo_1 {
/**
* Método responsavel por consultar e trzer o retorno da consutla.
*
* @return
*/
public static String retConsultaProtocolo_1() throws Throwable {
// Debug.
// System.setProperty("javax.net.debug", "all");
// Configuro o certificado.
Certificado.ler();
// Pego o código da UF.
String urlAdders = null;
urlAdders = "https://nfe.fazenda.mg.gov.br/nfe2/services/NfeConsulta2";
// Crio uma instancia de String Builder, para criar o envelope SOAP.
StringBuilder soapMessage = new StringBuilder();
urlAdders = "https://homologacao.nfe.fazenda.sp.gov.br/nfeweb/services/NfeStatusServico2.asmx";
soapMessage.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>")
.append("<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">")
.append("<soap12:Header>")
.append("<nfeCabecMsg xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2\">")
.append("<cUF>")
.append("35")
.append("</cUF>")
.append("<versaoDados>1.00</versaoDados>")
.append("</nfeCabecMsg>")
.append("</soap12:Header>")
.append("<soap12:Body>")
.append("<nfeStatusServicoNF2 xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2\">")
.append("<nfeDadosMsg xmlns=\"http://www.portalfiscal.inf.br/nfe\">")
.append("<consStatServ versao=\"1.07\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.portalfiscal.inf.br/nfe\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">")
.append("<versao>1.07</versao>")
.append("<tpAmb>2</tpAmb>")
.append("<cUF>35</cUF>")
.append("<xServ>STATUS</xServ>")
.append("</consStatServ>")
.append("</nfeDadosMsg>")
.append("</nfeStatusServicoNF2>")
.append("</soap12:Body>")
.append("</soap12:Envelope>");
MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
// Configuro os headers.
MimeHeaders header = new MimeHeaders();
header.addHeader("Content-Type", "application/soap+xml");
// Crio a mensagem.
// System.out.println(soapMessage.toString());
SOAPMessage message = factory.createMessage(header, new ByteArrayInputStream(soapMessage.toString().getBytes()));
// Crio a conexão.
SOAPConnection con = SOAPConnectionFactory.newInstance().createConnection();
// Configuro a URL.
URL url = new URL(urlAdders);
// Chamando o serviço.
SOAPMessage res = con.call(message, url);
// Fecho a conexão.
con.close();
// Armazeno o retorno da sefaz.
StringWriter sw = new StringWriter();
Source source = new DOMSource(res.getSOAPPart().getEnvelope().getBody().getFirstChild().getFirstChild());
TransformerFactory.newInstance().newTransformer().transform(source, new StreamResult(sw));
String retConsSitNFe = sw.toString();
return retConsSitNFe;
}
}
E recebo 2 erros:
...Caused by: javax.xml.transform.TransformerException: org.xml.sax.SAXException: NAMESPACE_ERR: Houve uma tentativa de criar ou alterar um objeto de uma forma incorreta em relação aos namespaces.
org.w3c.dom.DOMException: NAMESPACE_ERR: Houve uma tentativa de criar ou alterar....
utilizando a opção de debug:
System.setProperty("javax.net.debug", "all");
encontrei o real motivo desse problema (eu acho…):
xml:lang="en">U
nable to handle
request without
a valid action p
arameter. Please
supply a valid
soap action.</so
ap:Text></soap:R
eason><soap:Deta
il /></soap:Faul
t></soap:Body></
soap:Envelope>..
Será que existe um santo neste forum que poderia me ajudar? Preciso que seja somente soap pois esta app java teria
somente que executar o xml
Obrigado pessoal!