Duvida com SOAP

Pessoal estou tentando enviar uma mensagem SOAP para um web-service via conexao segura (https, ou seja pede certificado digital). E ocorre um erro que pelo visto é que a JVM nao consegue achar um certificado digital instalado na minha maquina… acho q eh isso… bem o método que estou fazendo o envio é esse:

    private static SOAPMessage sendSOAPMessage(SOAPMessage sm, URL url) throws SOAPException {
        SOAPConnectionFactory sfc = null;
        SOAPConnection connection = null;

        try {
            sfc = SOAPConnectionFactory.newInstance();
            connection = sfc.createConnection();

            SOAPMessage response = connection.call(sm, url);

            return response;
        } finally {
            if(connection != null) {
                connection.close();
            }
        }
    }

As execessões levantadas são essas:

29/12/2007 08:34:20 com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection post
SEVERE: SAAJ0009: Message send failed
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed
        at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:146)
        at br.com.datamanager.nfex.util.soap.NFexSOAP.sendSOAPMessage(NFexSOAP.java:82)
        at br.com.datamanager.nfex.util.soap.NFexSOAP.acessWebService(NFexSOAP.java:36)
        at br.com.datamanager.nfex.util.soap.NFexSOAP.main(NFexSOAP.java:189)
Caused by: java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:140)
        ... 3 more
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed
        at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:344)
        at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection$PriviledgedPost.run(HttpSOAPConnection.java:169)
        ... 5 more
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1591)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:975)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:123)
        at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)
        at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1096)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1107)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:405)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
        at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:832)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
        at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:301)
        ... 6 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:285)
        at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191)
        at sun.security.validator.Validator.validate(Validator.java:218)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:954)
        ... 18 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
        at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:280)
        ... 24 more

CAUSE:

java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:140)
        at br.com.datamanager.nfex.util.soap.NFexSOAP.sendSOAPMessage(NFexSOAP.java:82)
        at br.com.datamanager.nfex.util.soap.NFexSOAP.acessWebService(NFexSOAP.java:36)
        at br.com.datamanager.nfex.util.soap.NFexSOAP.main(NFexSOAP.java:189)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed
        at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:344)
        at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection$PriviledgedPost.run(HttpSOAPConnection.java:169)
        ... 5 more
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1591)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:975)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:123)
        at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)
        at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1096)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1107)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:405)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
        at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:832)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
        at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:301)
        ... 6 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:285)
        at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191)
        at sun.security.validator.Validator.validate(Validator.java:218)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:954)
        ... 18 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
        at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:280)
        ... 24 more

CAUSE:

java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:140)
        at br.com.datamanager.nfex.util.soap.NFexSOAP.sendSOAPMessage(NFexSOAP.java:82)
        at br.com.datamanager.nfex.util.soap.NFexSOAP.acessWebService(NFexSOAP.java:36)
        at br.com.datamanager.nfex.util.soap.NFexSOAP.main(NFexSOAP.java:189)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed
        at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:344)
        at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection$PriviledgedPost.run(HttpSOAPConnection.java:169)
        ... 5 more
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1591)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:975)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:123)
        at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)
        at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1096)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1107)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:405)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
        at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:832)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
        at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:301)
        ... 6 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:285)
        at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191)
        at sun.security.validator.Validator.validate(Validator.java:218)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:954)
        ... 18 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
        at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:280)
        ... 24 more

Alguém pode me ajudar?

Soap é uma API para o SOA?Onde eu baixo??

É sim… é do java mesmo… ja vem com ele… :smiley:

E entao pessoal, alguem pode me ajudar? To precisando mesmo de ajuda… nao consigo achar nada relevante no google… o que consegui ateh agora é descobrir q parece q tenho q configurar um certififcado na minha JVM… mas nao sei se esse certificado é o meu ou do servidor q eu vou conectar…? alguem sabe?

