Sistema Eletrônico do Serviço de Informações ao Cidadão – e

Propaganda
Sistema Eletrônico do Serviço de Informações ao
Cidadão – e-Sic
Tutorial Consumindo Webservices Java
Versão 1.1
Histórico de Revisão
Autor
Data
Descrição
Versão
Marcio Otta
15-10-12
Criação do documento
1.0
Marcio Otta
22-10-12
Tutorial do cliente de anexos
1.1
1. Introdução
Este breve tutorial irá mostrar passo a passo a criação de um programa em Java para o consumo dos
webservices do e-Sic.
Neste exemplo, iremos chamar o serviço de consulta de pedidos com apenas alguns parâmetros básicos e
também iremos fazer um cliente para obter os anexos de um pedido. No entanto, a mesma lógica poderá ser
utilizada para os webservices de consultas de recursos.
Utilizamos para este tutorial o Eclipse – versão Juno.
2. Criando um projeto no Eclipse para a consulta de pedidos
Criando um projeto de consumo de webservices

Abrir o eclipse e criar um projeto Java:
File  New  Java Project.

Na tela que se abre, preencha o nome do projeto e clique em Finish.



Para criar as classes do Web Service:
File  New  Other...
Na janela que abre, selecionar a opção Web Services  Web Service Client e clique em Next
Na tela que se abre, preencha o endereço do WSDL :
http://www.acessoainformacao.gov.br/sistema/Servicos/ServicoConsultaPedido.asmx?WSDL
3. Clique em Finish.

Diversas classes serão criadas no seu projeto, como na figura abaixo:

Crie uma nova classe no seu projeto: New  Class. Preencha um nome como abaixo:

Copie o código abaixo na sua classe, alterando o usuário e senha.
import java.util.Calendar;
import java.util.GregorianCalendar;
import
import
import
import
import
br.gov.acessoainformacao.RequestObterPedido;
br.gov.acessoainformacao.ResponseObterPedido;
br.gov.acessoainformacao.ResponsePedido;
br.gov.acessoainformacao.ServicoConsultaPedidoLocator;
br.gov.acessoainformacao.ServicoConsultaPedidoSoapStub;
public class ConsultaPedido {
public static void main(String[] args) {
try {
RequestObterPedido request = new RequestObterPedido();
Calendar dataInicio = new
GregorianCalendar(2012,Calendar.SEPTEMBER,01);
Calendar dataFim = Calendar.getInstance();
request.setDtAberturaInicio(dataInicio);
request.setDtAberturaFim(dataFim);
request.setUsuario("wscgu");
request.setSenha("*****");
ServicoConsultaPedidoLocator locator = new
ServicoConsultaPedidoLocator();
ServicoConsultaPedidoSoapStub
cliente=(ServicoConsultaPedidoSoapStub)locator.getServicoConsultaPedidoSoap();
ResponseObterPedido response;
response = cliente.obterPedidos(request);
System.out.println("Codigo execucao: " +
response.getCodigoExecucao());
ResponsePedido[] pedidos = response.getPedidos();
System.out.println("Qtd Pedidos: " + pedidos.length);
for (ResponsePedido pedido : pedidos ) {
System.out.println("--------------------------------------");
System.out.println("Protocolo:" + pedido.getProtocolo());
System.out.println("Nome:" +
pedido.getSolicitante().getNome());
System.out.println("Descricao:" +
pedido.getDescricaoPedido());
}
}
catch(Exception exc) {
System.out.println(exc.getMessage());
}
}
}


Execute o projeto:
Botão Direito do Mouse na Classe  Run as Java Application.
Ao executar o projeto, os dados dos pedidos irão ser mostrados na Console, como abaixo:
3. Criando uma classe para a consulta de anexos de pedidos
Os webservices de anexos servem para a obtenção dos arquivos que foram anexados aos pedidos e aos
recursos.
Estes anexos, para trafegarem via webservices, são codificados em BASE-64. Para reduzir o tamanho das
mensagens, o arquivo é compactado, antes da codificação para BASE-64, usando o GZIP.
Portanto, o fluxo para o cliente Webservice de Anexox seria algo como:
Chama o Webservice
Decodifica o arquivo
de BASE-64
Descompacta e salva
o arquivo
Abaixo o passo-a-passo para a criação deste método:

No mesmo projeto do exemplo anterior, temos que adicionar a biblioteca para a decodificação de
BASE-64. Usamos a biblioteca “Common Codecs” do Apache
(http://commons.apache.org/codec/userguide.html)



Faça o download dos JAR do conversor de base-64 do apache commons
(http://commons.apache.org/codec/download_codec.cgi)
Adicione os JAR no seu projeto (crie uma pasta LIB, copie o JAR nesta pasta e adicione ao “build
path”
Crie uma classe chamada ConsultaAnexoPedido e copie o código abaixo. Altere o número do
protocolo para um que seja do seu órgão e tenha anexos.
import
import
import
import
import
org.apache.commons.codec.binary.Base64;
br.gov.acessoainformacao.ResponseArquivo;
br.gov.acessoainformacao.ResponseObterPedidoAnexo;
br.gov.acessoainformacao.ServicoConsultaPedidoLocator;
br.gov.acessoainformacao.ServicoConsultaPedidoSoapStub;
public class ConsultaAnexoPedido {
public static void main(String[] args) {
try {
ServicoConsultaPedidoLocator locator = new
ServicoConsultaPedidoLocator();
ServicoConsultaPedidoSoapStub
cliente=(ServicoConsultaPedidoSoapStub)locator.getServicoConsultaPedidoSoap();
ResponseObterPedidoAnexo responseAnexo;
String protocolo = "00075000872201246";
responseAnexo = cliente.obterAnexosPedidos("wscgu", "*****",
protocolo);
System.out.println("Codigo execucao: " +
responseAnexo.getCodigoExecucao());
ResponseArquivo[] arquivos = responseAnexo.getArquivos();
System.out.println("Qtd Anexos: " + arquivos.length);
for (ResponseArquivo arquivo : arquivos) {
System.out.println("---------------------------------------");
System.out.println("Nome:" + arquivo.getNomeArquivo());
byte[] decoded =
Base64.decodeBase64(arquivo.getArquivoZipAndBase64().getBytes());
AnexoUtils.dezipaSalvaArquivo(decoded, "c:\\temp\\" +
arquivo.getNomeArquivo());
}
}
catch(Exception exc) {
System.out.println(exc.getMessage());
}
}
}
•
Crie uma classe chamada AnexoUtils e copie o código abaixo:
import
import
import
import
import
import
java.util.zip.GZIPInputStream;
java.io.ByteArrayInputStream;
java.io.OutputStream;
java.io.FileOutputStream;
java.io.FileInputStream;
java.io.IOException;
public class AnexoUtils {
public static void dezipaSalvaArquivo(byte[] bytesZip, String nomeArquivo) throws
IOException {
try {
GZIPInputStream gzipInputStream = null;
ByteArrayInputStream bais = new ByteArrayInputStream(bytesZip);
gzipInputStream = new GZIPInputStream(bais);
String outFilename = nomeArquivo;
OutputStream out = new FileOutputStream(outFilename);
byte[] buf = new byte[1024];
int len;
while ((len = gzipInputStream.read(buf)) > 0) {
out.write(buf, 0, len);
}
gzipInputStream.close();
out.close();
}
catch(IOException e){
System.out.println("Ocorreu uma excecao em dezipaSalvaArquivo: " + e);
}
}
}

Ao executar, o sistema irá gravar na pasta c:\temp do seu computador os arquivos anexos do
pedido.
Download