NFE - Consumir WS DPEC

54 respostas
alves.Felipe

Ola…
Alguém conseguiu consumir o WS do DPEC?? estou com problemas no xml do cabeçalho…
se alguém tiver algumas dicas…fiquem à vontade…

abraco

54 Respostas

alves.Felipe

ninguém implementou o DPEC???

G

Eu estou implementando por agora… não sei qual exatamente seu problema… gerar o xml ? enviar ?

Estou tendo alguns problemas quanto ao envio… utilizo a plataforma apache axis… para criar o cliente …

; nested exception is: 
org.xml.sax.SAXParseException: Premature end of file.

Ja olhei bastante coisa no google mas nda ate agora =/

alves.Felipe

então cara… eu tb uso o axis… aquele wizard do eclipse…
eu gerei o xml tranquilo… meu problema é que não sei como mandar o cabeçalho…
pq nos outros ws (envNfe,etc…), mando 2 strings como parametro (1 o cabec. e outra os dados) e nesse do dpec
tem que mandar um Objeto SceDadosMsg … entende?

public SceRecepcaoDPECResult sceRecepcaoDPEC(SceDadosMsg) // essa é a assinatura do método
G

Compreendo… eu estou no mesmo “dilema”.
Ao inves de passar parametros, eu estou criando o envelope (SOAPEnvelope).
Nele eu adiciono o cabecalho (SOAPHeaderElement) e o corpo (SOAPBodyElement).

Ao que olhei o sceDadosMsg é composto pelo xml da msg do dpec. Dessa forma consegui gerar a mensagem semelhanto ao exemplo fornecido em https://hom.nfe.fazenda.gov.br/SCERecepcaoRFB/SCERecepcaoRFB.asmx

Entretando da o erro… que acho que é de algum problema no xml =/

fscontato

Pelo que eu entendi a mensagem SOAP deve ser montada assim:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header>
    <sceCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/SCERecepcaoRFB">
      <versaoDados>1.01</versaoDados>
    </sceCabecMsg>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <sceRecepcaoDPEC xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/SCERecepcaoRFB">
      <sceDadosMsg>
        <envDPEC xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.01">
          <infDPEC Id="DPEC11111111111111">
            <ideDec>
              <cUF>33</cUF>
              <tpAmb>2</tpAmb>
              <verProc>PROGRAMA</verProc>
              <CNPJ>11111111111111</CNPJ>
              <IE>11111111</IE>
            </ideDec>
            <resNFe>
              <chNFe>33091011111111111111550020000013410000013419</chNFe>
              <CNPJ>11111111111111</CNPJ>
              <UF>RJ</UF>
              <vNF>2.50</vNF>
              <vICMS>2.50</vICMS>
              <vST>0.00</vST>
            </resNFe>
          </infDPEC>
          <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
            <SignedInfo>
              <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
              <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
              <Reference URI="#DPEC11111111111111">
                <Transforms>
                  <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                  <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
                </Transforms>
                <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                <DigestValue>XXX...XXX=</DigestValue>
              </Reference>
            </SignedInfo>
            <SignatureValue>XXX...XXX=</SignatureValue>
            <KeyInfo>
              <X509Data>
                <X509Certificate>XXX...XXX=</X509Certificate>
              </X509Data>
            </KeyInfo>
          </Signature>
        </envDPEC>
      </sceDadosMsg>
    </sceRecepcaoDPEC>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Eu substitui os dados reais por fictícios e formatei o xml pra q vcs vejam, mas o xml que eu transmito não tem formatação nem quebra de linha.

Quando eu envio esse xml eu recebo de volta exatamente essa mensagem SOAP:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soap:Body>
    <soap:Fault>
      <faultcode>soap:Server</faultcode>
      <faultstring>Server was unable to process request. ---> Object reference not set to an instance of an object.</faultstring>
      <detail/>
    </soap:Fault>
  </soap:Body>
</soap:Envelope>

Eu envio as mensagens SOAP usando SOAPMessage e SOAPConnection, todos os demais processos da nota fiscal eletrônica estão funcionando, recepcao de nota, consulta de recibo, cancelamento, inutilizacao, SCAN, etc, o DPEC é o único que me retorna essa mensagem.

Alguém sabe me dizer onde estou errando?

G

Eu recebi esse problema… quando eu havia esquecido de setar o soap version para 1.2

[]s

Fernando

G
<?xml version="1.0" encoding="utf-8"?>
<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">
  <soap12:Header>
    <sceCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/SCERecepcaoRFB">
      <versaoDados>string</versaoDados>
    </sceCabecMsg>
  </soap12:Header>
  <soap12:Body>
    <sceDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/SCERecepcaoRFB">xml</sceDadosMsg>
  </soap12:Body>
</soap12:Envelope>

esse eh o modelo que tem no site… nao sei se vai ter o elemento … eu nao to usando… mas ainda to no meu problema …

G

Bom… conseguir consumir o dpec agora eh tratar alguns erros retornados na msg.
O que fiz de diferente foi que ao inves de chamar o metodo invoke passando como parametro um SOAPEnvelop… Decidi criar uma mensagem e passar ela como parametro pro método.
Já que o método aceita tanto um quanto o outro… fazendo os devidas iteracoes… nao sei explicar a diferença…

