• Nenhum resultado encontrado

Manual do Desenvolvedor Transmissão Automática de Arquivos Via Web Services

N/A
N/A
Protected

Academic year: 2021

Share "Manual do Desenvolvedor Transmissão Automática de Arquivos Via Web Services"

Copied!
20
0
0

Texto

(1)

Manual do Desenvolvedor

Transmissão Automática de Arquivos Via Web

Services

Versão 1.1

(2)

Índice

1. Objetivo ... 3

2. Introdução... 3

3. Processo... 4

3.1 Autenticação... 4

3.2 Transmissão de Arquivo de Remessa ... 4

3.3 Recepção de Arquivo de Retorno... 4

4. Interface Web Service do WebTA... 5

4.1 WSWEBTA ... 5

4.1.1 criarSessao... 5

4.1.2 habilitarSessao... 6

4.1.3 obterReinicioTxArquivoRemessa... 6

4.1.4 transmitirBlocoArquivoRemessa... 7

4.1.5 obterBlocoRetorno... 7

4.1.6 encerrarSessao... 8

4.2 WSSessaoTO... 8

4.2.1 getCTRL... 8

4.2.2 getDesafio... 8

4.3 WSRemessaTO ... 9

4.3.1 getSituacaoArquivo... 9

4.3.2 getNomeLogicoArquivo... 9

4.3.3 getQuantidadedeBytesArquivo... 9

4.3.4 getUltimoBlocoRecebido... 9

4.3.5 getOffSet... 10

4.4 WSRetornoTO... 10

4.4.1 getConteudo... 10

4.4.2 getNomeLogicoArquivo... 10

4.4.3 getNumeroArquivo... 10

4.4.4 getQuantidadedeBytesArquivo... 10

4.4.5 getQuantidadedeBytesLidos... 10

4.5 WSWEBTAFault ... 11

4.5.1 getCodigo... 11

4.5.2 getMessage1... 11

5. Biblioteca Java de Transmissão e Recepção Automática de Arquivos... 12

5.1 Construtor da classe ... 12

5.2 Autenticação / Abertura de sessão... 13

5.3 Envio de arquivo de remessa... 13

5.4 Recepção de arquivos de retorno... 14

5.5 Encerramento de sessão... 15

6. Apêndice... 16

6.1 Exemplo de utilização dos métodos do Web Service ... 16

(3)

Manual para utilização da Transmissão Automática de Arquivos via Web Services

1. Objetivo

Este documento tem como objetivo descrever os procedimentos para enviar/receber arquivos criptografados de forma automática, fazendo uso de Web Services.

A automatização do envio e recebimento de arquivos criptografados gerados pela API de Criptografia do WebTA (vide manual), além de fazer com que a transmissão seja mais rápida que a manual, torna o processo mais seguro, pois menos pessoas têm contato direto com as informações contidas em arquivos transmitidos.

2. Introdução

Antes de ocorrer qualquer tráfego (envio/recebimento) de dados, a aplicação Cliente deve receber uma identificação de sessão, que deve estar autenticada. A autenticação da sessão é um pré-requisito de segurança. Após encerrada a fase de autenticação, todas as requisições feitas devem conter o identificador de sessão.

Os arquivos criptografados têm um formato específico. Cada arquivo é dividido em pelo menos duas partes. Os primeiros 4 bytes referem-se ao campo Logical Length (LL) e definem o tamanho da informação a ser lida, os próximos bytes possuem a informação do arquivo original, compactada e criptografada. O campo LL é binário e deve conter o tamanho da informação na ordem natural dos bytes. Exemplo:

LL = 4013 = 00 00 0F AD (ordem natural)

1º 2º 3º 4º byte

Caso o arquivo a ser transmitido seja muito grande, a seqüência acima pode se repetir e a transmissão é feita em blocos, como no diagrama abaixo.

LL Informação LL Informação LL Informação

Bloco Transmitido Bloco Transmitido

No caso da recepção de arquivo de retorno criptografado, o servidor WebTA enviará os blocos de informação comprimidos e criptografados e a aplicação cliente deverá escrever o arquivo em disco obedecendo o mesmo formato descrito acima.

A seguir, encontra-se uma explicação de como implementar a transmissão automática de arquivos via Web Services.

(4)

3. Processo

Abaixo são descritos os passos necessários para automatizar a transmissão de arquivos via Web Service.

3.1 Autenticação

1º. É necessário ter posse do arquivo “transferenciaaaaammddhhMM.bin”1, que contém o ID do Cliente e uma chave de criptografia usada no processo de autenticação. Esse arquivo é criado quando o Máster solicita a geração das chaves de criptografia, no Ambiente Gerencial do WebTA.

