NFe 2.0

Galera do portal,

Alguem ja implementou os novos webservices da nota fiscal eletronica, os webservice 2.0. Estou usando o JAX-WS.
O codigo que foi gerado pelo netbeans foi esse:

 br.com.ces.wsdl.cliente.homologacao.mg.retrecepcao.NfeRetRecepcao2 service = new br.com.ces.wsdl.cliente.homologacao.mg.retrecepcao.NfeRetRecepcao2();
 br.com.ces.wsdl.cliente.homologacao.mg.retrecepcao.NfeRetRecepcao2Soap port = service.getNfeRetRecepcao2Soap12();
 // TODO initialize WS operation arguments here
 br.com.ces.wsdl.cliente.homologacao.mg.retrecepcao.NfeDadosMsg nfeDadosMsg = new br.com.ces.wsdl.cliente.homologacao.mg.retrecepcao.NfeDadosMsg();
 // TODO process result here
br.com.ces.wsdl.cliente.homologacao.mg.retrecepcao.NfeRetRecepcao2Result result = port.nfeRetRecepcao2(nfeDadosMsg);
System.out.println("Result = "+result);

Como que eu vou usar isso meu deus!!!
Por que o povo do governo nao coloca os exemplos de como usar isso!!!

Att

A implementação pode ser feita de diversas maneiras,

Tem um tópico aqui no guj que um cara ensina a usar o WS com o JAX

http://www.guj.com.br/posts/list/206765.java

Não muda muita coisa pra versão 1.xx, o unico problema do JAX é que ele não gera corretamente, ai vc tem q modificar os fontes na mão

Eu ja tive problema parecido quando precisei acessar um webservice do sintegra, com o netbeans nao consegui nem a pau gerar o codigo correto pelo JAX, instalei o eclipse gerei um projeto webservice e busquei o wsdl ele gera as classes e codigos pra mim, ae copiei e adaptei para o netbeans e ta tudo belezinha

falows

Ok galera.

Vou testar, com certeza surgira duvidas.

O tutorial citado parece ser bem tranquilo que fazer.

Valeu galera

[quote=furacao123]Eu ja tive problema parecido quando precisei acessar um webservice do sintegra, com o netbeans nao consegui nem a pau gerar o codigo correto pelo JAX, instalei o eclipse gerei um projeto webservice e busquei o wsdl ele gera as classes e codigos pra mim, ae copiei e adaptei para o netbeans e ta tudo belezinha

falows[/quote]

Qual plugin vc usou no eclipse? tem como voce postar um exemplo de como ficou o seu codigo?

Não usei plugin nenhum apenas instalei o eclipse J2EE ae voce vai la em criar projeto e em webservices voce linka com o wsdl e ele cria as classes para acesso cliente ao webservice, não tem como te mostrar exemplo pois o webservice que eu acessava é de função diferente, depois que voce gerar pelo eclipse confronta com o do netbeans, no meu caso depois de muito tempo tentando eu abandonei a geração automatica do netbeans e copiei tudo oq o eclipse gerou no projeto no netbeans e dei continuidade no projeto

O Eclipse usa o Axis2 pra gerar os stubs para o wsdl,

Eu criei tarefas no ant do netbeans para transformar os wsdl em java, assim eu só digo a pasta e ele transforma tudo.

zoren, mas no netbeans vc usa o axis2 ou jax-ws.

Como voce configurou o seu ant?

Att

Eu uso o Axis2, eu ia tentar fazer com o JAX-WS, mas ainda está nos planos.

A configuração das tarefas do axis2, vc consegue na própria documentação do Axis2.

Pra quem tiver interesse http://ws.apache.org/axis2/tools/1_4/CodegenToolReference.html

Galera,

Estou tentando usar o eclipse para gerar o cliente atraves dos wsdl’s da receita e esta dando o seguinte erro:

IWAB0399E Error in generating Java from WSDL:  java.io.IOException: No symbol table entry found for message {tns}nfeStatusServicoNF2nfeCabecMsg
    java.io.IOException: No symbol table entry found for message {tns}nfeStatusServicoNF2nfeCabecMsg
    at org.apache.axis.wsdl.symbolTable.FaultInfo.<init>(FaultInfo.java:138)
    at org.apache.axis.wsdl.symbolTable.SymbolTable.fillInBindingInfo(SymbolTable.java:2687)

Como que eu resolvo esse erro?

De qual estado você está tentando gerar?

Vou gerar de Minas Gerais e São Paulo.

Usei o Axis2 e foi tudo bem. Tive que fazer umas pequenas modificações, mas são coisas não muito grandes (apesar de ser no código do Axis2).

Galera,

Olha o meu codigo que gerei. Usei o Axis2, so que gerei os stubs atraves do wsdl2java.bat.

Abaixo o meu codigo completo:


public class Main {
    public static void main(String[] args) {
        setarDadosDoCertificadoA1();
        mandarParaReceita();
    }

    private static void mandarParaReceita() {
        try {
            String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><consStatServ xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"1.07\"><tpAmb>2</tpAmb><cUF>31</cUF><xServ>STATUS</xServ></consStatServ>";
            NfeStatusServico2Stub stub = new NfeStatusServico2Stub();
            NfeStatusServico2Stub.NfeDadosMsg dados = new NfeStatusServico2Stub.NfeDadosMsg();
            OMElement el;

            el = AXIOMUtil.stringToOM(xml);
            dados.setExtraElement(el);
            NfeStatusServico2Stub.NfeCabecMsg cab = new NfeStatusServico2Stub.NfeCabecMsg();
            cab.setVersaoDados("2.00");
            cab.setCUF("31");

            NfeStatusServico2Stub.NfeCabecMsgE cabE = new NfeStatusServico2Stub.NfeCabecMsgE();
            cabE.setNfeCabecMsg(cab);

            System.out.println(stub.nfeStatusServicoNF2(dados, cabE).getExtraElement());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void setarDadosDoCertificadoA1() {
        try {

            System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
            Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

            System.setProperty("javax.net.ssl.trustStoreType", "JKS");
            System.setProperty("javax.net.ssl.trustStore", "C:\\certificados\\keystore.jks");
            System.setProperty("javax.net.ssl.trustStorePassword", "123456");

            System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
            System.setProperty("javax.net.ssl.keyStore", "C:\\certificados\\certificado.pfx");
            System.setProperty("javax.net.ssl.keyStorePassword", "123456");

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

Esta dando o seguinte erro:

org.apache.axis2.AxisFault: Transport error: 404 Error: Not Found
        at org.apache.axis2.transport.http.HTTPSender.handleResponse(HTTPSender.java:310)
        at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:200)
        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 com.teste.wsdl.NfeStatusServico2Stub.nfeStatusServicoNF2(NfeStatusServico2Stub.java:196)
        at javaapplication9.Main.mandarParaReceita(Main.java:44)
        at javaapplication9.Main.main(Main.java:24)

Onde esta o erro desse codigo?

Att

Dá uma olhada no WSDL e ve para onde ele está tentando enviar o XML

Tive um problema com Goiás que os WSDL estavam mirando no localhost

[quote=zoren]Dá uma olhada no WSDL e ve para onde ele está tentando enviar o XML

Tive um problema com Goiás que os WSDL estavam mirando no localhost

[/quote]

Olhei os meus enderecos e estão apontando para:

https://hnfe.fazenda.mg.gov.br/nfe2/services/NfeStatus2

Em anexo o meu stub gerado pelo axis.

Galera,

Dei uma pernada com relação ao erro acima de URl, realmente estava errado a URL, arrumei a URL e agora esta dando esse erro:

org.apache.axis2.AxisFault: Transport level information does not match with SOAP Message namespace URI
        at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
        at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:123)
        at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:67)
        at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:354)
        at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:417)
        at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
        at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
        at com.teste.wsdl.NfeStatusServico2Stub.nfeStatusServicoNF2(NfeStatusServico2Stub.java:196)
        at javaapplication5.Main.mandarParaReceita(Main.java:43)
        at javaapplication5.Main.main(Main.java:19)