[]s

Fernando

fscontato

Obrigado pela ajuda de vcs, eu estava usando <sceRecepcaoDPEC> e ela não é mesmo necessária. Eu estava me baseando no manual de contingência, mas ele está uma bagunça, devia ter visto esse link de vcs desde o início, rsrs.
Meu código então ficou apenas assim:

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"&gt;
  &lt;SOAP-ENV:Header&gt;
    &lt;sceCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/SCERecepcaoRFB"&gt;
      &lt;versaoDados&gt;1.01&lt;/versaoDados&gt;
    &lt;/sceCabecMsg&gt;
  &lt;/SOAP-ENV:Header&gt;
  &lt;SOAP-ENV:Body&gt;
    &lt;sceDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/SCERecepcaoRFB"&gt;
      ...xml...
    &lt;/sceDadosMsg&gt;
  &lt;/SOAP-ENV:Body&gt;
&lt;/SOAP-ENV:Envelope&gt;

Estou usando SOAP 1.1, agora está funcionando 100%, estou transmitindo e recebendo o retorno, vlw ae :wink:

Esse é um exemplo simplificado do código que eu estou usando pra enviar os xmls, caso alguém ache útil:

import java.net.URL;

import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPMessage;

import org.w3c.dom.Document;
import org.w3c.dom.Node;

public class Soap {
	public Node transmitir(URL endpoint, Document cabecDoc, Document dadosDoc, 
			String soapAction) throws Exception {
		Node elemento = null;
		Node adotado = null;
	
		SOAPMessage reqSoap = MessageFactory.newInstance().createMessage();
		reqSoap.getSOAPPart().setXmlStandalone(true);
		reqSoap.getMimeHeaders().addHeader("SOAPAction", soapAction);
		
		elemento = cabecDoc.getDocumentElement();
		adotado = reqSoap.getSOAPPart().adoptNode(elemento);
		reqSoap.getSOAPHeader().appendChild(adotado);
			
		elemento = dadosDoc.getDocumentElement();
		adotado = reqSoap.getSOAPPart().adoptNode(elemento);
		reqSoap.getSOAPBody().appendChild(adotado);

		SOAPConnectionFactory cnnFactory = SOAPConnectionFactory.newInstance();
		SOAPConnection cnn = cnnFactory.createConnection();
		SOAPMessage respSoap = cnn.call(reqSoap, endpoint);

		Node nodo = respSoap.getSOAPBody().getChildNodes().item(0);
		
		return nodo;
	}
}
alves.Felipe

goianinho77:
Bom… conseguir consumir o dpec agora eh tratar alguns erros retornados na msg.
O que fiz de diferente foi que ao inves de chamar o metodo invoke passando como parametro um SOAPEnvelop… Decidi criar uma mensagem e passar ela como parametro pro método.
Já que o método aceita tanto um quanto o outro… fazendo os devidas iteracoes… nao sei explicar a diferença…

[]s

Fernando


cara… qdo vc disse ali que esta passando uma mensagem como parametro… essa mensagem é uma string?

F

Alguém sabe como montar o MessageElement[] ??

gerei as classes webservice com o axis e para fazer a chama no webservice faço da mesma forma que nos outros serviços

mas o DPEC é um pouco diferente, ele pede um Objeto como parâmetro, e não o XML como o outros serviços.

SCERecepcaoRFBLocator service = new SCERecepcaoRFBLocator();
SCERecepcaoRFBSoap_PortType recepcao = service.getSCERecepcaoRFBSoap();
SceDadosMsg sceDadosMsg = new SceDadosMsg(MessageElement[]);

recepcao.sceRecepcaoDPEC(sceDadosMsg); //nos outros serviços, aqui se passaria somente o xml, mas nesse é diferente....

alguém tem ideia ou conhece como se monta esse array?

abraço pessoal!

fscontato

olha, eu não usei o axis, mas vou dar um chute aqui, talvez funcione, se não funcionar me perdoe por favor rsrs

SCERecepcaoRFBLocator service = new SCERecepcaoRFBLocator();  
SCERecepcaoRFBSoap_PortType recepcao = service.getSCERecepcaoRFBSoap();  
SceDadosMsg sceDadosMsg = new SceDadosMsg(MessageElement[]);  

Document doc = ...o seu documento DOM...
recepcao.sceRecepcaoDPEC( new Object[]{ doc } );
alves.Felipe

então eu fiz assim:

MessageElement [] elements = new MessageElement[1];
//		elements[0] = new MessageElement(docCabec.getDocumentElement());
		elements[0] = new MessageElement(doc.getDocumentElement());

		SceDadosMsg dadosMsg = new SceDadosMsg();
		dadosMsg.set_any(elements);
		

		SCERecepcaoRFBSoapProxy dpecProxy = new SCERecepcaoRFBSoapProxy();
		SceRecepcaoDPECResult result = dpecProxy.sceRecepcaoDPEC( dadosMsg);

		MessageElement [] elementsResult = result.get_any();

