Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
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.
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.
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
O arquivo webta.wsdl contém a interface e as cinco classes, bastando gerar o módulo cliente
a partir dele.
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
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;
4.1.2 habilitarSessao
Função que habilita uma nova sessão.
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;
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.
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
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:
Retorno:
O valor da string desafio.
4.3 WSRemessaTO
Pacote: br.com.bradesco.webta.clientepj.webservices.beans
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.
4.3.2 getNomeLogicoArquivo
Obtém o nome lógico do arquivo de remessa.
Retorno:
Nome lógico do arquivo de remessa.
4.3.3 getQuantidadedeBytesArquivo
Obtém quantidade de bytes do arquivo de remessa.
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.
Retorno:
Número do último bloco do arquivo de remessa recebido pelo Servidor.
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
Pacote: br.com.bradesco.webta.clientepj.webservices.beans
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.
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.
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.
Retorno:
Quantidade de bytes recebidos do arquivo de retorno.
4.5 WSWEBTAFault
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.
Para utilização desta biblioteca é necessário utilizar a versão 5 do JDK ou superior, além das
bibliotecas:
A seguir encontra-se a descrição dos métodos desta classe, como funcionam e como utilizá-
los.
Pacote: br.com.bradesco.webta.transferencia
Parâmetros de entrada:
- endPoint: representa a URL de acesso ao Web Service do WebTA:
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
Parâmetros de entrada:
- idCliente: identificador do cliente;
- chaveTransmissao: chave para comunicação e realização da transferência
automática.
Pacote: br.com.bradesco.webta.transferencia
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.
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.
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.
Pacote: br.com.bradesco.webta.transferencia
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.
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
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;
/**
* Tamanho maximo do LL
*/
protected static final int LL_MAX = 524288;
/**
* Erro de leitura
*/
protected static final int ERRO_LEITURA = -1;
ws.setEndpoint("https://www.webtatransferenciadearquivos.bradesco.com.br/webta/services/WSWEBTA");
//Obtem id do cliente
String idClienteTransAutom = WEBTACryptoUtil
.getIdFromDecodedFileKey(transfFileKey);
//ABRE SESSAO
WSSessaoTO wssessaoto = ws.criarSessao(idClienteTransAutom);
/* -------------------------
RECEBE UM ARQUIVO DE RETORNO
--------------------------*/
FileOutputStream fos = null;
//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);
offSet = ret.getQuantidadeBytesLidos();
long totalSize = ret.getQuantidadeBytesArquivo();
//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
------------------------------*/
//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
*/
//le ll
read = bis.read(logicalLength);
//tamanho minimo do ll
if (read < TAMANHO_LL) {
throw new IOException("Arquivo invalido - campo LL");
}
return tamBloco;
}
}