Criar WS parar validar Nota Fiscal Eletrônica

11 respostas
J

Boa tarde galera.

Preciso desenvolver o sistema de NFe aqui no trabalho e comecei a pesquisar a respeito.

Já baixei e li o Manual_Integracao_Contribuinte_4.01-NT2009.006.pdf e já segui um tutorial para criar um WebService para saber como funcionam (tutorial de um webservice para conversão de temperatura).

Tentei criar o WS para validar a nota (que acredito seja a primeira coisa a fazer) e não consegui.

Já baixei todos os schemas do site da NFe mas não consegui criar o WS com o wsdl do site.

Estou usando o Axis2 (que era o usado no tutorial que segui) mas vi aqui no site que a maioria usa o Axis. Devo remover o Axis2 e usar o Axis?

Alguem pode me ajudar ou mandar algum link (tinha achado um tópico que tinha link para várias dúvidas sobre NFe há algum tempo, mas não acho mais.)

Grato

11 Respostas

R

Não entendi muito bem o que você quer, mas já existe um serviço pra validação da NFe

https://www.sefaz.rs.gov.br/NFE/NFE-VAL.aspx

J

No meu trabalho a gente fazo sistema pra fabricantes de joias.

E agora começamos a desenvolver o processo pra emitir NFe. Então estou tentando criar os WS. Pelo que eu li é necessário criar os WS com o wsdl do site da NFe.

É isso que estou tentando fazer. Comecei pelo WS pra validar a nota, mas não consegui nada. =/

R

JocaBaldini:
No meu trabalho a gente fazo sistema pra fabricantes de joias.

E agora começamos a desenvolver o processo pra emitir NFe. Então estou tentando criar os WS. Pelo que eu li é necessário criar os WS com o wsdl do site da NFe.

É isso que estou tentando fazer. Comecei pelo WS pra validar a nota, mas não consegui nada. =/


Você não precisa criar Webservice nenhum. O que você tem que fazer é acessar o que a SEFAZ disponibiliza.

Esse link tem muitos tutoriais com código pronto pra isso: http://www.javac.com.br/jc/posts/list/997-projeto-nfe-cte-cce-comece-por-aqui.page

Ele usa o Axis2, que não é muito recomendado por ter que adicionar muitas libs, mas se quiser algo rápido e pronto, tá tudo aí

J

Vlw Rodrigo, vou dar uma olhada no link.

Obrigado

A

Olá …

segue a função que utilizo para validar minhas notas com o arquivo de schema da receita nfe_v2.00.xsd:

public static boolean validaXML(File xml) {

        File f = new File(xml.getAbsolutePath());

        try {

            SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
            File schemaLocation = new File("xsd/nfe_v2.00.xsd");
            Schema schema = factory.newSchema(schemaLocation);
            Validator validator = schema.newValidator();
            Source source = new StreamSource(xml);
            validator.validate(source);
            return true;

        } catch (SAXException ex) {
            JOptionPane.showMessageDialog(null, ex.getLocalizedMessage());
            ex.printStackTrace();
            return false;
        } catch (IOException e) {
            JOptionPane.showConfirmDialog(null, e.getLocalizedMessage());
            e.printStackTrace();
            return false;
        }
    }

espero ter ajudado!

J

Rodrigo, o link que vc mandou não está funcionando.

Alan, vlw pelo código… Vai me ajudar depois. Mas vi que expliquei muito mal oq eu queria.

Na verdade quero gerar o XML, mas não entendi como fazer.

A

Olá Joca,

bom cara … acho que vc tem um longo caminho então …

vc já fez as classes que determinam as variaveis que vc precisará colocar na NFe?
no seu manual vai ter os grupos A, B, C… essas classes tem que ser feitas.

aqui vai o exemplo da minha classe do grupo A para seu melhor entendimento:

import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;

/*
 * GRUPO DAS INFORMAÇÕES DA NF-e
 */

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "infNFe")
public class A {
    