mas eu não sei como que fica o cabecalho… e enviando deste jeito eu recebo esta mensagem:

<retDPEC versao="1.01" xmlns="http://www.portalfiscal.inf.br/nfe"> <infDPECReg Id="RETDPEC"><tpAmb>2</tpAmb><verAplic>1.01</verAplic><cStat>409</cStat> <xMotivo>Rejeicao: Elemento nfeCabecMsg inexistente no SOAP Header</xMotivo></infDPECReg> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI="#RETDPEC"><Transforms> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> </Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue></X509Certificate></X509Data></KeyInfo></Signature> </retDPEC>

eu tentei fazer igual ao do fscontato mas nesta parte o adotado fica null ai da erro para fazer o append na linha de baixo…

adotado = reqSoap.getSOAPPart().adoptNode(elemento);   
        reqSoap.getSOAPHeader().appendChild(adotado);

fscontato como que fica o seu xml de cabec?

F

ainda não mechi denovo no WS, mas pelo que vi na especificação o cabeçalho so se passa a versão…

fscontato

alves.Felipe, no meu caso eu estou montando a mensagem soap na mão, dessa forma eu consigo inserir o documento sceCabecMsg diretamente no header do soap e o documento sceDadosMsg no body do soap.

O que me chamou atenção no seu código é que este SCERecepcaoRFBSoapProxy pede apenas o sceDadosMsg, ora nenhuma vc monta o sceCabecMsg.

O axis gerou uma classe tipo SceCabecMsg.java? Talvez tenha alguma forma de vc passá-la pra esse SCERecepcaoRFBSoapProxy?

Eu estive olhando neste site http://www.nsftools.com/stubby/ApacheAxisClientTips.htm , na seção Adding SOAP Header Elements, uma forma de se interagir com o stub e pegar a seção header do soap, não sei se tem haver com a forma como vc gerou seus stubs, mas talvez te ajude?

alves.Felipe

fscontato:
alves.Felipe, no meu caso eu estou montando a mensagem soap na mão, dessa forma eu consigo inserir o documento sceCabecMsg diretamente no header do soap e o documento sceDadosMsg no body do soap.

eu vi seu codigo… eu tentei copiar mas não vingou… não sei pq…da o erro que eu falei no post anterior… mas eu queria saber se vc cria um Document para o cabec que tem apenas a versão?
tipo assim:&lt;versaoDados&gt;1.01&lt;/versaoDados&gt;

então cara… gerou a classe SceCabecMsg… mas nao achei onde que uso… hehe… e no método que chamo para consumir pede apenas o SceDadosMsg… seila… eu até alterei os parametros…
tentei passar os 2… passar como string… mas ai ja da erro de cara…falando que esta errado os parametros…

vou dar uma olhada no site q vc passou…

fscontato

eu vi seu codigo… eu tentei copiar mas não vingou… não sei pq…da o erro que eu falei no post anterior… mas eu queria saber se vc cria um Document para o cabec que tem apenas a versão?
tipo assim:

sim, eu crio esse sceCabecMsg como um documento dom mais ou menos assim:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();

String cabecXml = 
                "&lt;sceCabecMsg xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/SCERecepcaoRFB\"&gt;"
                + "&lt;versaoDados&gt;1.01&lt;/versaoDados&gt;"
                + "&lt;/sceCabecMsg&gt;";

Document cabecDoc = db.parse(new ByteArrayInputStream(cabecXml.getBytes()));

e então esse cabecDoc eu adiciono no header do soap

G

alves.Felipe:
goianinho77:
Bom… conseguir consumir o dpec agora eh tratar alguns erros retornados na msg.
O que fiz de diferente foi que ao inves de chamar o metodo invoke passando como parametro um SOAPEnvelop… Decidi criar uma mensagem e passar ela como parametro pro método.
Já que o método aceita tanto um quanto o outro… fazendo os devidas iteracoes… nao sei explicar a diferença…

[]s

Fernando


cara… qdo vc disse ali que esta passando uma mensagem como parametro… essa mensagem é uma string?

Nao nao…
Me refiro a um SOAPMessage, que contem o SOAPEnvelope

G

Vo dx aqui um exemplo.. substituindo variaveis por string pra ficar de facil entendimento.

Dps apenas faço uso da chamada

call = (Call) service.createCall();
//Inicializa Pacote
         SOAPEnvelope envelopeAxis = new SOAPEnvelope();   
         envelopeAxis.setEncodingStyle("http://www.w3.org/2003/05/soap-envelope");
         
         //Header
         SOAPHeaderElement oHeaderElement = 
            new SOAPHeaderElement(new QName("http://www.portalfiscal.inf.br/nfe/wsdl/SCERecepcaoRFB", "sceCabecMsg"));
         
         oHeaderElement.addChildElement("versaoDados").addTextNode("1.01");
         oHeaderElement.setPrefix("");
         setRequestHeaders(call);
         setAttachments(call);

         //Body
         SOAPBodyElement oBodyElement = new SOAPBodyElement(new QName("http://www.portalfiscal.inf.br/nfe/wsdl/SCERecepcaoRFB", "sceDadosMsg"));
         oBodyElement.setPrefix("");
         
         //Obtem documento XML para passagem de parametro
         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
         dbf.setNamespaceAware(true);
         InputStream is = new ByteArrayInputStream(vo.getXmlDados().getBytes()); //XML que contem <envDPEC...
         Document doc = dbf.newDocumentBuilder().parse(is);
         
         oBodyElement.setObjectValue(doc);
        
        //Configura o Envelope
         envelopeAxis.addBodyElement(oBodyElement);
         envelopeAxis.addHeader(oHeaderElement);        
         
         
         //Configura Mensagem
         Message msg = new Message(envelopeAxis.getAsString(),false);