Caused by: org.apache.axiom.soap.SOAPProcessingException: Transport level information does not match with SOAP Message namespace URI
        at org.apache.axis2.builder.BuilderUtil.validateSOAPVersion(BuilderUtil.java:768)
        at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:62)
        at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:197)
        at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:145)
        at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:108)
        ... 8 more

Esse negocio do governo ta foda, a cada hora surge um problema diferente.

vcsmetallica, conseguiu resolver o problema da mensagem : org.apache.axis2.AxisFault: Transport level information does not match with SOAP Message namespace URI ?

Estou com o mesmo problema quando vou consultar o status do PR por exemplo.

Entao.

Nao resolvi. Estou tentando mesmo com o JAX-WS.

Com JAX-WS consegui enviar, agora estou com problemas em pegar o retorno da nota

Att

vcsmetallica

Entao Galera,

Como respondi acima, ainda estou tendo problemas com o JAX-WS.

Consegui enviar a minha nota, mas quando estou usando o web service para consutar a nota que mandei esta dando o seguinte erro:

javax.xml.ws.soap.SOAPFaultException: Fault occurred while processing.
        at org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.createSystemException(MethodMarshallerUtils.java:1249)
        at org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.demarshalFaultResponse(MethodMarshallerUtils.java:975)
        at org.apache.axis2.jaxws.marshaller.impl.alt.DocLitBareMethodMarshaller.demarshalFaultResponse(DocLitBareMethodMarshaller.java:412)
        at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.getFaultResponse(JAXWSProxyHandler.java:443)
        at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.createResponse(JAXWSProxyHandler.java:406)
        at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:330)
        at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:159)
        at $Proxy26.nfeRetRecepcao2(Unknown Source)
        at br.com.ces.wsdl.RetRecepcao.enviarRetRecepcao(RetRecepcao.java:64)
        at br.com.ces.controle.ControleConsultarRetRecepcaoNFe.consultarNFe(ControleConsultarRetRecepcaoNFe.java:45)
        at br.com.ces.junit.TesteConsutaNFe.enviarNFE(TesteConsutaNFe.java:22)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
        at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
        at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
        at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
        at junit.framework.JUnit4TestAdapter.run(JUnit4TestAdapter.java:39)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:422)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:931)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:785)

Não estou conseguindo identificar esse erro.

Abaixo os meus codigos

Minha classe que eu envio para a receita - ConsReciNFe:

@XmlRootElement(name = "consReciNFe")
@XmlAccessorType(XmlAccessType.FIELD)
public class ConsReciNFe {

    @XmlAttribute
    private String versao;

    @XmlAttribute
    private String xmlns;

    @XmlElement(name = "tpAmb")
    private Integer tpAmb = 2;

    @XmlElement(name = "nRec")
    private String nRec;


    public ConsReciNFe() {
        versao = "2.00";
        xmlns = "http://www.portalfiscal.inf.br/nfe";
    }
//GET's e SET's
}

Abaixo as linhas que eu uso para enviar

NfeRetRecepcao2Soap12 nfeRetRecepcao2Soap12 = new NfeRetRecepcao2().getNfeRetRecepcao2Soap12();
NfeDadosMsg dadosMsg = new NfeDadosMsg();
dadosMsg.getContent().add(consReciNFe);
Holder<NfeCabecMsg> nfeCabecMsg = new Holder<NfeCabecMsg>(createNfeCabecMsgRetRecepcao());
NfeRetRecepcao2Result nfeRetRecepcao2Result = nfeRetRecepcao2Soap12.nfeRetRecepcao2(dadosMsg, nfeCabecMsg);

meu metodo que cria o cabeçalho

public NfeCabecMsg createNfeCabecMsgRetRecepcao() {
        NfeCabecMsg cabecMsg = new NfeCabecMsg();
        cabecMsg.setCUF("31");
        cabecMsg.setVersaoDados("2.00");
        return cabecMsg;
    }

Valeu mais uma vez galera.