Estou lendo a respeito de uma ferramenta chamada keytool pra importar o certificado… usei os comandos pra importar (keytool -import - alias xxx -file xxx.cer) o certificado tentei conectar e ateh agora nada…
To bem perdido… hehehe! :smiley: Num sei nem pra onde ir mais…

cara, para https é isso mesmo: vc vai ter de criar um certificado, instalar esse certificado no seu server e se assegurar que esse mesmo server esteja rodando https.

dê uma olhada na verisign, certsign e twantee da vida que eles disponibilizam uns bons tutotiais lá (além de um trial de certificado).
Note que vc pode criar um certificado de “teste” (que não é certificado por nenhuma entidade, apenas é reconhecido internamente na sua rede).

normalmente vc baixa um sdk onde eles te disponibilizam uma penca de ferramentazinhas chatas pra vc usar em linha de comando pra criar esse certificado.

Que ferramenta você esta utilziando para trabalhar com web services? AXIS?

Nao estou usando nenhuma ferramenta… estou tentando enviar via SOAP mesmo… que ja vem no java… no pacote do soap…

Eu estou fazendo soh um cliente e pelo q andei vendo preciso atribuir os valores das propriedades: javax.net.ssl.trustStore e javax.net.ssl.trustStorePassword

Onde javax.net.ssl.trustStore é o caminho pro arquivo de certificados confiaveis q gero com o keytool… o problema agora é q nao sei gerar esse arquivo direito… pq nao sei pegar o certificado do servidor… alguem sabe?

Normalmente vc primiero cria o certificado e depois instala o mesmo no server por meio de alguma ferramenta de linha de comando desse mesmo server. A ferramenta é quem sabe onde fica o store. Vc normalmente não aponta o caminho, exceto quando vc quer agrupar certificados …

Normalmente vc primiero cria o certificado e depois instala o mesmo no server por meio de alguma ferramenta de linha de comando desse mesmo server. A ferramenta é quem sabe onde fica o store. Vc normalmente não aponta o caminho, exceto quando vc quer agrupar certificados …[/quote]

O que eu nao entendo é qual certificado instalar… e eu nao estou fazendo um servidor… estou fazendo um cliente q acessa o web-service da secretaria de fazenda… qual certificado eu devo instalar? o meu ou o da sefaz? nao estou entendendo isso mto bem…

AHHHHHHHHHhhhhhhhhhhhhhhhhhn
Seu web service vai acessar o servidor deles certo?

Vamos voltar um pouco:

vc consegue “ver” o serviço pelo navegador?
Digite a url no navegador, só pra termos certeza de que não é nenhum problema de firewall

[quote=agodinhost]AHHHHHHHHHhhhhhhhhhhhhhhhhhn
Seu web service vai acessar o servidor deles certo?

Vamos voltar um pouco:

vc consegue “ver” o serviço pelo navegador?
Digite a url no navegador, só pra termos certeza de que não é nenhum problema de firewall[/quote]

Nao, eu nao estou fazendo web-service nao… o que eu estou fazendo é um cliente q acessa o web service…
Eu consigo ver o servico sim… entrei pelo navegador acessei tudo certinho… ateh acessei o wsdl…

vou enviar o codigo da minha classe pra entender melhor o que eu estou fazendo:

import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
import java.net.URL;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
 * Classe responsável por formatar uma mensagem no padrão SOAP e enviar ao web-service.
 * @author André Luiz Pereira Álvares
 */
public class NFexSOAP {

    private static final boolean DEBUG_MODE = true;

    /**
     * Método que cria uma mensagem SOAP e envia ao serviço web.
     * @param doc documento XML de solicitação do serviço.
     * @param url Endereço do serviço web.
     * @return Retorna o documento com a resposta do serviço web.
     * @throws javax.xml.soap.SOAPException Problema na criação ou envio da mensagem.
     */
    public static Document acessWebService(Document doc, URL url) throws SOAPException {
        SOAPMessage sm = createSOAPMessage(doc);
        SOAPMessage rs = sendSOAPMessage(sm, url);

        return rs.getSOAPPart();
    }