alves.Felipe

goianinho77, consegui fazer a partir do teu código…
só precisei adicionar estas 2 linhas…

call.setTargetEndpointAddress(new java.net.URL("https://hom.nfe.fazenda.gov.br/SCERecepcaoRFB/SCERecepcaoRFB.asmx")); call.setSOAPActionURI("http://www.portalfiscal.inf.br/nfe/wsdl/SCERecepcaoRFB/sceRecepcaoDPEC");

valeo pela ajuda da galera ai…

G

alves.Felipe:
goianinho77, consegui fazer a partir do teu código…
só precisei adicionar estas 2 linhas…

call.setTargetEndpointAddress(new java.net.URL("https://hom.nfe.fazenda.gov.br/SCERecepcaoRFB/SCERecepcaoRFB.asmx")); call.setSOAPActionURI("http://www.portalfiscal.inf.br/nfe/wsdl/SCERecepcaoRFB/sceRecepcaoDPEC");

valeo pela ajuda da galera ai…

Bacana… sim sim… essa parte fica na configuracao da chamada.

[]s

Fernando

F

Parabéns ao fscontato

O webservice genérico é muito bom!

Z

Desculpem minha ignorancia mas o codigo do goianinho77 sobre o soapheader deve ser adicionado na classe SCERecepcaoRFBSoapProxy ?

T

fscontato

que valor é informado em soapAction no seu exemplo?

obrigado.

alexegidio

tipsico:
fscontato

que valor é informado em soapAction no seu exemplo?

obrigado.

No do fscontato eu não sei, mas no meu eu adiciono:

rodrigobraz

olá.

quais são os certificados que preciso importar para acessar os webservices do DPEC?

estou tentando com os certificados que uso na NFe mas não está conectando…

eu gerei um keystore e uso na NFe. Consigo conexão tanto no ambiente de produção quanto no de homologação, mas na DPEC não vai! =/

vlw

alexegidio

rodrigobraz eu coloquei todas as cadeias de certificados que a NFe usa num único keystore

Se não estou enganado foi nesta página:

http://www.serpro.gov.br/servicos/certificacao_digital

Assim consigo acessar qualquer Webservice de qualquer UF

rodrigobraz

não funcionou =/

importei os certificados do link mas continuo não conseguindo a conexão!

erro:

17/07/2010 10:36:49 org.apache.axis2.transport.http.HTTPSender sendViaPost INFO: Unable to sendViaPost to url[https://hom.nfe.fazenda.gov.br/SCEConsultaRFB/SCEConsultaRFB.asmx] javax.net.ssl.SSLException: HelloRequest followed by an unexpected handshake message at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:190) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1623) at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:198) at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:188) at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloRequest(ClientHandshaker.java:286) at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:114) at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:525) at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:465) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:746) at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read(BufferedInputStream.java:237) at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78) at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106) at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116) at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.readLine(MultiThreadedHttpConnectionManager.java:1413) at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973) at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735) at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1098) at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398) at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:346) at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:542) at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:199) at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:76) at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:400) at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:225) at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:435) at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402) at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229) at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165) at br.inf.portalfiscal.www.nfe.wsdl.sceconsultarfb.SCEConsultaRFBStub.sceConsultaDPEC(SCEConsultaRFBStub.java:172) at com.cocari.nfe.dpec.ws.WSDepecManager.consultaDPEC(WSDepecManager.java:68) at teste.TesteEnvioDPEC.consultaDPEC(TesteEnvioDPEC.java:41) at teste.TesteEnvioDPEC.main(TesteEnvioDPEC.java:18)

alguma idéia?!

alexegidio

rodrigobraz vc pode fazer um teste ?

Veja se consegue acessar a url abaixo do seu navegador:

https://hom.nfe.fazenda.gov.br/SCEConsultaRFB/SCEConsultaRFB.asmx?wsdl

rodrigobraz

consigo acessar sim Alex.

aparece no navegador o xml do webservice.

eu acho q está faltando algum certificado a ser importado, mas não sei qual.

vlw

alexegidio

rodrigobraz, já conseguiu resolver o problema ?

Senão posso enviar meu jks via email pra você testar.

rodrigobraz

olá Alex.

nem consegui, cara.

to até desistindo… acho q vou fazer gerar o arquivo xml pro usuário fazer o upload no site da receita mesmo =/

mas se puder enviar seu jks pra eu testar, agraderecia!

vlw

starkiller

Ola pessoal, ja venho acompanhando a algum tempo esse forum, que por sinal me ajudou muito a desenvolver o sistema de Nota Fiscal Eletronica da empresa onde trabalho. Mas surgiu um problema, tenho de desenvolver o modulo para o Dpec, e empaquei em um erro! Usei de base o codigo do usuario fscontato , mas noa deu certo..o erro que encontrei foi esse:

17/09/2010 16:45:42 com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection post
GRAVE: 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(Unknown Source)
	at com.melo.teste.Soap.transmitir(Soap.java:44)
	at com.melo.teste.Teste.main(Teste.java:76)
Caused by: java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed
	at java.security.AccessController.doPrivileged(Native Method)
	... 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(Unknown Source)
	at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection$PriviledgedPost.run(Unknown Source)
	... 4 more
Caused by: javax.net.ssl.SSLException: HelloRequest followed by an unexpected  handshake message
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at java.net.HttpURLConnection.getResponseCode(Unknown Source)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)
	... 6 more