2º. O arquivo “transferenciaaaaammddhhMM.bin” deve ser descriptografado utilizando-se a API de criptografia, para se obter o ID do Cliente e a chave de criptografia. Para isso, será necessário fornecer à API a mesma senha usada no processo de geração das chaves de criptografia.

3º. Abre-se uma sessão, enviando o ID do Cliente ao Servidor.

4º. O Cliente recebe um desafio, e um identificador de sessão.

5º. A sessão é habilitada, enviando-se o desafio criptografado e o identificador de sessão.

6º. Caso não ocorram erros na autenticação, pode ser iniciada a transmissão de arquivos.

1aaaammddhhMM – data e hora em que os arquivos foram gerados

3.2 Transmissão de Arquivo de Remessa

1º. O Cliente verifica se o arquivo já começou a ser enviado ao servidor, devendo receber uma resposta afirmativa ou negativa.

2º. Caso o arquivo já tenha sido enviado completamente, será retornado um erro.

Em caso do arquivo já ter sido enviado parcialmente, pular para o 3º item.

Em caso negativo, o Cliente envia o primeiro bloco de arquivo, o número do bloco (=1) e se é o último bloco, além do identificador de sessão.

3º. O Cliente continua o envio da remessa, especificando o número do bloco, indicando se é o último bloco do arquivo e enviando o identificador de sessão. Este passo se repete até que o bloco enviado esteja definido como o último.

4º. Após a confirmação de que o Servidor já recebeu o último bloco, a transmissão de arquivo de remessa acaba.

3.3 Recepção de Arquivo de Retorno

1º. O Cliente envia um pedido de recepção de arquivo de retorno e o Servidor verifica se há algum arquivo para ser retornado (arquivo ainda não consultado). No pedido deve haver o identificador de sessão, o ID do arquivo (zero, caso o envio do arquivo ainda não tenha sido iniciado), o número de bytes já recebidos (zero, no primeiro pedido) e o tamanho de referência para o bloco, comprimido e criptografado, a ser recebido.

2º. Existindo um arquivo para ser retornado, deve-se criar um novo arquivo na máquina do Cliente, para receber os dados do Servidor.

3º. A partir do bloco recebido, calcula-se o LL e ambos devem ser escritos no arquivo, na máquina do Cliente. A seguir, verifica-se se o número de bytes já recebidos (informado pelo Servidor, referente ao arquivo descompactado) é menor que o total de bytes do arquivo no Servidor.

4º. Caso o número de bytes já recebidos seja menor que o total de bytes do arquivo no Servidor, o Cliente envia outro pedido de retorno, incluindo o identificador de sessão, o ID do arquivo a ser recebido, o número de bytes já recebidos e o tamanho de referência para o próximo bloco. Enquanto o número de bytes recebidos não for igual ao total de bytes do arquivo no Servidor, os itens 3º e 4º devem ser repetidos.

(5)

4. Interface Web Service do WebTA

A interface Web Service para transmissão de arquivos inclui:

- WSWEBTA: interface utilizada na transferência de arquivos;

- WSSessaoTO: classe para a autenticação da sessão;

- WSRemessaTO: classe relacionada à remessa de arquivos;

- WSRetornoTO: classe para a obtenção de arquivos de retorno;

- WSWEBTAFault: classe para tratamento de exceções.

O arquivo webta.wsdl contém a interface e as cinco classes, bastando gerar o módulo cliente a partir dele.

No Kit de Desenvolvimento são distribuídos o arquivo “webta-cripto-v.1.4.jar”, que é a biblioteca de criptografia, e o Javadoc correspondente.

A especificação a seguir refere-se a classes para programação na linguagem Java, mas nada impede a implementação com outras linguagens.

4.1 WSWEBTA

Esta interface contém os métodos necessários para transmitir arquivos entre o Cliente e o Servidor, no Banco.

Pacote: br.com.bradesco.webta.clientepj.webservices Descrição dos métodos:

4.1.1 criarSessao

Método para criar uma nova sessão entre Cliente e Servidor. Todas as sessões expiram após um tempo, que é configurável no servidor (por exemplo, depois de uma hora). Se a sessão expirar durante a execução de um dos métodos utilizados para transmissão ou recepção de arquivos, será gerada uma exceção do tipo

WSWEBTAFault com atributo código = -3 (erro de sessão inválida). A aplicação deverá criar outra sessão e continuar o processamento interrompido.

public br.com.bradesco.webta.clientepj.webservices.beans.WSSessaoTO criarSessao(java.lang.String idClienteTransAutom) throws

java.rmi.RemoteException,

br.com.bradesco.webta.clientepj.webservices.faults.WSWEBTAFault;

Parâmetro de entrada:

- idClienteTransAutom: ID do cliente.

Retorno:

Variável do tipo WSSessaoTO com as informações da sessão que é criada.