    @XmlAttribute
    private String versao;            //Versão do Leiaute
    @XmlAttribute(name = "Id")
    private String Id;                //Identificador da NFe

    private String chaveNfe;          //Variavel passada para auxiliar na construção do registro.

    private B ide;
    private C emit;
    private D avulsa;                 //Não utilizar
    private E dest;
    private F retirada;
    private G entrega;
    private List<H> det;
    private W total;
    private X transp;
    private Y cobr;
    private Z infAdic;
    private ZA exporta;
    private ZB compra;
    private ZC cana;
    
    /**********GETTERS**********/
    
    public String getId() {
        return Id;
    }

    public String getVersao() {
        return versao;
    }
    
    public String getChaveNfe() {
        return chaveNfe;
    }

    public B getIde() {
        return ide;
    }
    
    public C getEmit() {
        return emit;
    }

    public D getAvulsa() {
        return avulsa;
    }

    public E getDest() {
        return dest;
    }

    public F getRetirada() {
        return retirada;
    }

    public G getEntrega() {
        return entrega;
    }

    public List<H> getDet() {
        return det;
    }

    public W getTotal() {
        return total;
    }

    public X getTransp() {
        return transp;
    }

    public Y getCobr() {
        return cobr;
    }

    public Z getInfAdic() {
        return infAdic;
    }

    public ZA getExporta() {
        return exporta;
    }

    public ZB getCompra() {
        return compra;
    }

    public ZC getCana() {
        return cana;
    }
    
    
    /**********SETTERS**********/
    
    public void setId(String Id) {
        this.Id = Id;
    }

    public void setVersao(String versao) {
        this.versao = versao;
    }
    
    public void setChaveNfe(String chaveNfe) {
        this.chaveNfe = chaveNfe;
    }
    
    public void setIde(B ide) {
        this.ide = ide;
    }
    
    public void setEmit(C emit) {
        this.emit = emit;
    }

    public void setAvulsa(D avulsa) {
        this.avulsa = avulsa;
    }

    public void setDest(E dest) {
        this.dest = dest;
    }

    public void setRetirada(F retirada) {
        this.retirada = retirada;
    }

    public void setEntrega(G entrega) {
        this.entrega = entrega;
    }

    public void setDet(List<H> det) {
        this.det = det;
    }

    public void setTotal(W total) {
        this.total = total;
    }

    public void setTransp(X transp) {
        this.transp = transp;
    }

    public void setCobr(Y cobr) {
        this.cobr = cobr;
    }

    public void setInfAdic(Z infAdic) {
        this.infAdic = infAdic;
    }

    public void setExporta(ZA exporta) {
        this.exporta = exporta;
    }

    public void setCompra(ZB compra) {
        this.compra = compra;
    }

    public void setCana(ZC cana) {
        this.cana = cana;
    }
    
    
    /**********TOSTRING**********/
    
    @Override
    public String toString(){
        return "A"+"|"
                +getVersao()+"|"
                +"NFe"+getChaveNfe();
    }

}

utilizei a biblioteca do xerces na versao 2.11.0 para desenvolver minha solução
perceba que na classe existem anotações … as quais serão usadas para gerar seu xml…

bom … após o desenvolvimento dos blocos de informações vc tera que preenche-los com as informações e após esse preenchimento vc poderá transformar seu objeto em um arquivo xml com a seguinte função:

public synchronized File escreveNota(Connection c, PedidoVenda pv, Compra compra, String caminhoCertificado, String senha){
        
        try {
            
            File arquivoXml = new File(nomeArquivoCompleto);

            JAXBContext context = JAXBContext.newInstance(NFe.getClass());
            Marshaller marshaller = context.createMarshaller();
            marshaller.marshal(NFe, new FileWriter(arquivoXml));
            Marshaller m = context.createMarshaller();
            m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
            m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

            FileReader fr = new FileReader(arquivoXml);
            BufferedReader br = new BufferedReader(fr);

            String conteudoXML = "";
            String str = null;

            while((str = br.readLine()) != null){
                    str = str.replace("ns2:", "");
                    str = str.replace(":ns2", "");
                    conteudoXML += str;
            }

            FileWriter fw = new FileWriter(arquivoXml);
            BufferedWriter bw = new BufferedWriter(fw);

            bw.write(conteudoXML);	
            bw.flush();
            bw.close();

            br.close();
            
            return arquivoXml;
            
        } catch (JAXBException ex) {
            Logger.getLogger(FuncaoCarregarNFe.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        } catch (IOException ex) {
            Logger.getLogger(FuncaoCarregarNFe.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        } catch (Exception ex) {
            Logger.getLogger(FuncaoCarregarNFe.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
        
    }

sei que há outras soluções e esta talvez não seja a melhor … mas esta é a que me atende

espero ter ajudado!

J

Tenho um longo caminho sim Alan.

Sabia disso qd comecei.

Quanto à criação do XML, já tinha algumas coisas feitas aqui e mexendo um pouco consegui setar todas as variaveis da nota e criar o documento XML e grava-lo no bd. Mas ele é feito a partir de Elements e no final transformado em doc para gravar no BD.

Se abrir o arquivo salvo ele está em XML (a formatação no Firefox mostra certinho), mas preciso transformá-lo em arquivo XML mesmo para fazer a verificação conforme o codigo que vc enviou anteriormente.

Alguem sabe como fazer essa conversão?

J

Segue o código que eu usei pra criar.

Format format = Format.getCompactFormat();
			format.setExpandEmptyElements(false);
			XMLOutputter xout = new XMLOutputter(format);
			Document doc = null;
			File xml = null;

			NotaFiscalDAO nDAO = new NotaFiscalDAO();
			NotaFiscal notaFiscal = (NotaFiscal)nDAO.findByPrimaryKey(id);
			Endereco endereco = notaFiscal.getEmpresa().getEndereco();

			String statusValidacao = notaFiscal.isValida();
			if(statusValidacao.equals("")){

				String chaveSemDV = endereco.getMunicipio().getCodUF()+Util.getDate(0, "yyMM")+Util.clean(notaFiscal.getEmpresa().getCnpj())+"55"+notaFiscal.getSerie()+notaFiscal.getNumero()+notaFiscal.getTipoEmissao()+Util.decimalFormat(notaFiscal.getId(),"00000000");
				int DV = calcularDV(chaveSemDV);

				// Tag inicial   
				Element nfeProc = new Element("nfeProc").setNamespace(ns);
				nfeProc.setAttribute("versao", "2.00");

				// Cabeçalho
				Element NFe = new Element("NFe").setNamespace(ns);

				Element infNFe = new Element("infNFe").setNamespace(ns);
				infNFe.setAttribute("Id", "NFe"+chaveSemDV+DV);
				infNFe.setAttribute("versao", "2.00");

				Element ide = new Element("ide").setNamespace(ns);

				Element cUF = new Element("cUF").setNamespace(ns);
				cUF.addContent(endereco.getMunicipio().getCodUF());
				ide.addContent(cUF);

				Element cNF = new Element("cNF").setNamespace(ns);
				cNF.addContent(Util.decimalFormat(notaFiscal.getId(), "00000000"));
				ide.addContent(cNF);

				Element natOp = new Element("natOp").setNamespace(ns);
				natOp.addContent(notaFiscal.getCfop().getDescricao());
				ide.addContent(natOp);
				Element indPag = new Element("indPag").setNamespace(ns);
				indPag.addContent("0");
				ide.addContent(indPag);

				Element mod = new Element("mod").setNamespace(ns);
				mod.addContent("55");
				ide.addContent(mod);

				Element serie = new Element("serie").setNamespace(ns);
				serie.addContent("1");
				ide.addContent(serie);

				Element nNF = new Element("nNF").setNamespace(ns);
				nNF.addContent(notaFiscal.getNumeroClean());
				ide.addContent(nNF);

				Element dEmi = new Element("dEmi").setNamespace(ns);
				dEmi.addContent(Util.getDate(0, "yyyy-MM-dd"));
				ide.addContent(dEmi);

				Element dSaiEnt = new Element("dSaiEnt").setNamespace(ns);
				dSaiEnt.addContent(notaFiscal.getData("yyyy-MM-dd"));
				ide.addContent(dSaiEnt);

				Element hSaiEnt = new Element("hSaiEnt").setNamespace(ns);
				hSaiEnt.addContent(notaFiscal.getData("hh:mm:ss"));
				ide.addContent(hSaiEnt);		

				Element tpNF = new Element("tpNF").setNamespace(ns);
				tpNF.addContent("1");
				ide.addContent(tpNF);

				Element cMunFG = new Element("cMunFG").setNamespace(ns);
				cMunFG.addContent(endereco.getMunicipio().getCodUF()+endereco.getMunicipio().getCodMunicipio());
				ide.addContent(cMunFG);

				Element tpImp = new Element("tpImp").setNamespace(ns);
				tpImp.addContent("1");
				ide.addContent(tpImp);

				Element tpEmis = new Element("tpEmis").setNamespace(ns);
				tpEmis.addContent(String.valueOf(notaFiscal.getTipoEmissao()));
				ide.addContent(tpEmis);

				Element cDV = new Element("cDV").setNamespace(ns);
				cDV.addContent(String.valueOf(DV));
				ide.addContent(cDV);

				// Tipo do ambiente (1- Produção / 2- Homologação)
				Element tpAmb = new Element("tpAmb").setNamespace(ns);
				tpAmb.addContent("2");
				ide.addContent(tpAmb);

				Element finNFe = new Element("finNFe").setNamespace(ns);
				finNFe.addContent("1");
				ide.addContent(finNFe);

				Element procEmi = new Element("procEmi").setNamespace(ns);
				procEmi.addContent("1");
				ide.addContent(procEmi);

				Element verProc = new Element("verProc").setNamespace(ns);
				verProc.addContent(SystemConst.VersaoNFe);
				ide.addContent(verProc);

				infNFe.addContent(ide);

				// Emitente
				Element emit = new Element("emit").setNamespace(ns);

				Element cnpj = new Element("CNPJ").setNamespace(ns);
				cnpj.addContent(Util.clean(notaFiscal.getEmpresa().getCnpj()));
				emit.addContent(cnpj);

				Element xNome = new Element("xNome").setNamespace(ns);
				xNome.addContent(notaFiscal.getEmpresa().getRazaoSocial());
				emit.addContent(xNome);

				Element xFant = new Element("xFant").setNamespace(ns);
				xFant.addContent(notaFiscal.getEmpresa().getNomeFantasia());
				emit.addContent(xFant);

				Element enderEmit = new Element("enderEmit").setNamespace(ns);

				Element xLgr = new Element("xLgr").setNamespace(ns);
				xLgr.setText(endereco.getLogradouro());
				enderEmit.addContent(xLgr);

				Element nro = new Element("nro").setNamespace(ns);
				nro.addContent(endereco.getNumero());
				enderEmit.addContent(nro);

				Element xCpl = new Element("xCpl").setNamespace(ns);
				xCpl.addContent(endereco.getComplemento());
				enderEmit.addContent(xCpl);

				Element xBairro = new Element("xBairro").setNamespace(ns);
				xBairro.addContent(endereco.getBairro());
				enderEmit.addContent(xBairro);

				Element cMun = new Element("cMun").setNamespace(ns);
				cMun.addContent(endereco.getMunicipio().getCodUF()+endereco.getMunicipio().getCodMunicipio());
				enderEmit.addContent(cMun);

				Element xMun = new Element("xMun").setNamespace(ns);
				xMun.addContent(endereco.getMunicipio().getNomeMunicipio());
				enderEmit.addContent(xMun);

				Element UF = new Element("UF").setNamespace(ns);
				UF.addContent(endereco.getMunicipio().getSiglaUF());
				enderEmit.addContent(UF);

				Element CEP = new Element("CEP").setNamespace(ns);
				CEP.addContent(endereco.getCep().replace("-", ""));
				enderEmit.addContent(CEP);

				Element cPais = new Element("cPais").setNamespace(ns);
				cPais.addContent(endereco.getPais().getCodPais());
				enderEmit.addContent(cPais);

				Element xPais = new Element("xPais").setNamespace(ns);
				xPais.addContent(endereco.getPais().getNome());
				enderEmit.addContent(xPais);

				Element fone = new Element("fone").setNamespace(ns);
				fone.addContent(Util.clean(notaFiscal.getEmpresa().getTelefone1()));
				enderEmit.addContent(fone);

				emit.addContent(enderEmit);

				Element IE = new Element("IE").setNamespace(ns);
				IE.addContent(Util.clean(notaFiscal.getEmpresa().getIe()));
				emit.addContent(IE);

				Element CRT = new Element("CRT").setNamespace(ns);
				CRT.addContent("1");
				emit.addContent(CRT);

				infNFe.addContent(emit);

				// Destinatário
				Instituicao instituicao = (Instituicao)notaFiscal.getDestinatario();
				if(notaFiscal.getDestinatario() instanceof Cliente)
					endereco = ((Cliente)notaFiscal.getDestinatario()).getEnderecos().get(0);
				else
					endereco = ((Fornecedor)notaFiscal.getDestinatario()).getEnderecos().get(0);

				Element dest = new Element("dest").setNamespace(ns);

				Element cnpj2 = new Element("CNPJ").setNamespace(ns);
				cnpj2.addContent(Util.clean(instituicao.getCnpj()));
				dest.addContent(cnpj2);

				Element xNome2 = new Element("xNome").setNamespace(ns);
				xNome2.addContent(instituicao.getRazaoSocial());
				dest.addContent(xNome2);

				Element enderDest = new Element("enderDest").setNamespace(ns);

				Element xLgr2 = new Element("xLgr").setNamespace(ns);
				xLgr2.setText(endereco.getLogradouro());
				enderDest.addContent(xLgr2);

				Element nro2 = new Element("nro").setNamespace(ns);
				nro2.addContent(endereco.getNumero());
				enderDest.addContent(nro2);

				if(!endereco.getComplemento().equals("")){
					Element xCpl2 = new Element("xCpl").setNamespace(ns);
					xCpl2.addContent(endereco.getComplemento());
					enderDest.addContent(xCpl2);
				}

				Element xBairro2 = new Element("xBairro").setNamespace(ns);
				xBairro2.addContent(endereco.getBairro());
				enderDest.addContent(xBairro2);

				Element cMun2 = new Element("cMun").setNamespace(ns);
				cMun2.addContent(endereco.getMunicipio().getCodUF()+endereco.getMunicipio().getCodMunicipio());
				enderDest.addContent(cMun2);

				Element xMun2 = new Element("xMun").setNamespace(ns);
				xMun2.addContent(endereco.getMunicipio().getNomeMunicipio());
				enderDest.addContent(xMun2);

				Element UF2 = new Element("UF").setNamespace(ns);
				UF2.addContent(endereco.getMunicipio().getSiglaUF());
				enderDest.addContent(UF2);

				Element CEP2 = new Element("CEP").setNamespace(ns);
				CEP2.addContent(endereco.getCep().replace("-", ""));
				enderDest.addContent(CEP2);

				Element cPais2 = new Element("cPais").setNamespace(ns);
				cPais2.addContent(endereco.getPais().getCodPais());
				enderDest.addContent(cPais2);

				Element xPais2 = new Element("xPais").setNamespace(ns);
				xPais2.addContent(endereco.getPais().getNome());
				enderDest.addContent(xPais2);

				Element fone2 = new Element("fone").setNamespace(ns);
				fone2.addContent(Util.clean(instituicao.getTelefone1()));
				enderDest.addContent(fone2);

				dest.addContent(enderDest);

				Element IE2 = new Element("IE").setNamespace(ns);
				IE2.addContent(Util.clean(instituicao.getIe()));
				dest.addContent(IE2);
				
				Element email = new Element("email").setNamespace(ns);
				email.addContent(instituicao.getEmailFiscal());
				dest.addContent(email);				
											
				infNFe.addContent(dest);

				/*
				 *  DETALHAMENTO DOS PRODUTOS
				 */

				double valorTotal = 0;
				int i = 1;
				for(NotaFiscalItem item : notaFiscal.getItens()){

					Element det = new Element("det").setNamespace(ns);
					det.setAttribute("nItem", String.valueOf(i));

					Element prod = new Element("prod").setNamespace(ns);

					Element cProd = new Element("cProd").setNamespace(ns);
					cProd.addContent(item.getCodigo());    	
					prod.addContent(cProd);

					Element cEAN = new Element("cEAN").setNamespace(ns);	
					prod.addContent(cEAN);

					Element xProd = new Element("xProd").setNamespace(ns);
					xProd.addContent(item.getDescricao());    	
					prod.addContent(xProd);

					Element NCM = new Element("NCM").setNamespace(ns);
					NCM.addContent(item.getClassificacaoFiscal());    	
					prod.addContent(NCM);

					Element CFOP = new Element("CFOP").setNamespace(ns);
					CFOP.addContent(Util.clean(notaFiscal.getCfop().getCodigo()));    	
					prod.addContent(CFOP);

					Element uCom = new Element("uCom").setNamespace(ns);
					uCom.addContent(item.getUnidade());    	
					prod.addContent(uCom);

					Element qCom = new Element("qCom").setNamespace(ns);
					qCom.addContent(Util.decimalFormat(item.getQuantidade(), "0.0000", "en"));    	
					prod.addContent(qCom);

					Element vUnCom = new Element("vUnCom").setNamespace(ns);
					vUnCom.addContent(Util.decimalFormat(item.getValorUnitario(), "0.0000", "en"));    	
					prod.addContent(vUnCom);

					Element vProd = new Element("vProd").setNamespace(ns);
					vProd.addContent(Util.decimalFormat(item.getValorUnitario()*item.getQuantidade(), "0.00", "en"));    	
					prod.addContent(vProd);

					valorTotal += item.getValorUnitario()*item.getQuantidade();

					Element cEANTrib = new Element("cEANTrib").setNamespace(ns);
					prod.addContent(cEANTrib);

					Element uTrib = new Element("uTrib").setNamespace(ns);
					uTrib.addContent(item.getUnidade());    	
					prod.addContent(uTrib);

					Element qTrib = new Element("qTrib").setNamespace(ns);
					qTrib.addContent(Util.decimalFormat(item.getQuantidade(), "0.0000", "en"));    	
					prod.addContent(qTrib);

					Element vUnTrib = new Element("vUnTrib").setNamespace(ns);
					vUnTrib.addContent(Util.decimalFormat(item.getValorUnitario(), "0.0000", "en"));    	
					prod.addContent(vUnTrib);
					
					Element indTot = new Element("indTot").setNamespace(ns);
					indTot.addContent("1");    	
					prod.addContent(indTot);					

					det.addContent(prod);

					Element imposto = new Element("imposto").setNamespace(ns);    	    

					/*
					 * ICMS
					 */
					Element ICMS = new Element("ICMS").setNamespace(ns);
					Element ICMSSN102 = new Element("ICMSSN102").setNamespace(ns);

					Element orig = new Element("orig").setNamespace(ns);
					orig.addContent("0");    	
					ICMSSN102.addContent(orig);

					Element CSOSN = new Element("CSOSN").setNamespace(ns);
					CSOSN.addContent("400");    	
					ICMSSN102.addContent(CSOSN);

					ICMS.addContent(ICMSSN102);
					imposto.addContent(ICMS);

					/*
					 * PIS
					 */
					Element PIS = new Element("PIS").setNamespace(ns);
					Element PISOutr = new Element("PISOutr").setNamespace(ns);

					Element CST_PIS = new Element("CST").setNamespace(ns);
					CST_PIS.addContent("99");    	
					PISOutr.addContent(CST_PIS);

					Element vBC = new Element("vBC").setNamespace(ns);
					vBC.addContent("0");    	
					PISOutr.addContent(vBC);

					Element pPIS = new Element("pPIS").setNamespace(ns);
					pPIS.addContent("0");    	
					PISOutr.addContent(pPIS);

					Element vPIS = new Element("vPIS").setNamespace(ns);
					vPIS.addContent("0");    	
					PISOutr.addContent(vPIS);		

					PIS.addContent(PISOutr);
					imposto.addContent(PIS);

					/*
					 * COFINS
					 */
					Element COFINS = new Element("COFINS").setNamespace(ns);
					Element COFINSOutr = new Element("COFINSOutr").setNamespace(ns);

					Element CST_COFINS = new Element("CST").setNamespace(ns);
					CST_COFINS.addContent("99");    	
					COFINSOutr.addContent(CST_COFINS);

					Element vBC_COFINS = new Element("vBC").setNamespace(ns);
					vBC_COFINS.addContent("0");    	
					COFINSOutr.addContent(vBC_COFINS);

					Element pCOFINS = new Element("pCOFINS").setNamespace(ns);
					pCOFINS.addContent("0");    	
					COFINSOutr.addContent(pCOFINS);

					Element vCOFINS = new Element("vCOFINS").setNamespace(ns);
					vCOFINS.addContent("0");    	
					COFINSOutr.addContent(vCOFINS);		

					COFINS.addContent(COFINSOutr);
					imposto.addContent(COFINS);

					det.addContent(imposto);

					infNFe.addContent(det);
					i++;
				}

				Element total = new Element("total").setNamespace(ns);
				Element ICMSTot = new Element("ICMSTot").setNamespace(ns);

				Element vBC = new Element("vBC").setNamespace(ns).addContent("0.00");    	
				ICMSTot.addContent(vBC);	    

				Element vICMS = new Element("vICMS").setNamespace(ns).addContent("0.00");    	
				ICMSTot.addContent(vICMS);

				Element vBCST = new Element("vBCST").setNamespace(ns).addContent("0.00");    	
				ICMSTot.addContent(vBCST);

				Element vST = new Element("vST").setNamespace(ns);
				vST.addContent("0.00");    	
				ICMSTot.addContent(vST);

				Element vProd = new Element("vProd").setNamespace(ns);
				vProd.addContent(Util.decimalFormat(valorTotal, "0.00"));    	
				ICMSTot.addContent(vProd);

				Element vFrete = new Element("vFrete").setNamespace(ns).addContent("0.00");    	
				ICMSTot.addContent(vFrete);

				Element vSeg = new Element("vSeg").setNamespace(ns).addContent("0.00");    	
				ICMSTot.addContent(vSeg);

				Element vDesc = new Element("vDesc").setNamespace(ns).addContent("0.00");    	
				ICMSTot.addContent(vDesc);

				Element vII = new Element("vII").setNamespace(ns).addContent("0.00");    	
				ICMSTot.addContent(vII);

				Element vIPI = new Element("vIPI").setNamespace(ns).addContent("0.00");    	
				ICMSTot.addContent(vIPI);

				Element vPIS = new Element("vPIS").setNamespace(ns).addContent("0.00");    	
				ICMSTot.addContent(vPIS);

				Element vCOFINS = new Element("vCOFINS").setNamespace(ns).addContent("0.00");    	
				ICMSTot.addContent(vCOFINS);

				Element vOutro = new Element("vOutro").setNamespace(ns).addContent("0.00");    	
				ICMSTot.addContent(vOutro);

				Element vNF = new Element("vNF").setNamespace(ns).addContent(Util.decimalFormat(valorTotal, "0.00", "en"));    	
				ICMSTot.addContent(vNF);

				total.addContent(ICMSTot);
				infNFe.addContent(total);

				// TRANSPORTE
				Element transp = new Element("transp").setNamespace(ns);
				transp.addContent(new Element("modFrete").setNamespace(ns).addContent("0"));
				infNFe.addContent(transp);

				// INFORMAÇÕES ADICIONAIS
				Element infAdic = new Element("infAdic").setNamespace(ns);

				if(notaFiscal.getTipo()==SystemConst.NF_SAIDA && notaFiscal.getDestinatario() instanceof Cliente && !notaFiscal.isFolheado()){

					double totalEmitidoUltimos12Meses = nDAO.getValorAno(notaFiscal.getIdInstituicao(), Util.getDate(0, "yyyy-MM-dd"), "12,17,18,34");
					TaxasSimplesDAO tDAO = new TaxasSimplesDAO();
					TaxasSimples t = (TaxasSimples)tDAO.findByValor(totalEmitidoUltimos12Meses);

					infAdic.addContent(new Element("infAdFisco").setNamespace(ns).addContent("PERMITE O APROVEITAMENTO DO CREDITO DE ICMS NO VALOR DE R$ "+Util.decimalFormat(notaFiscal.getValor()*t.getIcms()/100, "#,##0.00", "pt")+", CORRESPONDENTE A ALIQUOTA DE "+Util.decimalFormat(t.getIcms(), "0.00", "pt")+" NOS TERMOS DO ARTIGO 23 DA LEI COMPL. 123"));

				}

				infAdic.addContent(new Element("infCpl").setNamespace(ns).addContent(Util.cleanAccenture(notaFiscal.getMensagens())));

				infNFe.addContent(infAdic);

				/*
				 *  Gerando documento
				 */
				NFe.addContent(0, infNFe);
				NFe.addContent(1, Signature);
				
				doc = new Document(NFe);
				
	            ByteArrayOutputStream arquivo = new ByteArrayOutputStream();
				xout.output(doc, arquivo);

				/**
				 * Salvar arquivo no banco de dados.
				 */

				nDAO.updateArquivo(id, arquivo.toByteArray(), chaveSemDV+DV);
A

Olá Joca,

de uma olhada nesse link
http://www.java-tips.org/other-api-tips/jdom/writing-a-jdom-tree-with-xmloutputter.html

acho que é o que vc está precisando…

espero ter ajudado!

J

Consegui criar o XML, mas não consigo validá-lo.

Segue o erro:

java.net.MalformedURLException: no protocol: [Document: [DocType: <!DOCTYPE purchase-order>], Root is [Element: <NFe [Namespace: http://www.portalfiscal.inf.br/nfe]/>]]
	at java.net.URL.<init>(URL.java:567)
	at java.net.URL.<init>(URL.java:464)
	at java.net.URL.<init>(URL.java:413)
	at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:650)
	at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:186)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:772)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
	at com.sun.org.apache.xerces.internal.jaxp.validation.StreamValidatorHelper.validate(StreamValidatorHelper.java:144)
	at com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorImpl.validate(ValidatorImpl.java:111)
	at javax.xml.validation.Validator.validate(Validator.java:127)
	at br.com.progold.nfe.GerarXML.validaXML(GerarXML.java:636)
	at br.com.progold.nfe.GerarXML.doGet(GerarXML.java:568)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	at java.lang.Thread.run(Thread.java:662)
no protocol: [Document: [DocType: <!DOCTYPE purchase-order>], Root is [Element: <NFe [Namespace: http://www.portalfiscal.inf.br/nfe]/>]]

Alguém sabe qual o problema???

Criado 24 de outubro de 2012
Ultima resposta 29 de out. de 2012
Respostas 11
Participantes 3