NFE - Consumir WS DPEC

54 respostas
A

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

A

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 =/

A

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 =/

F

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

F

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;
	}
}
A

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!

F

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 } );
A

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…

F

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?

A

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…

F

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);
A

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.

A

tipsico:
fscontato

que valor é informado em soapAction no seu exemplo?

obrigado.

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

R

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

A

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

R

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?!

A

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

R

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

A

rodrigobraz, já conseguiu resolver o problema ?

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

R

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

S

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.

A

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

S

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!

A

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

S

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!

S

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!

M

É 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.

S

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!

S

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

S

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!

S

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…

S

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!

S

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?

S

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
A

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

S

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…

A

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

S

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