    /**
     * Método que cria uma mensagem SOAP.
     * @param doc Mensagem que será empacotada na mensagem SOAP.
     * @param url Endereço para onde será enviada a mensagem.
     * @return Retorna a mensagem SOAP formatada.
     * @throws javax.xml.soap.SOAPException Problema na criação da mensagem SOAP.
     */
    private static SOAPMessage createSOAPMessage(Document doc) throws SOAPException {
        if(doc == null) {
            throw new IllegalArgumentException("O parâmetro doc não pode ser nulo.");
        }

        MessageFactory mf = MessageFactory.newInstance();
        SOAPMessage sm = mf.createMessage();

        fillSOAPMessage(sm, doc);

        printSOAPMessage("CREATE - SOAP MESSAGE:", sm);

        return sm;
    }

    /**
     * Método que envia uma mensagem SOAP para um web-service indicado pela URL.
     * @param sm SOAP Message.
     * @param url Endereço do web-service.
     * @return Retorna uma mensagem SOAP indicando a reposta do web-service.
     * @throws javax.xml.soap.SOAPException Problema no envio da mensagem SOAP.
     */
    private static SOAPMessage sendSOAPMessage(SOAPMessage sm, URL url) throws SOAPException {
        if(sm == null || url == null) {
            throw new IllegalArgumentException("Os parâmetros sm e url não podem ser nulos.");
        }

        SOAPConnectionFactory sfc = null;
        SOAPConnection connection = null;

        try {
            sfc = SOAPConnectionFactory.newInstance();
            connection = sfc.createConnection();

            SOAPMessage response = connection.call(sm, url);

            printSOAPMessage("SEND - SOAP MESSAGE:", sm);
            printSOAPMessage("SEND - SERVER RESPONSE:", response);

            return response;
        } finally {
            if(connection != null) {
                connection.close();
            }
        }
    }

    /**
     * Método que preenche o elemento body (corpo) da mesnagem SOAP.
     * @param sb SOAP Body: elemento body da mensagem SOAP.
     * @param doc Document: conteúdo que será colocado no elemento body.
     * @throws javax.xml.soap.SOAPException Problema na criação da mensagem SOAP.
     */
    private static void fillSOAPBody(SOAPBody sb, Document doc) throws SOAPException {
        sb.addDocument(doc);        
    }

    /**
     * Método que preenche o elemento header (cabeçalho) da mensagem SOAP.
     * @param sh SOAP Header.
     */
    private static void fillSOAPHeader(SOAPHeader sh) {
        sh.detachNode();
    }

    /**
     * Método que preenche informações a respeito da mensagem SOAP.
     * @param sp SOAP Part.
     * @throws javax.xml.soap.SOAPException Problema na criação da mensagem SOAP.
     */
    private static void fillSOAPPart(SOAPPart sp) throws SOAPException {
        SOAPEnvelope se = sp.getEnvelope();

        sp.setXmlVersion("1.0");

        se.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema");
        se.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");
        //se.addNamespaceDeclaration("enc", "http://schemas.xmlsoap.org/soap/encoding/");
        //se.addNamespaceDeclaration("env", "http://schemas.xmlsoap.org/soap/envelop/");
        //se.setEncodingStyle("http://schemas.xmlsoap.org/soap/encoding/");
    }

    /**
     * Método que preenche informações a respeito da mensagem SOAP.
     * @param sm SOAP Message.
     * @param doc Document.
     * @throws javax.xml.soap.SOAPException Problema na criação da mensagem SOAP.
     */
    private static void fillSOAPMessage(SOAPMessage sm, Document doc) throws SOAPException {
        sm.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "true");

        SOAPPart sp   = sm.getSOAPPart();
        SOAPHeader sh = sm.getSOAPHeader();
        SOAPBody sb   = sm.getSOAPBody();

