Estou implementando um sistema de pagamento por cartão de credito de uma loja virtual, estamos usando a operadora Redecard.
O problema é o seguinte:
Em uma das etapas preciso gerar um codigo de verificação da compra, a redecard me passou uma classe java (CodVer.class) que gera esse codigo de verificação, então precisso que meu servlet execute essa classe no servidor e me retorne um arquivo(codver.out) para que eu possa ler esse arquivo e colocar o codigo de verificação gerado no formulario de envio para a operadora.
Com esse codigo consigo gerar o cod verificação e depois é so ler o arquivo gerado, isso usando jse. Mas quando tento fazer esse comando com o tomcat nao consigo gerar o codigo.
pq vc simplesmente num roda a classe no servlet e usa java.io.* para ler o arquivo?
O
oyama
brunoacpc:
Pessoal…
Estou implementando um sistema de pagamento por cartão de credito de uma loja virtual, estamos usando a operadora Redecard.
O problema é o seguinte:
Em uma das etapas preciso gerar um codigo de verificação da compra, a redecard me passou uma classe java (CodVer.class) que gera esse codigo de verificação, então precisso que meu servlet execute essa classe no servidor e me retorne um arquivo(codver.out) para que eu possa ler esse arquivo e colocar o codigo de verificação gerado no formulario de envio para a operadora.
Com esse codigo consigo gerar o cod verificação e depois é so ler o arquivo gerado, isso usando jse. Mas quando tento fazer esse comando com o tomcat nao consigo gerar o codigo.
Então a pergunta é, como fazer isso no servidor??
grato
É muito “bizarro” o que você está tentando fazer (dar um exec uma classe em java dentro de um código java). Não dá para instanciar a classe e chamar o metodo que gera o output?
brunoacpc
é pessoal acho que é isso ai msm… alguem pode me dar um exemplo qe como faço isso??
grato
T
thingol
Experimente fazer isso com um programa mais simples, do tipo “Hello, world”.
a) Guarde o “standard output”
b) Abra um arquivo de saída e redirecione a saída padrão com System.setOut
c) Crie um array de strings, que são os parâmetros para main()
d) Chame CodVer.main() com o tal array
e) Feche o tal arquivo de saída.
f) Recupere o “standard output” obtido no passo a).
Luiz-SP
brunoacpc:
é pessoal acho que é isso ai msm… alguem pode me dar um exemplo qe como faço isso??
try {
BufferedWriter out = new BufferedWriter(new FileWriter("outfilename"));
out.write("aString");
out.close();
} catch (IOException e) {
}
O
oyama
thingol:
Experimente fazer isso com um programa mais simples, do tipo “Hello, world”.
a) Guarde o “standard output”
b) Abra um arquivo de saída e redirecione a saída padrão com System.setOut
c) Crie um array de strings, que são os parâmetros para main()
d) Chame CodVer.main() com o tal array
e) Feche o tal arquivo de saída.
f) Recupere o “standard output” obtido no passo a).
Peça o javadoc e/ou alguma documentação sobre a classe para o fornecedor. Acho o cumulo fazer integração “coorporativa” sem que o fornecedor mande pelo menos o javadoc da classe. Não é possivel que o unico jeito de usar a classe seja chamando o main. E pior ainda a unica saida seja o “standard output”. Se der pau você vai ter que fazer parser do arquivo de saida?
brunoacpc
é veio sem documentação…
thingol, poderia dar exmplo de como faço isso que vc falou???
T
thingol
Tou achando que deve haver uma forma alternativa de usar esse CodVer. Se você carregar o tal cara no Eclipse é possível ver que métodos essa classe tem?
brunoacpc
carreguei no netbeans e nada…
T
thingol
Que código esquisito…
importjava.util.Date;classCodVer{publicstaticvoidmain(String[]args){Datedate=newDate();if(args.length<3){System.out.println("Numero de argumentos invalidos!\n\nUso:java CodVer <numfil> <total> <endereco ip remoto>");System.out.println("\n<numfil>: Numero de filiacao\n<total>: Valor total da compra\n<endereo ip remoto>: IP Address do browser cliente");}else{for(inti=0;i<args.length;i++){/* empty */}intnumfil=0;try{numfil=Integer.parseInt(args[0]);}catch(Exceptionexception){System.out.println("Erro - Numero de filiacao invalido.");}inttotal=0;try{StringparteInteira=args[1].substring(0,args[1].indexOf('.'));total=Integer.parseInt(parteInteira);}catch(Exceptionexception){System.out.println("Erro - Preco invalido. Use: ####.##");System.exit(-1);}intsegundosAgora=date.getSeconds();intsegundosAgoraCodificados=0;switch(segundosAgora){case0:segundosAgoraCodificados=11;break;case1:segundosAgoraCodificados=17;break;case2:segundosAgoraCodificados=21;break;case3:segundosAgoraCodificados=31;break;case4:segundosAgoraCodificados=56;break;case5:segundosAgoraCodificados=34;break;case6:segundosAgoraCodificados=42;break;case7:segundosAgoraCodificados=3;break;case8:segundosAgoraCodificados=18;break;case9:segundosAgoraCodificados=13;break;case10:segundosAgoraCodificados=12;break;case11:segundosAgoraCodificados=18;break;case12:segundosAgoraCodificados=22;break;case13:segundosAgoraCodificados=32;break;case14:segundosAgoraCodificados=57;break;case15:segundosAgoraCodificados=35;break;case16:segundosAgoraCodificados=43;break;case17:segundosAgoraCodificados=4;break;case18:segundosAgoraCodificados=19;break;case19:segundosAgoraCodificados=14;break;case20:segundosAgoraCodificados=9;break;case21:segundosAgoraCodificados=20;break;case22:segundosAgoraCodificados=23;break;case23:segundosAgoraCodificados=33;break;case24:segundosAgoraCodificados=58;break;case25:segundosAgoraCodificados=36;break;case26:segundosAgoraCodificados=44;break;case27:segundosAgoraCodificados=5;break;case28:segundosAgoraCodificados=24;break;case29:segundosAgoraCodificados=15;break;case30:segundosAgoraCodificados=62;break;case31:segundosAgoraCodificados=25;break;case32:segundosAgoraCodificados=34;break;case33:segundosAgoraCodificados=59;break;case34:segundosAgoraCodificados=37;break;case35:segundosAgoraCodificados=45;break;case36:segundosAgoraCodificados=6;break;case37:segundosAgoraCodificados=25;break;case38:segundosAgoraCodificados=16;break;case39:segundosAgoraCodificados=27;break;case40:segundosAgoraCodificados=63;break;case41:segundosAgoraCodificados=26;break;case42:segundosAgoraCodificados=35;break;case43:segundosAgoraCodificados=60;break;case44:segundosAgoraCodificados=38;break;case45:segundosAgoraCodificados=46;break;case46:segundosAgoraCodificados=7;break;case47:segundosAgoraCodificados=26;break;case48:segundosAgoraCodificados=17;break;case49:segundosAgoraCodificados=28;break;case50:segundosAgoraCodificados=14;break;case51:segundosAgoraCodificados=36;break;case52:segundosAgoraCodificados=2;break;case53:segundosAgoraCodificados=39;break;case54:segundosAgoraCodificados=47;break;case55:segundosAgoraCodificados=8;break;case56:segundosAgoraCodificados=29;break;case57:segundosAgoraCodificados=22;break;case58:segundosAgoraCodificados=55;break;case59:segundosAgoraCodificados=33;break;}segundosAgora=segundosAgoraCodificados;Stringpad;if(segundosAgora<10)pad="0";elsepad="";Stringipremoto=args[2];inttamIP=ipremoto.length();inti_5_=total+segundosAgora;inti_6_=segundosAgora+tamIP;inti_7_=segundosAgora*numfil;Stringstring_8_=String.valueOf(i_7_);System.out.print(String.valueOf(i_7_)+""+i_5_+""+i_6_+"-"+string_8_.length()+pad+segundosAgora);inti_9_=i_7_/segundosAgora;}}}
Luiz-SP
Acho que eles devem abrir uma vaga de programador java na Redecard.ehehehe
O
oyama
Putz!!! E não é só tem o metodo main mesmo. Que porcaria.
Por isso que não tem documentação mesmo. Nota 0 para quem fez este código. Onde já se viu que a unica forma de integração de um class e executando a classe. Por isso que integração é sempre uma %&$##@.
Bem, o jeito é fazer o que o thingol escreveu chamando o metodo main. Só que se der erro, você vai ter a maior dor de cabeça, pois o vai ter fazer parser do output, pois nem System.exit com código de erro foi setado.
[edit]Depois que eu vi que pelo menos em um caso o System.exit é setado para -1[/edit]
Uma saida seria você implementar o código, mas não seria muito etico.
brunoacpc
vixxxx…nem fale… valeu cara, agora fica mais facil pra min tenta entender…
brunoacpc
rssss…acho que voui fazer isso mesmo oyama, nao seria etico mas e essa inhaca ai que eles fizeram justifica…
amilhoranza
Eu tive um problema parecido para implementar a forma de pagamento do Itau (transferencia).
Eu peguei o class que ele enviaram, descompilei e criei uma classe usando a classe descompilada, e ao invés de gerar um arquivo com o código eu simplesmente retornava o valor do código pelo método.
Assim você evita de fazer o bizzaro System.exec
O
oyama
Vc não pode fazer isso. Se a instituição responsavel pelo codigo lhe mandou o arquivo, no ditado popular “se vira e usa” =).
Também acho que você deveria procurar a redecard e tentar negociar a mudança desta classe. Só de ter um metodo static (com as coisas que estão no main, sem os System.output) que retorna exception em caso de erro, já vai te ajudar muito.
zirocool
O cara que escreveu a classe nunca ouviu falar em orientação à objetos… hehhee
brunoacpc
Vocês tem razão, o código é uma merda…masrealmente não posso pegar descompilar o codigo e modificar. Vou conversar com o pessoal da redecard sobre isso, acho que é a coisa mais correta no momento.
Valeu pela ajuda de todos!
I
info_god
Vc não pode fazer isso. Se a instituição responsavel pelo codigo lhe mandou o arquivo, no ditado popular “se vira e usa” =).