Esta classe está documentada mais à frente neste manual.

Exceções:

- RemoteException: se ocorrer um erro de comunicação;

- WSWEBTAFault: exceção para as classes de WSWebTA.

Exemplos de exceção:

- cliente inativo;

- cliente não habilitado para a transmissão automática;

(6)

- cliente não está com a transmissão criptografada habilitada;

- sistema indisponível.

4.1.2 habilitarSessao

Função que habilita uma nova sessão.

public void habilitarSessao(java.lang.String CTRL, byte[] desafioCripto) throws java.rmi.RemoteException,

br.com.bradesco.webta.clientepj.webservices.faults.WSWEBTAFault;

Parâmetros de entrada:

- CTRL: identificador de sessão;

- desafioCripto: desafio criptografado.

Retorno:

Nenhum.

Exceções:

- RemoteException: se ocorrer um erro de comunicação;

- WSWEBTAFault: exceção para as classes de WSWebTA.

Exemplos de exceção:

- Tempo de sessão esgotado ou sessão inválida;

- Erro ao descriptografar desafio;

- Sistema indisponível.

4.1.3 obterReinicioTxArquivoRemessa

Método para iniciar/reiniciar o envio de arquivos de remessa. É obrigatória a

utilização deste método no início/reinício da transmissão de arquivo, é através deste que será detectado por exemplo até que parte do arquivo já foi recebido pelo servidor, ou então se o arquivo já foi recebido pelo servidor.

public br.com.bradesco.webta.clientepj.webservices.beans.WSRemessaTO obterReinicioTxArquivoRemessa(java.lang.String CTRL, java.lang.String nomeArquivo) throws java.rmi.RemoteException,

br.com.bradesco.webta.clientepj.webservices.faults.WSWEBTAFault;

Parâmetros de entrada:

- CTRL: identificação da sessão;

- nomeArquivo: nome do arquivo de remessa, que deverá ter tamanho menor ou igual a 20 caracteres e conter um prefixo que determina qual o tipo de serviço a que ele se refere (vide o Apêndice I do Manual do Usuário - Aplicações de Transmissão Automática de Arquivos). Vale a pena salientar que o WebTA não aceita arquivos com nomes duplicados.

Retorno:

Variável do tipo WSRemessaTO com os parâmetros do arquivo referenciado.

Esta classe está documentada mais à frente neste manual.

Exceções:

- RemoteException: se ocorrer um erro de comunicação;

- WSWEBTAFault: exceção para as classes de WSWebTA.

Exemplos de exceção:

- Parâmetro não pode ser nulo;

- Parâmetro possui tamanho inválido;

- Nome do arquivo não pode possuir caracteres especiais ou acentuados;

- Tempo de sessão esgotado ou sessão inválida;

- Não encontrou serviço com o prefixo de arquivo especificado;

- Tentativa de envio de arquivo que já existe no servidor;

(7)

- Serviço indisponível.

4.1.4 transmitirBlocoArquivoRemessa

Método para o envio de blocos de arquivo de remessa.

public br.com.bradesco.webta.clientepj.webservices.beans.WSRemessaTO transmitirBlocoArquivoRemessa(java.lang.String CTRL, java.lang.String nomeArquivo, byte[] blocoDados, long offSet, int numeroBloco, boolean flagUltimoBloco)

throws java.rmi.RemoteException,

br.com.bradesco.webta.clientepj.webservices.faults.WSWEBTAFault;

Parâmetros de entrada:

- CTRL: identificação da sessão;

- nomeArquivo: nome do arquivo de remessa, que deverá ter tamanho menor ou igual a 20 caracteres e conter um prefixo que determina qual o tipo de serviço a que ele se refere (vide o Apêndice I do Manual do Usuário - Aplicações de Transmissão Automática de Arquivos). Vale a pena salientar que o WebTA não aceita arquivos com nomes duplicados;

- blocoDados: bloco a ser transmitido, comprimido e criptografado;

- offSet: número de bytes já enviados. Usar o valor zero no 1º bloco e nos demais usar o valor retornado anteriormente pelo servidor;

- numeroBloco: número do bloco enviado, iniciando com o valor 1;

- flagUltimoBloco: identifica se o bloco enviado é o último ou não.

Retorno:

Variável do tipo WSRemessaTO com os parâmetros do arquivo referenciado.

Exceções:

- RemoteException: se ocorrer um erro de comunicação;

- WSWEBTAFault: exceção para as classes de WSWebTA.

Exemplos de exceção:

- Parâmetro não pode ser nulo;

- Parâmetro possui tamanho inválido;

- Nome do arquivo não pode possuir caracteres especiais ou acentuados;

- Tempo de sessão esgotado ou sessão inválida;