Caused by: javax.net.ssl.SSLException: HelloRequest followed by an unexpected  handshake message
	at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloRequest(Unknown Source)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.AppInputStream.read(Unknown Source)
	at java.io.BufferedInputStream.fill(Unknown Source)
	at java.io.BufferedInputStream.read1(Unknown Source)
	at java.io.BufferedInputStream.read(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
	... 9 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(Unknown Source)
	at com.melo.teste.Soap.transmitir(Soap.java:44)
	at com.melo.teste.Teste.main(Teste.java:76)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed
	at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(Unknown Source)
	at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection$PriviledgedPost.run(Unknown Source)
	... 4 more
Caused by: javax.net.ssl.SSLException: HelloRequest followed by an unexpected  handshake message
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at java.net.HttpURLConnection.getResponseCode(Unknown Source)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)
	... 6 more
Caused by: javax.net.ssl.SSLException: HelloRequest followed by an unexpected  handshake message
	at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloRequest(Unknown Source)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.AppInputStream.read(Unknown Source)
	at java.io.BufferedInputStream.fill(Unknown Source)
	at java.io.BufferedInputStream.read1(Unknown Source)
	at java.io.BufferedInputStream.read(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
	... 9 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(Unknown Source)
	at com.melo.teste.Soap.transmitir(Soap.java:44)
	at com.melo.teste.Teste.main(Teste.java:76)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed
	at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(Unknown Source)
	at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection$PriviledgedPost.run(Unknown Source)
	... 4 more
Caused by: javax.net.ssl.SSLException: HelloRequest followed by an unexpected  handshake message
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at java.net.HttpURLConnection.getResponseCode(Unknown Source)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)
	... 6 more