        // Preenche os elementos da mensagem.
        fillSOAPPart(sp);
        fillSOAPHeader(sh);
        fillSOAPBody(sb, doc);
    }

    /**
     * Método que imprime a mensgaem SOAP no console. Este método é usado 
     * somente em modo debug.
     * @param sm SOAP Message: mensagem SOAP.
     */
    private static void printSOAPMessage(String title, SOAPMessage sm) {
        if(DEBUG_MODE) {
            System.out.println(title);
            // Imprime a mensagem SOAP gerada... apenas para debug!
            try {
                //sm.writeTo(System.out);
                XMLSerializer serializer = new XMLSerializer(System.out, new OutputFormat(sm.getSOAPPart(), "utf-8", true));
                serializer.serialize(sm.getSOAPPart());
            } catch (Exception ex) {
                // ignora excessões
            }
        }
    }


    /**
     * Método MAIN usado para testar a classe
     * @param args
     */
    public static void main(String[] args) {

        System.setProperty("javax.net.debug", "all");

        System.setProperty("javax.net.ssl.trustStore", "C:\\DM\\Java\\Trunk\\NFex\\tstore.jks");
        System.setProperty("javax.net.ssl.trustStorePassword", "datamanager");

        System.setProperty("javax.net.ssl.keyStore", "C:\\DM\\Java\\Trunk\\NFex\\kstore.jks");
        System.setProperty("javax.net.ssl.keyStorePassword", "datamanager");

        try {
            //Cria um document vazio...
            Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();

            // XML Consulta de Status do Serviço TESTE!!
            Element consStatServ = doc.createElement("consStatServ");
            consStatServ.setAttribute("versao", "1.02");
            doc.appendChild(consStatServ);

            Element xServ = doc.createElement("xServ");
            xServ.setTextContent("STATUS");
            consStatServ.appendChild(xServ);
            // XML Consulta de Status do Serviço TESTE!!

            //SOAPMessage sm = createSOAPMessage(doc);
            Document rs = acessWebService(doc, new URL("https://homologacao.sefaz.mt.gov.br/nfews/NfeStatusServico"));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

acessei a url do serviço que vc está tentando utilizar e o meu navegador, de cara, solicita pela certificação a utilizar.

A url é essa aqui certo? https://homologacao.sefaz.mt.gov.br/nfews/NfeStatusServico

Fica fácil ver que se vc selecionar uma certificação incorreta ou expirada o java vai bichar levantando essa exceção que vc apresentou (pelo menos faz sentido)

Baixei seu código aqui e tudo parece direitinho (Java 1.4, Axis 1.4 e xerces 2.9.1).

Sei que o store do navegador (IE 6) não é o mesmo utilizado pelo Axis. Isso foi só pra te dar uma idéia do quê acontece por baixo dos panos.

Dê uma olhada nesse tutorial, ele é bem direto (seção Apache Axis Clients).
http://hobit.gsf.de/wiki/display/wiki/Web+Services+with+HTTPS

PS: o certificado que vc deve utilizar aqui é o certificado público do serviço que vc está utilizando - NÃO É o certificado que vc criou ok? Esse certificado que vc criou é utilizado quando vc tem seu próprio server e não é o seu caso.

PS2: se, apenas se, esse certificado for público posta a url pra download dele pra quê eu (ou outros aqui) possamos te ajudar …

[quote=agodinhost]acessei a url do serviço que vc está tentando utilizar e o meu navegador, de cara, solicita pela certificação a utilizar.

A url é essa aqui certo? https://homologacao.sefaz.mt.gov.br/nfews/NfeStatusServico

Fica fácil ver que se vc selecionar uma certificação incorreta ou expirada o java vai bichar levantando essa exceção que vc apresentou (pelo menos faz sentido)

Baixei seu código aqui e tudo parece direitinho (Java 1.4, Axis 1.4 e xerces 2.9.1).

Sei que o store do navegador (IE 6) não é o mesmo utilizado pelo Axis. Isso foi só pra te dar uma idéia do quê acontece por baixo dos panos.

Dê uma olhada nesse tutorial, ele é bem direto (seção Apache Axis Clients).
http://hobit.gsf.de/wiki/display/wiki/Web+Services+with+HTTPS

PS: o certificado que vc deve utilizar aqui é o certificado público do serviço que vc está utilizando - NÃO É o certificado que vc criou ok? Esse certificado que vc criou é utilizado quando vc tem seu próprio server e não é o seu caso.

[/quote]

Lendo uma documentação da Sefaz aqui descobri q pra acessar os servicos eles tem q se cadastrar… será q isso pode ter alguma coisa a ver? Tipo, se vc nao se cadastra eles nao reconhecem seu certificado e da erro na conexao…? pode ser?

[quote=andre2k2]Lendo uma documentação da Sefaz aqui descobri q pra acessar os servicos eles tem q se cadastrar… será q isso pode ter alguma coisa a ver? Tipo, se vc nao se cadastra eles nao reconhecem seu certificado e da erro na conexao…? pode ser?[/quote]Hmmm, sei não. Até onde sei vc só precisa da chave pública deles instalada no seu computador (não a sua). Posso estar enganado, não sou especialista em SSL e pode ter algo mais diferente nesse circuito.

PS: vc já disse que conseguiu ver o WSDL no navegador mas e o serviço? vc conseguiu utilizar o serviço pelo navegador? Se vc conseguiu isso quer dizer que vc já tem o certificado deles no key store do seu navegador (e é uma cópia dess certificado que vc deve utilizar), caso contrário vc precisa voltar um passo aí: tem certeza de quê o certificado é o correto?

E como eu instalo a chave publica deles?

System.setProperty(“javax.net.ssl.trustStore”, “C:\Documents and Settings\Richard\clientTruststore”);
System.setProperty(“javax.net.ssl.trustStorePassword”, “somePassword”);

ou

System.setProperty(“javax.net.ssl.keyStore”, “C:\Documents and Settings\Richard\clientKeystore”);
System.setProperty(“javax.net.ssl.keyStorePassword”, “someOtherPassword”);

lá da seção “Apache Axis Clients” da url que te passei.
Isso é análogo ao o que se faz em linha de comando pra instalar (e desisntalar) certificados no store do navegador.

Vc tem o certificado deles? pki, pks, algo assim.

perdão, as duas últimas linhas:
System.setProperty(“javax.net.ssl.keyStore”, “C:\Documents and Settings\Richard\clientKeystore”);
System.setProperty(“javax.net.ssl.keyStorePassword”, “someOtherPassword”);

dizem qual certificado utilizar quando o serviço exige autenticação do cliente (se o serviço exigir vc podem sim, ter de criar um certificado seu pra acessor o serviço).

Note que nesse caso vc tem dois certificados :

  • o deles (chave pública, especificado nas duas primeiras linhas)
  • o seu certificado (2 últimas linhas);

PS: pessoalmente nunca usei com autenticação de cliente e, pelo que tudo indica, acho que vc tem razão: vc terá de fazer seu cadastro lá e, muito provavelmente, terá de criar um certificado pra vc (ou sua empresa).

System.setProperty(“javax.net.ssl.trustStore”, “C:\Documents and Settings\Richard\clientTruststore”);
System.setProperty(“javax.net.ssl.trustStorePassword”, “somePassword”);

ou

System.setProperty(“javax.net.ssl.keyStore”, “C:\Documents and Settings\Richard\clientKeystore”);
System.setProperty(“javax.net.ssl.keyStorePassword”, “someOtherPassword”);

lá da seção “Apache Axis Clients” da url que te passei.
Isso é análogo ao o que se faz em linha de comando pra instalar (e desisntalar) certificados no store do navegador.

Vc tem o certificado deles? pki, pks, algo assim.[/quote]

Nao tenho o certificado… vou ter q correr atras disso… conseguindo eu retorno aki no topico os resultados da minha odisseia… hehehe
Mto obrigado, agodinhost! Foi mto esclarecedor… vlw mesmo!!

se prepare: se vc for criar um certificado pra sua empresa o processo é bem burocrático e costuma demorar mais de duas semanas - além do quê exige assinatura e comunicação com diretores e outros bosses.