- Não encontrou serviço com o prefixo de arquivo especificado;

- Tentativa de envio de arquivo que já existe no servidor;

- Serviço indisponível.

4.1.5 obterBlocoRetorno

Método para receber um bloco de arquivo de retorno. Caso não existam arquivos a receber, a aplicação deverá aguardar alguns minutos antes de executá-lo novamente.

Desta maneira evita-se a sobrecarga no servidor WebTA, além de reduzir o processamento da própria aplicação que executa chamadas ao método.

public br.com.bradesco.webta.clientepj.webservices.beans.WSRetornoTO

obterBlocoRetorno(java.lang.String CTRL, int numeroArquivo, long offSet, int tamanhoBloco) throws java.rmi.RemoteException,

br.com.bradesco.webta.clientepj.webservices.faults.WSWEBTAFault;

Parâmetros de entrada:

- CTRL: identificação da sessão;

- numeroArquivo: ID do arquivo de retorno ou zero para solicitar a recepção de um arquivo ainda não recebido;

- offSet: quantidade de bytes já retornados (relativo ao arquivo

descompactado). Na primeira chamada, enviar zero neste parâmetro e nas demais chamadas, passar o valor retornado anteriormente pelo servidor. Se este parâmetro for inválido, o servidor reiniciará a transmissão do arquivo.

(8)

- tamanhoBloco: Este parâmetro não é utilizado atualmente, previsto para versões futuras.

Retorno:

Objeto do tipo WSRetornoTO contendo os parâmetros do arquivo a ser recebido.

Quando não existe arquivo a ser retornado, ou o arquivo solicitado não existe ou o arquivo não pertence ao cliente, o objeto WSRetornoTO retornado terá os atributos conteudo e nomeLogicoArquivo com valor null, e numeroArquivo, quantidadeBytesArquivo e quantidadeBytesLidos com o valor zero.

Exceções:

- RemoteException: se ocorrer um erro de comunicação;

- WSWEBTAFault: exceção para as classes de WSWebTA.

Exemplos de exceção:

- sessão inválida;

- cliente não tem permissão para a transferência de arquivos;

- serviço indisponível.

4.1.6 encerrarSessao

Função que encerra uma sessão habilitada.

public void encerrarSessao(java.lang.String CTRL) throws java.rmi.RemoteException;

Parâmetros de entrada:

- CTRL: identificador de sessão.

Retorno:

Nenhum.

Exceçôes:

- RemoteException: se ocorrer um erro de comunicação.

4.2 WSSessaoTO

Esta classe contém as informações retornadas pelo Servidor, que identificam uma sessão estabelecida.

Pacote: br.com.bradesco.webta.clientepj.webservices.beans

Descrição dos métodos:

4.2.1 getCTRL

Obtém o identificador da sessão:

public java.lang.String getCTRL();

Retorno:

O valor da string CTRL.

4.2.2 getDesafio

Obtém o desafio da sessão:

(9)

public java.lang.String getDesafio();

Retorno:

O valor da string desafio.

4.3 WSRemessaTO

Esta classe contém as informações retornadas pelo servidor no envio de um arquivo de remessa.

Pacote: br.com.bradesco.webta.clientepj.webservices.beans

Descrição dos métodos:

4.3.1 getSituacaoArquivo

Obtém a situação do arquivo de remessa.

public int getSituacaoArquivo();

Retorno:

Situação do arquivo de remessa. Valores retornados:

0 = arquivo não existe no servidor;

10 = arquivo sendo recebido pelo servidor;

101= arquivo recebido pelo servidor e ficou pendente de aprovação;

outros valores também indicam que o arquivo já foi recebido pelo servidor.

Obs.: ao término da transmissão do arquivo, se o servidor identificar erro no layout do arquivo, o arquivo permanecerá na situação 10.

4.3.2 getNomeLogicoArquivo

Obtém o nome lógico do arquivo de remessa.

public java.lang.String getNomeLogicoArquivo();

Retorno:

Nome lógico do arquivo de remessa.

4.3.3 getQuantidadedeBytesArquivo

Obtém quantidade de bytes do arquivo de remessa.

public long getQuantidadeBytesArquivo();

Retorno:

Quantidade de bytes do arquivo de remessa existentes no servidor, descomprimido.

4.3.4 getUltimoBlocoRecebido

Obtém o número do último bloco do arquivo de remessa recebido pelo Servidor.

public int getUltimoBlocoRecebido();

Retorno:

Número do último bloco do arquivo de remessa recebido pelo Servidor.

(10)

4.3.5 getOffSet

Obtém a quantidade de bytes do arquivo de remessa recebidos pelo servidor.

public long getOffSet();

Retorno:

Quantidade de bytes do arquivo de remessa recebidos pelo servidos. Zero significa que o arquivo não foi encontrado no servidor.

