Olá, tenho uma classe destinada a fazer a consulta de status serviço para o estado da Bahia, porém quando executo recebo o seguinte retorno:
<?xmlversion="1.0"encoding="utf-8"?><soap:Envelopexmlns:soap="http://www.w3.org/2003/05/soap-envelope"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><soap:Code><soap:Value>soap:Sender</soap:Value></soap:Code><soap:Reason><soap:Textxml:lang="en">System.Web.Services.Protocols.SoapException:Unabletohandlerequestwithoutavalidactionparameter.Pleasesupplyavalidsoapaction.
atSystem.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest()
atSystem.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessagemessage)
atSystem.Web.Services.Protocols.SoapServerProtocol.Initialize()
atSystem.Web.Services.Protocols.ServerProtocol.SetContext(Typetype,HttpContextcontext,HttpRequestrequest,HttpResponseresponse)
atSystem.Web.Services.Protocols.ServerProtocolFactory.Create(Typetype,HttpContextcontext,HttpRequestrequest,HttpResponseresponse,Boolean&abortProcessing)</soap:Text></soap:Reason><soap:Detail/></soap:Fault></soap:Body></soap:Envelope>
Segue o código que estou utilizando:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URL;
import java.security.Security;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
/**
*
* @author diego
*/
public class NFeTeste{
public static void main(String[] args) {
StringBuffer soapMessage = new StringBuffer();
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("<versaoDados>2.0</versaoDados>")
.append("<cUF>29</cUF>")
.append("</nfeCabecMsg>")
.append("</soap12:Header>")
.append("<soap12:Body>")
.append("<nfeDadosMsg xmlns=\"http://www.portalfiscal.inf.br/nfe\">")
.append("<consStatServ versao=\"2.0\" 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>2.0</versao>")
.append("<tpAmb>2</tpAmb>")
.append("<cUF>29</cUF>")
.append("<xServ>STATUS</xServ>")
.append("</consStatServ>")
.append("</nfeDadosMsg>")
.append("</soap12:Body>")
.append("</soap12:Envelope>");
metodo2(soapMessage.toString(), "https://hnfe.sefaz.ba.gov.br/webservices/nfenw/NfeStatusServico2.asmx");
}
public static void metodo2(String envelope, String urlAddress) {
try {
MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
SOAPMessage message;
try {
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.keyStoreType", "PKCS12");
System.setProperty("javax.net.ssl.keyStore", "C:\\keystore\\Postomimo.pfx");
System.setProperty("javax.net.ssl.keyStorePassword", "123456");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "C:\\truststore.jks");
MimeHeaders header = new MimeHeaders();
header.addHeader("Content-Type", "application/soap+xml");
message = factory.createMessage(header, new ByteArrayInputStream(envelope.getBytes()));
SOAPConnection con = SOAPConnectionFactory.newInstance().createConnection();
URL url = new URL(urlAddress);
System.out.println("Message enviada \n"+message.toString());
SOAPMessage res = con.call(message, url);
ByteArrayOutputStream in = new ByteArrayOutputStream();
message.writeTo(in);
System.out.println("in :\n"+in.toString());
ByteArrayOutputStream out = new ByteArrayOutputStream();
res.writeTo(out);
System.out.println("out :\n"+desnormalizar(out.toString()));
} catch (IOException ex) {
System.out.println("" + ex.getMessage());
ex.printStackTrace();
} finally {
}
} catch (SOAPException ex) {
System.out.println("" + ex.getMessage());
ex.printStackTrace();
}
}
public static String desnormalizar(String texto) {
return texto.replace("<", "<").replace(">", ">").replace("''", "\"").replace(" ", "\r");
}
}