package br.com.caelum.stella.nfe.ws.integration;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.handler.Handler;
import org.apache.commons.lang.StringUtils;
import br.com.caelum.stella.nfe.Estados;
import br.com.caelum.stella.nfe.SOAPLoggingHandler;
import br.com.caelum.stella.nfe.VersaoNFE;
import br.com.caelum.stella.nfe.config.NFEProperties;
import br.com.caelum.stella.nfe.security.TokenAlgorithm;
import br.com.caelum.stella.nfe.security.TokenKeyStoreForWindows;
import br.com.caelum.stella.nfe.ws.sp.recepcao.NfeCabecMsg;
import br.com.caelum.stella.nfe.ws.sp.recepcao.NfeDadosMsg;
import br.com.caelum.stella.nfe.ws.sp.recepcao.NfeRecepcao2;
import br.com.caelum.stella.nfe.ws.sp.recepcao.NfeRecepcao2Soap12;
import br.com.caelum.stella.nfe.ws.sp.recepcao.ObjectFactory;
import br.com.caelum.stella.nfe.xsd.recepcao.TEnviNFe;
import br.com.caelum.stella.nfe.xsd.recepcao.TNFe;
import br.com.caelum.stella.nfe.xsd.recepcao.TNFe.InfNFe;
import br.com.caelum.stella.nfe.xsd.recepcao.TNFe.InfNFe.Ide;
public class NFeRecepcaoWSTest {
private static final boolean DEBUG_ENABLE = true;
private static final boolean LOG_ENABLE = true;
private static String tokenConfigFile = null;
private static String senhaDoCertificado = null;
private static String alias = null;
public static void main(String[] args) {
try {
NFEProperties prop = new NFEProperties();
tokenConfigFile = prop.getProperty("arquivo.config.token");
senhaDoCertificado = prop.getProperty("certificado.senha");
alias = prop.getProperty("certificado.alias");
TokenKeyStoreForWindows ks = new TokenKeyStoreForWindows(tokenConfigFile, TokenAlgorithm.PKCS11, senhaDoCertificado);
ks.getCertificateFor(alias).enableSSLForServer();
ObjectFactory factoryWS = new ObjectFactory();
br.com.caelum.stella.nfe.xsd.recepcao.ObjectFactory factoryXSD = new br.com.caelum.stella.nfe.xsd.recepcao.ObjectFactory();
NfeRecepcao2Soap12 envioLote = new NfeRecepcao2().getNfeRecepcao2Soap12();
NfeCabecMsg cabecMsg = factoryWS.createNfeCabecMsg();
cabecMsg.setCUF(Estados.SP.name());
cabecMsg.setVersaoDados(VersaoNFE.V_2_00.getVersao());
NfeDadosMsg dadosMsg = factoryWS.createNfeDadosMsg();
//lote de nfe
TEnviNFe enviNFe = factoryXSD.createTEnviNFe();
enviNFe.setIdLote("1");
enviNFe.setVersao(VersaoNFE.V_2_00.getVersao());
//um wrapper de nota do lote...
TNFe tnFe = factoryXSD.createTNFe();
//uma nota do lote...
InfNFe infNFe = factoryXSD.createTNFeInfNFe();
Ide ide = factoryXSD.createTNFeInfNFeIde();
// 3 cnpj (14)
// 4 modelo (2)
// 5 serie (3)
// 6 numero nfe (9)
// 7 forma de emissão (1)
// 8 codigo numerico (8)
//dados do emitente / nota
SimpleDateFormat dfAmerican = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat dfAnooMes = new SimpleDateFormat("yyMM");
Calendar dataEmissao = Calendar.getInstance();
String cnpj = "09661762000103";
ide.setCUF(Estados.SP.getCodigo());
ide.setCNF("00000001");
ide.setNatOp("venda");
ide.setIndPag("0");
ide.setMod("55");
ide.setSerie("0");
ide.setNNF("1");
ide.setDEmi(dfAmerican.format(dataEmissao.getTime()));
// ide.setDSaiEnt("2012-05-09");
// ide.setHSaiEnt("00:00:00");
ide.setTpNF("1");
ide.setCMunFG("3550308");
ide.setTpImp("1");
ide.setTpEmis("1");
ide.setTpAmb("2"); // ambiente
ide.setFinNFe("1");
ide.setProcEmi("0");
ide.setVerProc(VersaoNFE.V_2_00.getVersao());
String baseCdv = ide.getCUF()
+ dfAnooMes.format(dataEmissao.getTime())
+ cnpj
+ StringUtils.leftPad(ide.getMod(), 2, '0')
+ StringUtils.leftPad(ide.getSerie(), 3, '0')
+ StringUtils.leftPad(ide.getNNF(), 9, '0')
+ StringUtils.leftPad(ide.getNNF(), 9, '0')
+ ide.getTpEmis()
+ StringUtils.leftPad(ide.getCNF(), 8, '0');
// ValidadorDeDv mod = new ValidadorDeDV(new DigitoVerificadorInfo(null, null, null, null, null))
// ide.setCDV(cdv);
/*
cUF - Código da UF do emitente do Documento Fiscal
• AAMM - Ano e Mês de emissão da NF-e
• CNPJ - CNPJ do emitente
• mod - Modelo do Documento Fiscal
• serie - Série do Documento Fiscal
• nNF - Número do Documento Fiscal
• tpEmis – forma de emissão da NF-e
• cNF - Código Numérico que compõe a Chave de Acesso
• cDV - Dígito Verificador da Chave de Acesso
*/
infNFe.setIde(ide);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void configureLoggiing(BindingProvider bp) {
if (LOG_ENABLE) {
List<Handler> handlerChain = bp.getBinding().getHandlerChain();
handlerChain.add(new SOAPLoggingHandler());
bp.getBinding().setHandlerChain(handlerChain);
}
}
private static void configureDebug() {
if (DEBUG_ENABLE) {
System.setProperty("javax.net.debug", "all");
System.setProperty("com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump", "true");
}
}
}