4.4 WSRetornoTO

Esta classe contém as informações retornadas pelo servidor durante a recepção de um arquivo de retorno. Se não existir arquivo para ser retornado pelo servidor, o número do arquivo será igual a zero (verificar pelo método getNumeroArquivo()).

Pacote: br.com.bradesco.webta.clientepj.webservices.beans

Descrição dos métodos:

4.4.1 getConteudo

Obtém o buffer com o conteúdo do arquivo de retorno, comprimido e criptografado.

public byte[] getConteudo();

Retorno:

Buffer com o conteúdo do arquivo de retorno.

4.4.2 getNomeLogicoArquivo Obtém o nome do arquivo de retorno.

public java.lang.String getNomeLogicoArquivo();

Retorno:

Nome do arquivo de retorno.

4.4.3 getNumeroArquivo

Obtém o ID do arquivo de retorno. Zero significa que não retornou nenhum arquivo.

public int getNumeroArquivo();

Retorno:

ID do arquivo de retorno.

4.4.4 getQuantidadedeBytesArquivo

Obtém quantidade total de bytes do arquivo de retorno, descomprimido.

public long getQuantidadeBytesArquivo();

Retorno:

Quantidade total de bytes do arquivo de retorno.

4.4.5 getQuantidadedeBytesLidos

Obtém a quantidade total de bytes já recebidos do arquivo de retorno, descomprimido.

(11)

public long getQuantidadeBytesLidos();

Retorno:

Quantidade de bytes recebidos do arquivo de retorno.

4.5 WSWEBTAFault

Esta é a exceção a ser tratada para a utilização das classes de Transmissão Automática de Arquivos.

Pacote: br.com.bradesco.webta.clientepj.webservices.faults

4.5.1 getCodigo

Obtém o código de erro associado à exceção.

public long getCodigo();

Retorno:

Código de erro associado à exceção.

4.5.2 getMessage1

Obtém a mensagem descritiva do erro associado à exceção.

public java.lang.String getMessage1();

Retorno:

Mensagem descritiva do erro associado à exceção.

(12)

5. Biblioteca Java de Transmissão e Recepção Automática de Arquivos

O Kit de Desenvolvimento para Transmissão de Arquivos do WebTA também inclui a biblioteca Java “webtaTransferencia.v.1.0.0.jar” que contém os métodos para enviar/receber arquivos criptografados de forma automática.

Estas operações foram implementadas através do encapsulamento dos métodos do Web Service descritos anteriormente neste documento, fornecendo uma interface de mais alto nível para quem desejar implementar a automatização da transferência de arquivos, na linguagem Java. Esta interface é utilizada pelas aplicações de transmissão automática fornecidas pelo WebTA.

O uso desta biblioteca não é obrigatório, o Desenvolvedor pode utilizar diretamente os métodos do Web Service do WebTA e implementar as funcionalidades propostas.

A classe utilizada desta biblioteca é a WEBTATransferencia do pacote br.com.bradesco.webta.transferencia.

Para utilização desta biblioteca é necessário utilizar a versão 5 do JDK ou superior, além das bibliotecas:

- webta-cripto-v.1.4.jar: biblioteca de criptografia, necessária no processo de autenticação com o Servidor WebTA;

