O arquivo a ser enviado pela serventia para o TJMG contendo os
selos utilizados e seus respectivos atos deve seguir a estrutura
anteriormente
definida e pode ser enviado ao TJMG utilizando o consumo de
WebService ou via upload no Portal do Selo de
Fiscalização Eletrônico. O detalhamento de ambas formas de envio
é realizada nas seções a seguir.
Envio via upload
O envio via upload deve ocorrer com o arquivo assinado
pela serventia com a chave privada do usuário da serventia e,
posteriormente, criptografado com a Chave pública do TJMG.
Caso a aplicação de Selo de
Fiscalização Eletrônico encontre alguma inconsistência no
arquivo enviado, o sistema exibirá em tela uma relação das
inconsistências encontradas e nenhum ato praticado será
importado para a aplicação. Caso contrário, a aplicação exibirá
mensagem informando que o arquivo foi processado com sucesso.
Um "WebService" é um conjunto de funções chamáveis através da Internet,
utilizando o protocolo SOAP. Estas funções recebem o nome de WebMethods.
Um WebService permite que dois programas se comuniquem de uma maneira
tecnicamente muito semelhante à invocação de páginas Web.
O acesso ao WebService deve ser realizado através do sistema da
serventia. O envio deve ocorrer com o arquivo assinado pela
serventia com a chave privada do usuário da serventia. Não é
necessário criptografar o arquivo com a Chave pública do TJMG.
O WebService requer autenticação via usuário e senha - no
momento da transmissão dos selos e atos praticados, o usuário,
previamente autorizado, deve informar seu usuário e senha de
acesso à aplicação de Selo de Fiscalização Eletrônico.
O método de autenticação no WebService deve ser "http Basic Authentication".
Caso a aplicação de Selo de
Fiscalização Eletrônico encontre alguma inconsistência no
arquivo enviado, o usuário receberá um vetor de String com
inconsistências encontradas e nenhum ato praticado será
importado para a aplicação. Caso contrário, a aplicação
retornará a mensagem informando que o arquivo foi processado com
sucesso.
Observe os fluxos abaixo para facilitar o
entendimento quanto à utilização dos métodos do webservice assíncrono.
O primeiro fluxo se refere ao envio do arquivo de atos praticados.
Uma vez que o envio tenha sido realizado com sucesso, o número de
protocolo retornado deverá ser utilizado no segundo fluxo para a
obtenção das mensagens de processamento referentes a esse envio.
Vale ressaltar que, com o número de protocolo, o usuário poderá
também obter as mensagens acessando diretamente no SISNOR WEB,
menu "Envio de atos > Consulta de envios".
Exemplo: Cliente WS Assíncrono - Enviar Atos
A seguir, mostramos um exemplo de código que implementa um
cliente WebService assíncrono com login para o envio de atos.
Esse código é meramente ilustrativo, e foi feito em Java com a API JAX WS.
ATENÇÃO: no envio assíncrono, a data/hora considerados para
a determinação do envio em atraso são a data/hora da transmissão,
e não a data/hora do processamento do arquivo. Ou seja, o usuário
não será prejudicado caso, por exemplo, o arquivo transmitido seja
muito grande ou o sistema esteja sobrecarregado no momento da
transmissão.
O método "enviarAtos" deverá ser utilizado pelo programa cliente para
protocolar um envio de atos. O número do protocolo será, então, usado
pelo programa cliente na chamada aos demais métodos assíncronos.
O método "enviarAtos" terá um dos seguintes retornos:
Número do protocolo
-1: Usuário sem permissão
-2: Acesso inválido
-3: Existe arquivo de atos protocolado ainda não processado
para a serventia
-4: Erro interno ao protocolar o arquivo
-5: Código da serventia inválido
UploadAtoPraticadoService service = new UploadAtoPraticadoService();
UploadAtoPraticado imp = service.getUploadAtoPraticadoPort();
String codigoServentia = CODIGO_SERVENTIA; // código de 10 dígitos, no formato 1111223344 (1111 = municipio, 22 = tipo de serviço, 33 = sequencial, 44 = dígito verificador)
String enderecoArquivo = "c:/arquivo-teste.xml";
Map reqCtx = ((BindingProvider)imp).getRequestContext();
reqCtx.put(BindingProvider.USERNAME_PROPERTY, "usuario");
reqCtx.put(BindingProvider.PASSWORD_PROPERTY, "senha");
String arquivo = FileUtils.readFileToString(new File(enderecoArquivo));
long protocolo = imp.enviarAtos(codigoServentia, arquivo.getBytes());
System.out.println("Protocolo gerado: " + protocolo);
Exemplo: Cliente WS Assíncrono - Situação do Envio de Atos
A seguir, mostramos um exemplo de código
que implementa um cliente WebService assíncrono com login para
verificação da situação de um envio de atos. Esse
código é meramente
ilustrativo, e foi feito em Java com a API JAX WS.
O método "situacaoEnvioAtos" terá um dos seguintes retornos:
-6: Protocolo não existe: Se o protocolo não foi encontrado ou não pertence à serventia informada.
-5: Código da serventia inválido
-4: Erro interno ao pesquisar protocolo
-1: Usuário sem permissão: Se a serventia não for válida para o usuário logado.
0: Aguardando processamento: Se ainda estiver na fila de processamento.
1: Processado com sucesso: Se foi processado e os atos foram aceitos.
2: Processado com erro: Se foi processado e ocorreu erro em algum ato.
3: Falha no processamento: Se ocorreu qualquer erro ao processar o arquivo,
o impedindo de terminar o processamento. Por exemplo se o arquivo não for um xml válido.
UploadAtoPraticadoService service = new UploadAtoPraticadoService();
UploadAtoPraticado imp = service.getUploadAtoPraticadoPort();
String codigoServentia = CODIGO_SERVENTIA; // código de 10 dígitos, no formato 1111223344 (1111 = municipio, 22 = tipo de serviço, 33 = sequencial, 44 = dígito verificador)
long protocolo = PROTOCOLO;
Map reqCtx = ((BindingProvider)imp).getRequestContext();
reqCtx.put(BindingProvider.USERNAME_PROPERTY, "usuario");
reqCtx.put(BindingProvider.PASSWORD_PROPERTY, "senha");
long situacao = imp.situacaoEnvioAtos(codigoServentia, protocolo);
System.out.println("Situacao do envio de atos: " + situacao);
Exemplo: Cliente WS Assíncrono - Mensagens do Envio de Atos
A seguir, mostramos um exemplo de código que implementa um
cliente WebService assíncrono com login para obtenção das mensagens
de processamento de um envio de atos. Esse código é meramente
ilustrativo, e foi feito em Java com a API JAX WS.
O método "mensagensEnvioAtos" terá como retorno uma lista com as mensagems
referentes ao processamento do envio de atos do protocolo informado.
Caso o processamento não tenha sido ainda realizado, o método retornará
uma lista vazia. Para identificar se o processamento já foi realizado,
utilize o método "situacaoEnvioAtos".
UploadAtoPraticadoService service = new UploadAtoPraticadoService();
UploadAtoPraticado imp = service.getUploadAtoPraticadoPort();
String codigoServentia = CODIGO_SERVENTIA; // código de 10 dígitos, no formato 1111223344 (1111 = municipio, 22 = tipo de serviço, 33 = sequencial, 44 = dígito verificador)
long protocolo = PROTOCOLO;
Map reqCtx = ((BindingProvider)imp).getRequestContext();
reqCtx.put(BindingProvider.USERNAME_PROPERTY, "usuario");
reqCtx.put(BindingProvider.PASSWORD_PROPERTY, "senha");
List mensagens = imp.mensagensEnvioAtos(codigoServentia, protocolo);
for(String s : mensagens) {
System.out.println(s);
}
Exemplo: Cliente WS Assíncrono - Obter último protocolo
A seguir, mostramos um exemplo de código que implementa um
cliente WebService assíncrono com login para obter o último protocolo.
Esse código é meramente ilustrativo, e foi feito em Java com a API JAX WS.
O método "obterUltimoProtocolo" foi criado para auxiliar os desenvolvedores
no tratamento de casos em que, ao realisar um envio de atos, a conexão entre
o sistema da Serventia e o SISNOR WEB seja por algum motivo interrompida. Caso isso
aconteça, o método deverá ser utilizado para que o sistema da Serventia
obtenha o protocolo desse envio.
O método "obterUltimoProtocolo" terá um dos seguintes retornos:
Número do protocolo
-1: Usuário sem permissão
-2: Acesso inválido
-4: Erro interno ao recuperar último protocolo
-5: Código da serventia inválido
-6: Protocolo não existe
UploadAtoPraticadoService service = new UploadAtoPraticadoService();
UploadAtoPraticado imp = service.getUploadAtoPraticadoPort();
String codigoServentia = CODIGO_SERVENTIA; // código de 10 dígitos, no formato 1111223344 (1111 = municipio, 22 = tipo de serviço, 33 = sequencial, 44 = dígito verificador)
Map reqCtx = ((BindingProvider)imp).getRequestContext();
reqCtx.put(BindingProvider.USERNAME_PROPERTY, "usuario");
reqCtx.put(BindingProvider.PASSWORD_PROPERTY, "senha");
long protocolo = imp.obterUltimoProtocolo(codigoServentia);
System.out.println("Protocolo do último envio de atos: " + protocolo);
Exemplo: Cliente WS Assíncrono - Obter recibo
O método "obterRecibo" foi criado para permitir aos desenvolvedores
implementarem em seus próprios sistemas a obtenção das informações do recibo
de Envio de Atos Praticados. A disponibilização do recibo de transmissão de
atos praticados ocorrerá somente no dia seguinte à transmissão dos atos.
O recibo é gerado com base na data de transmissão dos atos praticados,
não é considerada a data da prática do ato, pois trata-se de recibo de
transmissão e não de recibo de prática de ato.
O método "obterRecibo" terá como retorno um "Recibo" em formato XML.
O código do recibo poderá ter os seguintes valores:
Código do recibo (se número positivo)
-1: Usuário sem permissão
-4: Erro interno ao recuperar recibo
-5: Código da serventia inválido
-7: Data inválida
-8: Recibo inexistente
A seguir, mostramos um exemplo de requisição e retorno obtido via SoapUI.
Esse código é meramente ilustrativo.
A seguir, mostramos um exemplo de código que implementa um
cliente WebService com login para obter o recibo.
Esse código é meramente ilustrativo, e foi feito em Java com a API JAX WS.
UploadAtoPraticadoService service = new UploadAtoPraticadoService();
UploadAtoPraticado imp = service.getUploadAtoPraticadoPort();
String codigoServentia = CODIGO_SERVENTIA; // código de 10 dígitos, no formato 1111223344 (1111 = municipio, 22 = tipo de serviço, 33 = sequencial, 44 = dígito verificador)
String dataReferencia = "2016-01-29"; // data no formato "yyyy-MM-dd"
Map reqCtx = ((BindingProvider)imp).getRequestContext();
reqCtx.put(BindingProvider.USERNAME_PROPERTY, "usuario");
reqCtx.put(BindingProvider.PASSWORD_PROPERTY, "senha");
Recibo retorno = imp.obterRecibo(CODIGO_SERVENTIA, dataReferencia);
WSDL do Ambiente de Produção
O Web
Services Description Language (WSDL) do Ambiente de Produção
está disponível no endereço https://selos.tjmg.jus.br/webservices/UploadAtoPraticado?wsdl.
O endereço Simple Object Access Protocol (SOAP) é
"https://selos.tjmg.jus.br/webservices/UploadAtoPraticado".
ATENÇÃO: os métodos assíncronos somente serão disponibilizados em produção em 01/10/2015.
Até lá, deverá ser utilizado o método síncrono. Para testes dos métodos assíncronos,
favor utilizar o ambiente de homologação, que já contempla os novos métodos desde 01/09/2015.
A seguir, segue um projeto exemplo que ilustra o processo
de criptografar e assinar o arquivo de atos
praticados. Ele é meramente ilustrativo e foi feito em
Java com o auxílio da biblioteca Apache Santuario.
Para orientações quanto à execução do projeto, realizar a
leitura do arquivo LEIAME.txt.
ATENÇÃO: Este projeto segue a licença MIT, cuja descrição
pode ser encontrada clicando-se aqui.
O TJMG não fornece nenhum tipo de garantia ou suporte para este
projeto, e o disponibiliza apenas como exemplo para os
desenvolvedores de software.