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.
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[/quote]
É 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?
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).
[quote=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).
[/quote]
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?
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?
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.
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
Vc não pode fazer isso. Se a instituição responsavel pelo codigo lhe mandou o arquivo, no ditado popular “se vira e usa” =).[/quote]
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.
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.