- wswebta-client-v.1.0.jar: biblioteca cliente para acesso aos métodos do Web Services do WebTA. Esta biblioteca foi gerada a partir do arquivo WEBTA.wsdl (https://www.webtatransferenciadearquivos.bradesco.com.br/webta/services/WSWE BTA/wsdl) utilizando o framework AXIS. A utilização deste framework gerou a dependência de outras bibliotecas:

- axis.jar;

- commons-discovery-0.2.jar;

- commons-logging-1.0.4.jar;

- jaxrpc.jar;

- log4j-1.2.15.jar;

- saaj.jar;

- wsdl4j-1.5.1.jar.

A seguir encontra-se a descrição dos métodos desta classe, como funcionam e como utilizá- los.

5.1 Construtor da classe

Para acessar os métodos desta classe é obrigatória a instanciação de um objeto desta classe, para tanto utilize o construtor da classe.

Pacote: br.com.bradesco.webta.transferencia

public WEBTATransferencia(java.lang.String endPoint, java.io.Writer log,

java.io.Writer logTrace) Parâmetros de entrada:

- endPoint: representa a URL de acesso ao Web Service do WebTA:

(13)

https://www.webtatransferenciadearquivos.bradesco.com.br/webta/services/

WSWEBTA

- log: objeto utilizado para geração de log de mensagens;

- logTrace: objeto utilizado para geração de log de mensagens de trace das chamadas aos métodos do Web Service.

5.2 Autenticação / Abertura de sessão

Após a criação do objeto, este é o primeiro método que deve ser executado para que possam ser realizadas as operações da transmissão automática de arquivos. Este método realiza a abertura de sessão com o Servidor WebTA, necessária para realizar a comunicação. Todas as sessões expiram após um tempo decorrido, que é configurável no servidor (por exemplo, depois de uma hora).

Pacote: br.com.bradesco.webta.transferencia

public boolean autenticar(java.lang.String idCliente, byte[] chaveTransmissao) throws

java.rmi.RemoteException,

br.com.bradesco.webta.clientepj.webservices.faults.WSWEBTAFault, br.com.bradesco.webta.transferencia.WEBTAComunicacaoException Parâmetros de entrada:

- idCliente: identificador do cliente;

- chaveTransmissao: chave para comunicação e realização da transferência automática.

Estes parâmetros são obtidos através da decodificação da chave de transferência, contida no arquivo transferênciaaaaammddHHMM.bin gerado no Ambiente Gerencial do WebTA durante a ativação das características de Criptografia e Transferência Automática. Para maiores informações de como decodificar a chave de transferência, utilize o manual

“Manual_Desenv_Cripto.pdf”.

Exceção:

- RemoteException: exceção gerada caso ocorra algum erro de comunicação;

- WSWEBTAFault: exceção gerada no momento da criação da sessão com o Web Service;

- WEBTAComunicacaoException: exceção gerada quando erro de negócio no Web Service.

5.3 Envio de arquivo de remessa

Todo o processo de envio de um arquivo de remessa pode ser realizado pela chamada de um único método denominado transmitirArquivo().

Este método executa o envio de um único arquivo de remessa, incluindo o tratamento de um envio que já havia sido iniciado e por algum motivo não foi finalizado (restart).

Para a execução deste método, existem os pré-requisitos:

- o arquivo de remessa que será enviado deve estar criptografado no formato WebTA;

- uma sessão deve ser pré-estabelecida com o Web Service do WebTA.

Pacote: br.com.bradesco.webta.transferencia

(14)

public int transmitirArquivo(java.lang.String caminhoArquivo) throws java.io.IOException

Parâmetros de entrada:

- caminhoArquivo: caminho completo do arquivo (caminho físico + nome do arquivo) para envio.

Retorno:

0 = operação realizada com sucesso;

-3 = erro na sessão, necessário efetuar nova autenticação, ou seja, executar o método autenticar();

-100 = erro de comunicação com o Web Service, a aplicação deverá aguardar alguns instantes e retentar.

Para os demais códigos de erro, o arquivo deve ser descartado, são erros no layout do arquivo, formatação do nome do arquivo, permissão de envio do arquivo de remessa. Verifique o arquivo de logs para obter maiores detalhes dos erros.

Exceções:

- IOException: erro na geração do log de mensagens.

5.4 Recepção de arquivos de retorno

O método receberArquivos() da biblioteca, recebe todos os arquivos de retorno pendentes para o cliente no Servidor WebTA.

A cada execução deste método, ele recebe todos os arquivos pendentes naquele instante, cabendo à aplicação que o executa o controle de suas chamadas, ou seja, caso não existam arquivos a receber ou tenha finalizado uma recepção de arquivos, a aplicação deverá aguardar alguns minutos antes de executá-lo novamente. Desta maneira evita-se a sobrecarga no servidor WebTA, além de reduzir o processamento da própria aplicação que executa chamadas ao método.

Para o controle da recepção de arquivos, este método utiliza um arquivo de controle denominado “RETORNO.CTL”, cujo conteúdo o auxiliará no processo de recepção de um arquivo. Até mesmo numa eventual queda de comunicação permitindo o recebimento somente dos blocos ainda não recebidos, e não desde o início.

Cada arquivo transmitido com sucesso pelo servidor tem seu status alterado para arquivo já consultado, indisponibilizando-o para a recepção automática. Se houver necessidade de recebê-lo novamente, o cliente deverá fazê-lo de modo manual, ou seja, acessar a opção “Recepção de Arquivos de Retorno” do site cliente do WebTA, preencher o filtro de busca, remover a opção “Apresentar apenas arquivos não recebidos”, executar a consulta e selecionar o arquivo que deseja receber novamente.

Cada arquivo recebido é gravado no formato criptografado do WebTA.

Para a execução deste método, é necessária uma sessão pré-estabelecida com o Web Service do WebTA.

Pacote: br.com.bradesco.webta.transferencia

public int receberArquivos(java.lang.String caminhoArquivosRecebidos) throws java.io.IOException

Parâmetros de entrada:

- caminhoArquivosRecebidos: caminho físico onde os arquivos de retorno recebidos do Servidor serão gravados.

(15)

Retorno:

Status do processamento da recepcao.

0 = operação realizada com sucesso;

-3 = erro na sessão, necessário efetuar nova autenticação, ou seja, executar o método autenticar();

-100 = erro de comunicação com o Web Service, a aplicação deverá aguardar alguns instantes e retentar.

Demais códigos de erro = verifique o arquivo de logs para maiores detalhes.

Exceções:

- IOException: erro na geração do log de mensagens ou erro na manipulação do arquivo em recepção, vide arquivo de logs para maiores detalhes.

5.5 Encerramento de sessão

Sempre que não houver mais arquivos de remessa para transmissão ou não existir arquivos de retorno disponíveis no Servidor WebTA, se houver sessão aberta, a aplicação deve executar este método para encerrar a sessão com o Servidor WebTA.

Pacote: br.com.bradesco.webta.transferencia

public void desautenticar();

(16)

Manual_Desenv_Trans_Autom.pdf página 16 18/12/2008

6. Apêndice

6.1 Exemplo de utilização dos métodos do Web Service

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import br.com.bradesco.webta.clientepj.webservices.WSWEBTAProxy;

import br.com.bradesco.webta.clientepj.webservices.beans.WSRemessaTO;

import br.com.bradesco.webta.clientepj.webservices.beans.WSRetornoTO;

import br.com.bradesco.webta.clientepj.webservices.beans.WSSessaoTO;

import br.com.bradesco.webta.clientepj.webservices.faults.WSWEBTAFault;

import br.com.bradesco.webta.security.crypto.WEBTACryptoUtil;

import br.com.bradesco.webta.security.exception.CryptoException;

import br.com.bradesco.webta.security.exception.ParameterException;

public class TesteWSWEBTA { /**

* Tamanho do campo Logical Length (LL) */

protected static final int TAMANHO_LL = 4;

/**

* Tamanho maximo do LL */

protected static final int LL_MAX = 524288;

/**

* Erro de leitura */

protected static final int ERRO_LEITURA = -1;

public static void main(String[] args) throws IOException { WSWEBTAProxy ws = new WSWEBTAProxy();

long offSet = 0;

ws.setEndpoint("https://www.webtatransferenciadearquivos.bradesco.com.br/webta/services/WSWEBTA");

(17)

Manual_Desenv_Trans_Autom.pdf página 17 18/12/2008 try {

//Decriptografa arquivo que contem id do cliente e chave de criptografia do desafio byte[] transfFileKey = WEBTACryptoUtil.decodeKeyFile(new File(

"c:\webta\transferencia200806190907.bin"), "senha");

//Obtem id do cliente

String idClienteTransAutom = WEBTACryptoUtil

.getIdFromDecodedFileKey(transfFileKey);

//Obtem chave de criptografia do desafio byte[] transfKey = WEBTACryptoUtil

.getKeyFromDecodedFileKey(transfFileKey);

//ABRE SESSAO

WSSessaoTO wssessaoto = ws.criarSessao(idClienteTransAutom);

//Criptografa desafio recebido na abertura de sessao byte[] desafioCripto = WEBTACryptoUtil.encode(wssessaoto

.getDesafio().getBytes(), transfKey);

//ENVIA DESAFIO CRIPTOGRAFADO PARA O SERVIDOR

ws.habilitarSessao(wssessaoto.getCTRL(), desafioCripto);

/* --- RECEBE UM ARQUIVO DE RETORNO ---*/

FileOutputStream fos = null;

//Obtem primeiro bloco do arquivo

WSRetornoTO ret = ws.obterBlocoRetorno(wssessaoto.getCTRL(), 0, 0, 8192);

//Verifica se retornou arquivo para recepcao if (ret.getNomeLogicoArquivo() != null) {

fos = new FileOutputStream("c:\webta\retorno\" + ret.getNomeLogicoArquivo());

//Monta LL da informacao

int tamBuffer = ret.getConteudo().length;

byte[] ll = new byte[TAMANHO_LL];

for (int i = 0; i < TAMANHO_LL; i++) { int offset = (ll.length - 1 - i) * 8;

ll[i] = (byte) ((tamBuffer >>> offset) & 0xFF);

}

//Grava LL fos.write(ll);

(18)

Manual_Desenv_Trans_Autom.pdf página 18 18/12/2008 //Grava dados

fos.write(ret.getConteudo());

offSet = ret.getQuantidadeBytesLidos();

long totalSize = ret.getQuantidadeBytesArquivo();

//Loop para receber demais blocos do arquivo while (offSet < totalSize) {

ret = ws.obterBlocoRetorno(wssessaoto.getCTRL(), ret .getNumeroArquivo(), offSet, 8192);

tamBuffer = ret.getConteudo().length;

//Monta LL

for (int i = 0; i < TAMANHO_LL; i++) {

int offset = (TAMANHO_LL - 1 - i) * 8;

ll[i] = (byte) ((tamBuffer >>> offset) & 0xFF);

}

//Grava LL e dados fos.write(ll);

fos.write(ret.getConteudo());

offSet += ret.getQuantidadeBytesLidos();

}

if (fos != null) fos.close();

}

