Você está na página 1de 20

Manual do Desenvolvedor

Transmissão Automática
de Arquivos Via Web
Services

Versão 1.1
Í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
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

1º Bloco Transmitido 2º 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.

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


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.
1
aaaammddhhMM – 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.

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


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;

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


- 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;

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


- 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.

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


- 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:

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


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.

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


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.

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


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.

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


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:

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


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

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


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.

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


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();

Manual_Desenv_Trans_Autom.pdf página 15 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");

Manual_Desenv_Trans_Autom.pdf página 16 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);

Manual_Desenv_Trans_Autom.pdf página 17 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;

Manual_Desenv_Trans_Autom.pdf página 18 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
*/

Manual_Desenv_Trans_Autom.pdf página 19 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;
}
}

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