Caused by: javax.net.ssl.SSLException: HelloRequest followed by an unexpected  handshake message
	at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloRequest(Unknown Source)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.AppInputStream.read(Unknown Source)
	at java.io.BufferedInputStream.fill(Unknown Source)
	at java.io.BufferedInputStream.read1(Unknown Source)
	at java.io.BufferedInputStream.read(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
	... 9 more

se puderem me ajudar, agradeco muito.

alexegidio

startkiller, você consegue acessar a URL abaixo:


https://hom.nfe.fazenda.gov.br/SCERecepcaoRFB/SCERecepcaoRFB.asmx?wsdl

Senão conseguir de uma olhada nesse tópico

http://www.guj.com.br/posts/list/148620.java#804676

starkiller

Cara consigo sim acessar o wsdl…Fiz os passos que vc ensina em seu tutorial, mas tbm nao deu certo! Tipo, devo gerar uma nova Jks? E usar essa jks gerada la no meu projeto? Ou devo reinstalar essa jks e e gerar os .cer apartir dela?! Isso nao ficou muito claro pra mim!

alexegidio

Cara, os passos no tutorial iam ser válidos se você não conseguisse acessar o wsdl, mas como conseguiu o problema deve ser outro

starkiller

Saquei, tipo, meu certificado esta pra vencer, nao poderia ser esse o problema? Pois lembro de ter lido em algum lugar, que o certificado deixa de ser valido um mes antes de vencer, vou testar com o atualizado, pois minha empresa ja tirou um novo, colocarei aqui os resultados de meus testes!

starkiller

Cara, testei aqui e nao deu certo ainda, Nao sei mais o que fazer, importei todas as cadeias e, inclusive, estou usando o novo certificado que minha empresa requisitou, mas nao consigo estabelecer conexao com o server! Ai vai meu codigo pra vcs darem uma olhada e se puderem, me dar uma luz!

public class Soap {  
	public Node transmitir(URL endpoint, Document cabecDoc, Document dadosDoc,   
			String soapAction) throws Exception {  
		Node elemento = null;  
		Node adotado = null;  

		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:\\certDpec\\cert.pfx");//Aqui vem o arquivo do certificado do seu cliente  
		System.setProperty("javax.net.ssl.keyStorePassword", "******");//Aqui a senha deste certificado  

		System.setProperty("javax.net.ssl.trustStoreType", "JKS");  
		System.setProperty("javax.net.ssl.trustStore", "C:\\mao.keystore");//Aqui vem o arquivo criado atrav&#65533;s do comando keytool  

		SOAPMessage reqSoap = MessageFactory.newInstance().createMessage();  
		reqSoap.getSOAPPart().setXmlStandalone(true);  
		reqSoap.getMimeHeaders().addHeader("SOAPAction", soapAction);  

		elemento = cabecDoc.getDocumentElement();  
		adotado = reqSoap.getSOAPPart().adoptNode(elemento);  
		reqSoap.getSOAPHeader().appendChild(adotado);  

		elemento = dadosDoc.getDocumentElement();  
		adotado = reqSoap.getSOAPPart().adoptNode(elemento);  
		reqSoap.getSOAPBody().appendChild(adotado);  

		SOAPConnectionFactory cnnFactory = SOAPConnectionFactory.newInstance();  
		SOAPConnection cnn = cnnFactory.createConnection();  
		SOAPMessage respSoap = cnn.call(reqSoap, endpoint);  

		Node nodo = respSoap.getSOAPBody().getChildNodes().item(0);  

		return nodo;  
	}  
}

Minha Classe teste que chama a classe Soap, que peguei aqui no topico mesmo. Mas da o erro que listei acima!

public class Soap {  
	public Node transmitir(URL endpoint, Document cabecDoc, Document dadosDoc,   
			String soapAction) throws Exception {  
		Node elemento = null;  
		Node adotado = null;  

		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:\\certDpec\\cert.pfx");//Aqui vem o arquivo do certificado do seu cliente  
		System.setProperty("javax.net.ssl.keyStorePassword", "assimsera");//Aqui a senha deste certificado  

		System.setProperty("javax.net.ssl.trustStoreType", "JKS");  
		System.setProperty("javax.net.ssl.trustStore", "C:\\mao.keystore");//Aqui vem o arquivo criado atrav&#65533;s do comando keytool  

		SOAPMessage reqSoap = MessageFactory.newInstance().createMessage();  
		reqSoap.getSOAPPart().setXmlStandalone(true);  
		reqSoap.getMimeHeaders().addHeader("SOAPAction", soapAction);  

		elemento = cabecDoc.getDocumentElement();  
		adotado = reqSoap.getSOAPPart().adoptNode(elemento);  
		reqSoap.getSOAPHeader().appendChild(adotado);  

		elemento = dadosDoc.getDocumentElement();  
		adotado = reqSoap.getSOAPPart().adoptNode(elemento);  
		reqSoap.getSOAPBody().appendChild(adotado);  

		SOAPConnectionFactory cnnFactory = SOAPConnectionFactory.newInstance();  
		SOAPConnection cnn = cnnFactory.createConnection();  
		SOAPMessage respSoap = cnn.call(reqSoap, endpoint);  

		Node nodo = respSoap.getSOAPBody().getChildNodes().item(0);  

		return nodo;  
	}  
}

Por alguma razao, da um erro de SSL, sendo que consigo acessar a wsdl pelo Browser!
Sendo que meu sistema consegue conexao com o servidor da NFe de 4 estados diferentes, mas nao conecta com o bendito do Dpec!
Obrigado desde ja!

manchini

É possível que seja a versão da JDK/JRE

Você pode fazer o downgrade pra versão 1.6.18

ou passar como parâmetro

-Dsun.security.ssl.allowUnsafeRenegotiation=true

Tive o mesmo problema aqui de “”, formatei a maquina semana passada dai paro de funcionar tudo…

Li no forum que depois da versão 1.6.19 foi desabilitado uns negocio por segurança.

starkiller

Cara li isso em outro lugar, e coloquei essa propriedade, mas no meu fonte mesmo:

System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");

e agora o erro eh esse citado abaixo:

23/09/2010 11:03:18 com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection post
GRAVE: SAAJ0008: Bad Response; Forbidden
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (403Forbidden
	at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(Unknown Source)
	at com.melo.teste.Soap.transmitir(Soap.java:44)
	at com.melo.teste.Teste.main(Teste.java:76)
Caused by: java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (403Forbidden
	at java.security.AccessController.doPrivileged(Native Method)
	... 3 more
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (403Forbidden
	at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(Unknown Source)
	at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection$PriviledgedPost.run(Unknown Source)
	... 4 more

CAUSE:

java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (403Forbidden
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(Unknown Source)
	at com.melo.teste.Soap.transmitir(Soap.java:44)
	at com.melo.teste.Teste.main(Teste.java:76)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (403Forbidden
	at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(Unknown Source)
	at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection$PriviledgedPost.run(Unknown Source)
	... 4 more

CAUSE:

java.security.PrivilegedActionException: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (403Forbidden
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(Unknown Source)
	at com.melo.teste.Soap.transmitir(Soap.java:44)
	at com.melo.teste.Teste.main(Teste.java:76)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (403Forbidden
	at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(Unknown Source)
	at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection$PriviledgedPost.run(Unknown Source)
	... 4 more

Como faco pra setar essa propriedade, eh no java compiler no Eclipse???, ou vou pelo prompt mesmo??
Se puder me ajudar mais um pouco, agradeco. Ja to rodando o google aqui pra solucionar!
Desde ja vlw pela forca!

starkiller

Caras, acho que consegui, Tipo coloquei aquela propriedade nas minha configuracoes de seguranca, e fiz os passos descritos pelo nosso amigo alexegidio no outro post dele citado mais acima, e nao me retornou mais o erro, e sim me retorna a menssagem:

soap:ServerServer was unable to process request. ---> Object reference not set to an instance of an object.

acho que agora eh so arrumar o protocolo soap! Qualquer coisa posto mais aqui!

F

o erro de 403Forbidden normalmente é relacionado a certificados, da uma verificada nos certificados do servidor e no e-cnpj

starkiller

Pois eh esse erro aew, ja nao aparece mais, esta aparecendo esse agora:

soap:ServerServer was unable to process request. ---> Object reference not set to an instance of an object.

acredito que seja meu protocolo soap que ta indo errado!! Vou pegar o exemplo dos colegas aqui no forum, ja que gerar essas classes pelo Axis deixa bem complicado de se entender!

starkiller

starkiller:
Pois eh esse erro aew ja nao aparece mais, resolvi o problema exportando as privates keys como o alexgidio explica em um outro post dele, esta aparecendo esse erro agora:

soap:ServerServer was unable to process request. ---> Object reference not set to an instance of an object.

acredito que seja meu protocolo soap que ta indo errado!! Vou pegar o exemplo dos colegas aqui no forum, ja que gerar essas classes pelo Axis deixa bem complicado de se entender!

F

não seria mais facil você gerar o acesso ao wsdl usando axis2 ?

fica bem facil de usar…

starkiller

f-schmitt:
não seria mais facil você gerar o acesso ao wsdl usando axis2 ?

fica bem facil de usar…

Pode ate ser, vou tentar fazer aqui!

starkiller

f-schmitt, vc teria algum exemplo de como eu chamo o servico de recepcao, usando o gerador do Axis2…ta bem complicado de enteder essas classes geradas por ele. Vc poderia me ajudar?

starkiller

Vlw Galera, consegui ja implementar pelo axis 2!! Vlw pela forca de todos!

V

Amigo o que vc fez pra resolver esse problema… tentei de tudo e estava para desistir até que encontrei nesse forum que vc tinha o mesmo problema… mas não consegui entender o que vc fez pra resolver.

Pode me ajudar por favor?

19/11/2010 09:26:11 com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection post

SEVERE: SAAJ0009: Message send failed

19/11/2010 09:26:11 Soap main

SEVERE: null

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:157)

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:151)

 2 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:355)

at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection$PriviledgedPost.run(HttpSOAPConnection.java:180)

 4 more
alves.Felipe

vanderlsilva , como vc gerou suas classes? usou Axis 2?

starkiller

Cara seguinte, eu usei Axis 2 pra gerar as classes apartir do wsdl! Usei a ferramenta que ja vem no Eclipse. Feito isso implementei minha classe de envio usando os metodos do das classe geradas pelo Axis 2:

Ficow assim:

public String sendDpec(String xml) throws Exception{
System.out.println(“Entrei no Metodo!”);

String retorno = null;
	String dadosXml = xml;

	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", certificateUrl);//Aqui vem o arquivo do certificado do seu cliente  
	System.setProperty("javax.net.ssl.keyStorePassword", keypass);//Aqui a senha deste certificado  

	System.setProperty("javax.net.ssl.trustStoreType", "JKS");  
	System.setProperty("javax.net.ssl.trustStore", keyStoreUrl);//Aqui vem o arquivo criado atrav&#65533;s do comando keytool 
	System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");


	dadosXml = "<pog>"+dadosXml.substring(dadosXml.indexOf("?>")+2)+"</pog>";

	SCERecepcaoRFBStub.SceCabecMsg cabec = new SCERecepcaoRFBStub.SceCabecMsg();  
	cabec.setVersaoDados("1.01");  

	SCERecepcaoRFBStub.SceCabecMsgE cabecMsgE = new SCERecepcaoRFBStub.SceCabecMsgE();  
	cabecMsgE.setSceCabecMsg(cabec);  

	XMLStreamReader dad = null;

	try {
		dad = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(dadosXml));
	} catch (Exception e) {
		e.printStackTrace();
	}

	SCERecepcaoRFBStub.SceDadosMsg dadosMsg = null;
	try {
		dadosMsg = SCERecepcaoRFBStub.SceDadosMsg.Factory.parse(dad);
	} catch (Exception e) {
		e.printStackTrace();
	}

	SCERecepcaoRFBStub stub;
	try {
		stub = new SCERecepcaoRFBStub();
		retorno = stub.sceRecepcaoDPEC(dadosMsg, cabecMsgE).getExtraElement().toString();
	} catch (Exception e) {
		e.printStackTrace();
	}

	System.out.println("Cheguei no retorno");
	return retorno;
}

ficow assim! Recaptulando, gere suas classe usando Axis 2 e a ferramenta do eclipse. E use essa minha implementação ai em cima! Qualquer coisa tamo ai!

V

alves.Felipe

Não consegui fazer pelo axis2 porque não sei como fazer
estou usando a classe que possoal citou

segue… da olhada

import java.net.MalformedURLException;
import java.net.URL;

import java.security.Security;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.swing.JOptionPane;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.soap.MessageFactory;

import javax.xml.soap.SOAPConnection;

import javax.xml.soap.SOAPConnectionFactory;

import javax.xml.soap.SOAPMessage;

import javax.xml.soap.SOAPConstants;
import org.w3c.dom.Document;

import org.w3c.dom.Node;

import org.w3c.dom.Element;

public class Soap {

public static Node transmitir(URL endpoint, Document cabecDoc, Document dadosDoc, String soapAction) throws Exception {
    Node elemento = null;
    Node adotado = null;


    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", "D:\\Nfe\\certificado.pfx");
    System.setProperty("javax.net.ssl.keyStorePassword", "senha");


    SOAPMessage reqSoap = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage();

    reqSoap.getSOAPPart().setXmlStandalone(true);
    reqSoap.getMimeHeaders().addHeader("SOAPAction", soapAction);

    elemento = cabecDoc.getDocumentElement();
    adotado = reqSoap.getSOAPPart().adoptNode(elemento);
    reqSoap.getSOAPHeader().appendChild(adotado);

    elemento = dadosDoc.getDocumentElement();
    adotado = reqSoap.getSOAPPart().adoptNode(elemento);
    reqSoap.getSOAPBody().appendChild(adotado);


    SOAPConnectionFactory cnnFactory = SOAPConnectionFactory.newInstance();
    SOAPConnection cnn = cnnFactory.createConnection();
    SOAPMessage respSoap = cnn.call(reqSoap, endpoint);

    Node nodo = respSoap.getSOAPBody().getChildNodes().item(0);

    return nodo;
}

public static void main(String[] args) {
    URL endpoint2 = null;
    try {
        endpoint2 = new URL("https://homologacao.nfe.ms.gov.br/homologacao/services2/NfeStatusServico2");
    } catch (MalformedURLException ex) {
        Logger.getLogger(Soap.class.getName()).log(Level.SEVERE, null, ex);
    }

    Document Doc = null;
    Document Doc2 = null;
    try {
        Doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
        Doc2 = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
    } catch (ParserConfigurationException ex) {
        Logger.getLogger(Soap.class.getName()).log(Level.SEVERE, null, ex);
    }

    // Doc
    Element nfeCabecMsg = Doc.createElement("nfeCabecMsg");
    nfeCabecMsg.setAttribute("xmlns", "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2");


    Element versaoDados = Doc.createElement("versaoDados");
    versaoDados.setTextContent("2.00");
    nfeCabecMsg.appendChild(versaoDados);

    Element cUF = Doc.createElement("cUF");
    cUF.setTextContent("51");
    nfeCabecMsg.appendChild(cUF);

    Doc.appendChild(nfeCabecMsg);

    Element nfeDadosMsg = Doc2.createElement("nfeDadosMsg");
    nfeCabecMsg.setAttribute("xmlns", "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2");

    Element consStatServ = Doc2.createElement("consStatServ");
    consStatServ.setAttribute("xmlns", "http://www.portalfiscal.inf.br/nfe");
    consStatServ.setAttribute("versao", "2.00");

    Element tpAmb = Doc2.createElement("tpAmb");
    tpAmb.setTextContent("2");
    consStatServ.appendChild(tpAmb);

    Element cUF2 = Doc2.createElement("cUF");
    cUF2.setTextContent("2");
    consStatServ.appendChild(cUF2);

    Element xServ = Doc2.createElement("xServ");
    xServ.setTextContent("STATUS");
    consStatServ.appendChild(xServ);

    nfeDadosMsg.appendChild(consStatServ);

    Doc2.appendChild(nfeDadosMsg);


    String soapAction2 = "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2/nfeStatusServicoNF2";


    try {

        JOptionPane.showMessageDialog(null, transmitir(endpoint2, Doc, Doc2, soapAction2).toString());
    } catch (Exception ex) {
        Logger.getLogger(Soap.class.getName()).log(Level.SEVERE, null, ex);
    }
}

}

Mas da sempre o erro que falei acima…

alves.Felipe

as classes tem que ser iguais ao que o starkiller postou…
da uma olhada ai para configurar o Axis 2 no eclipse…
http://www.eclipse.org/webtools/community/tutorials/BottomUpAxis2WebService/bu_tutorial.html

starkiller

Cara o que ta faltando no teu codigo é essa propriedade na parte de segurança SSL:

System.setProperty(“sun.security.ssl.allowUnsafeRenegotiation”, “true”);

O que ocorre é que a sun colocou esse entrave depois da versão 1.6.2.
Coloca isso ae que vai funcionar!

Criado 9 de outubro de 2009
Ultima resposta 20 de nov. de 2010
Respostas 54
Participantes 11