/*--- TRANSMITE UM ARQUIVO DE REMESSA ---*/

//Inicia processo de transmissao

WSRemessaTO res = ws.obterReinicioTxArquivoRemessa(wssessaoto .getCTRL(), "COBN20080806.TXT");

FileInputStream fis = new FileInputStream("C:\webta\remessa\COBN20080806.TXT");

offSet = res.getQuantidadeBytesArquivo();

int numBloco = 1;

boolean flagUltimoBloco = false;

byte[] bloco = null;

//Loop de leitura e transmissao do arquivo while (fis.available() > 0) {

//Le ll do bloco de dados

int tamLL = obterTamanhoProximoBloco(fis);

if (fis.available() <= tamLL) { flagUltimoBloco = true;

(19)

Manual_Desenv_Trans_Autom.pdf página 19 18/12/2008 }

bloco = new byte[tamLL];

//Le dados fis.read(bloco);

if (numBloco > res.getUltimoBlocoRecebido()) { //Transmite demais blocos do arquivo res = ws.transmitirBlocoArquivoRemessa(

wssessaoto.getCTRL(), "COBN20080806.TXT", bloco, offSet, numBloco, flagUltimoBloco);

offSet = res.getOffSet();

}

numBloco++;

}

//Encerra a sessao

ws.encerrarSessao(wssessaoto.getCTRL());

} catch (WSWEBTAFault e) {

//Implementar adequadamente o tratamento da exceção

System.out.println("Erro na execucao de metodo do Web Service - Codigo de erro: " + e.getCodigo() + " - Mensagem descritiva: " + e.getMessage1());

} catch (CryptoException e) {

//Implementar adequadamente o tratamento da exceção

System.out.println("Erro na execucao de metodo da API de Criptografia - Mensagem descritiva: " + e.getMessage());

} catch (ParameterException e) {

//Implementar adequadamente o tratamento da exceção

System.out.println("Erro na passagem de parametros para metodo da API de Criptografia - Mensagem descritiva: " + e.getMessage());

} catch (IOException e) {

//Implementar adequadamente o tratamento da exceção

System.out.println("Erro de I/O na aplicacao - Mensagem descritiva: " + e.getMessage());

} }

/**

* Le o tamanho do proximo bloco a partir do campo * logical length (ll) gravado no arquivo

*

* @param bis Arquivo criptografado * @return Tamanho do proximo bloco * @throws IOException

*/

(20)

Manual_Desenv_Trans_Autom.pdf página 20 18/12/2008 protected static int obterTamanhoProximoBloco(InputStream bis)

throws IOException { //le o tamanho do proximo bloco int read = 0;

int tamBloco = 0;

byte[] logicalLength = new byte[TAMANHO_LL];

//le ll

read = bis.read(logicalLength);

//tamanho minimo do ll if (read < TAMANHO_LL) {

throw new IOException("Arquivo invalido - campo LL");

}

//converte byte[] em int

for (int i = 0; i < TAMANHO_LL; i++) { int shift = (TAMANHO_LL - 1 - i) * 8;

tamBloco += (logicalLength[i] & 0x000000FF) << shift;

}

if ((tamBloco > LL_MAX) || (tamBloco == 0)) {

throw new IOException("Arquivo invalido - tamanho do bloco");

}

return tamBloco;

} }

Referências

Documentos relacionados

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

No final, os EUA viram a maioria das questões que tinham de ser resolvidas no sentido da criação de um tribunal que lhe fosse aceitável serem estabelecidas em sentido oposto, pelo

Taking into account the theoretical framework we have presented as relevant for understanding the organization, expression and social impact of these civic movements, grounded on

Os dados referentes aos sentimentos dos acadêmicos de enfermagem durante a realização do banho de leito, a preparação destes para a realização, a atribuição

Neste tipo de situações, os valores da propriedade cuisine da classe Restaurant deixam de ser apenas “valores” sem semântica a apresentar (possivelmente) numa caixa

O Estudo de Caso analisou os fatores extra e intraescolares associados à eficácia escolar do Instituto de Educação Eber Teixeira de Figueiredo, instituição de ensino da

O Fórum de Integração Estadual: Repensando o Ensino Médio se efetiva como ação inovadora para o debate entre os atores internos e externos da escola quanto às

De acordo com o Consed (2011), o cursista deve ter em mente os pressupostos básicos que sustentam a formulação do Progestão, tanto do ponto de vista do gerenciamento