O documento descreve o LacteWS, um serviço web da Parprimo para compartilhamento de dados lácteos entre cooperativas e laticínios. O LacteWS permite publicar e recuperar informações sobre produtores, coletas, transporte e rotas de entrega por meio de um modelo de dados e métodos web. O documento explica como consumir o serviço por meio de exemplos em Java.
Boas práticas de programação com Object Calisthenics
Lacte ws
1. LacteWS - WS PARPRIMO PARA COMPARTILHAMENTO DE DADOS LACTEOS
Douglas Hiura Longo
douglashiura@inf.ufsc.br
Rogério Bagatini
1 Introdução
A Parprimo disponibiliza infraestrutura de Web Service (LacteWS) para o compartilhamento
dos dados dos laticínios ou cooperativas, ou seja, Através do LacteWS é possível publicar e
resgatar as informações.
Este tutorial está estruturado em duas partes principais, sendo, o Modelo de Dados e o
Web Service LacteWS. A pretensão deste é ser sucinto sem definição de tecnologias ou métodos
de tecnologia.
2 O Modelo de Dados
O modelo de dados está descrito no wsdl(comentado mais a frente) e representado aqui
com um diagrama. Todas as entidades que carregam os dados têm prefixo Bean, exemplo
BeanProdutor. Em todas as entidades há um atributo chamado uid do tipo inteiro. O uid deve ser
único para cada tipo de entidade, pode ser um valor sequencial inteiro, ainda, o uid é a chave de
referências.
2. BeanTransportadora
uid Integer
nome String
municipio Integer (#1)
cnpj Long
1
BeanColetor N
uid Integer BeanCaminho
nome String uid Integer
1
transportadora BeanTransportadora nome String
N
coletor BeanColetor
BeanColeta 1
N
uid Integer
volume Integer BeanRota
produtor BeanProdutor uid Integer
compartimento Integer inicio Date
temperatura Float * descarga Date
N caminho BeanCaminho
alizarol Integer *
data Date coletas List<BeanColeta>
1
N
1
BeanProdutor
uid Integer
nome String
municipio Integer (#1)
Diagrama do modelo de dados - 1
3. 3 Descrições e restrições
Sobre o diagrama acima, segue, uma pequena descrição do modelo de dados e
implicitamente cada nome e seu tipo se definem. Ademais, todos os atributos são requeridos,
exceto marcados com *(temperatura e alizarol), para restrições e intervalos descreve-se:
BeanTransportadora
uid -
nome - comprimento de 1 a 40.
municipio –ver Tabela Valor – Município.
cnpj – é o valor do cadastro de pessoa jurídica, não é feita validação.
BeanColetor
uid -
nome - comprimento de 1 a 40.
transportadora -
BeanCaminho
uid -
nome - comprimento de 1 a 40.
coletor -
BeanProdutor
uid -
nome - comprimento de 1 a 40.
municipio – ver Tabela Valor – Município.
BeanColeta
uid -
volume – Volume coletado em litros
4. produtor -
compartimento – Compartimento do caminhão, valores[1, 2, 3, 4]. Caso em um produtor
utilizar mais de um compartimento, então fazer a quantidade requerida de beanColeta com os
respectivos volumes e compartimentos para o produtor, ou apenas um beanColeta com o primeiro
compartimento utilizado e com a soma de volumes.
temperatura - Opcional, valor em Grau Celsius.
alizarol - Opcional, [-68,68,70,72,74,76,78,80,null].
data - Horário da coleta.
BeanRota
uid -
inicio – Horário de inicio .
descarga - Horário de descarga no laticínio.
caminho -
coletas - Lista de Coletas.
4 Web Service LacteWS
O LacteWS é o ponto onde está exposto o serviço, seu wsdl pode ser obtido em
http://lacte.ws.parprimo.com/lacte/LacteWS?wsdl (Testes http://200.135.239.104/lacte/LacteWS?
wsdl) aos desenvolvedores Java + eclipse segue um conjunto de passos:
No Eclipse: File → New Java Project
5. Depois do projeto java criado, vou usar o assistente através do
wsdl(http://lacte.ws.parprimo.com/lacte/LacteWS?wsdl , Testes
http://200.135.239.104/lacte/LacteWS?wsdl) para gerar as classes e entidades.
9. }
private static BeanColetor novoColetor(int uid,
BeanTransportadora transportadora) {
BeanColetor coletor = new BeanColetor();
coletor.setNome("Coletor");
coletor.setUid(uid);
coletor.setTransportadora(transportadora);
return coletor;
}
private static BeanTransportadora novaTransportadora(int uid) {
BeanTransportadora transportadora = new BeanTransportadora();
transportadora.setUid(uid);
transportadora.setCnpj(0000000011111111l);
transportadora.setMunicipio(10001);
transportadora.setNome("Teste");
return transportadora;
}
private static BeanProdutor novoProdutor(Integer uid) {
BeanProdutor produtor = new BeanProdutor();
produtor.setMunicipio(10001);
produtor.setNome("Teste");
produtor.setUid(uid);
return produtor;
}
}
5 Sobre LacteWS
A Classe LacteWS é o ponto de consumo do serviço, e possui os métodos:
- criarTransportadores(toke,BeanTransportadora[] transportadores) throws ExceptionWS;
- criarRotas(String toke, BeanRota[] rotas) throws ExceptionWS;
10. - criarCaminhos(String toke, BeanCaminho[] caminhos) throws ExceptionWS;
- criarProdutores(String toke, BeanProdutor[] produtores) throws ExceptionWS;
- criarColetores(String toke, BeanColetor[] coletores) throws ExceptionWS;
Esses métodos estão disponíveis para publicar os dados inerente ao desenho Lácteo no
WS Parprimo. O argumento toke passado em cada um deles métodos é um identificador que a
Parprimo fornece aos consumidores do serviço.
Todos os métodos recebem uma lista de Beans, caso todos forem validos, serão
armazenados. Para as relações BeanTransportadora e BeanColetor deve ser informado
antecipadamente a transportadora e posteriormente o coletor. Ainda, não há limite para a lista,
pois ainda não aconteceu sobrecarga em uso normal. Em caso de alguma entidade estiver com
dados inválidos, nenhuma delas é guardada pela Parprimo.
Para casos de erros na validação é encapsulado e retornado dentro das exceção
mensagens que podem ser recuperadas usando o método getErro() da classe ExceptionWS.
A Parprimo está desenvolvendo um WS mais promiscuo desrespeitando essa hierarquia de
relações, mas está ainda em testes.
5.1 Sobre XSD
A validação pelo XSD (http://lacte.ws.parprimo.com/lacte/LacteWS?xsd=1
http://200.135.239.104/lacte/LacteWS?xsd=1) é desaconselhada, foi bem limitada, pois há
algumas divergências com outras tecnologia não java. Como o consumo deste web service é para
outros computadores, então recomenda-se seguir Descrições e Restrições, sessão acima.
6 Sobre o Toke
Um toke oficial associado a um laticínio é emitido após homologado o funcionamento no servidor
de testes e solicitação na Parprimo. O servidor de testes fica no endereço 200.135.239.104.
Através da página (http://200.135.239.104/index.par) é possível gerar um toke para testes.
11. 7 Tabela Valor – Município
0=Sem Endereço
10000=Abdon Batista, Santa Catarina
10005=Abelardo Luz, Santa Catarina
10010=Agrolândia, Santa Catarina
10015=Agronômica, Santa Catarina
10020=Água Doce, Santa Catarina
10025=Águas de Chapecó, Santa Catarina
10030=Águas Frias, Santa Catarina
10035=Águas Mornas, Santa Catarina
10040=Alfredo Wagner, Santa Catarina
10045=Alto Bela Vista, Santa Catarina
10050=Anchieta, Santa Catarina
10055=Angelina, Santa Catarina
10060=Anita Garibaldi, Santa Catarina
10065=Anitápolis, Santa Catarina
10070=Antônio Carlos, Santa Catarina
10075=Apiúna, Santa Catarina
10080=Arabutã, Santa Catarina
10085=Araquari, Santa Catarina
10090=Araranguá, Santa Catarina
10095=Armazém, Santa Catarina
10100=Arroio Trinta, Santa Catarina
10105=Arvoredo, Santa Catarina
10110=Ascurra, Santa Catarina
10115=Atalanta, Santa Catarina
10120=Aurora, Santa Catarina
10125=Balneário Arroio do Silva, Santa Catarina
10130=Balneário Barra do Sul, Santa Catarina
10135=Balneário Camboriú, Santa Catarina
10140=Balneário de Piçarras, Santa Catarina
10145=Balneário Gaivota, Santa Catarina
10150=Bandeirante, Santa Catarina
10155=Barra Bonita, Santa Catarina
10160=Barra Velha, Santa Catarina
10165=Bela Vista do Toldo, Santa Catarina
10170=Belmonte, Santa Catarina
12. 10175=Benedito Novo, Santa Catarina
10180=Biguaçu, Santa Catarina
10185=Blumenau, Santa Catarina
10190=Bocaina do Sul, Santa Catarina
10195=Bom Jardim da Serra, Santa Catarina
10200=Bom Jesus, Santa Catarina
10205=Bom Jesus do Oeste, Santa Catarina
10210=Bom Retiro, Santa Catarina
10215=Bombinhas, Santa Catarina
10220=Botuverá, Santa Catarina
10225=Braço do Norte, Santa Catarina
10230=Braço do Trombudo, Santa Catarina
10235=Brunópolis, Santa Catarina
10240=Brusque, Santa Catarina
10245=Caçador, Santa Catarina
10250=Caibi, Santa Catarina
10255=Calmon, Santa Catarina
10260=Camboriú, Santa Catarina
10265=Campo Alegre, Santa Catarina
10270=Campo Belo do Sul, Santa Catarina
10275=Campo Erê, Santa Catarina
10280=Campos Novos, Santa Catarina
10285=Canelinha, Santa Catarina
10290=Canoinhas, Santa Catarina
10295=Capão Alto, Santa Catarina
10300=Capinzal, Santa Catarina
10305=Capivari de Baixo, Santa Catarina
10310=Catanduvas, Santa Catarina
10315=Caxambu do Sul, Santa Catarina
10320=Celso Ramos, Santa Catarina
10325=Cerro Negro, Santa Catarina
10330=Chapadão do Lageado, Santa Catarina
10335=Chapecó, Santa Catarina
10340=Cocal do Sul, Santa Catarina
10345=Concórdia, Santa Catarina
10350=Cordilheira Alta, Santa Catarina
10355=Coronel Freitas, Santa Catarina
10360=Coronel Martins, Santa Catarina
13. 10365=Correia Pinto, Santa Catarina
10370=Corupá, Santa Catarina
10375=Criciúma, Santa Catarina
10380=Cunha Porã, Santa Catarina
10385=Cunhataí, Santa Catarina
10390=Curitibanos, Santa Catarina
10395=Descanso, Santa Catarina
10400=Dionísio Cerqueira, Santa Catarina
10405=Dona Emma, Santa Catarina
10410=Doutor Pedrinho, Santa Catarina
10415=Entre Rios, Santa Catarina
10420=Ermo, Santa Catarina
10425=Erval Velho, Santa Catarina
10430=Faxinal dos Guedes, Santa Catarina
10435=Flor do Sertão, Santa Catarina
10440=Florianópolis, Santa Catarina
10445=Formosa do Sul, Santa Catarina
10450=Forquilhinha, Santa Catarina
10455=Fraiburgo, Santa Catarina
10460=Frei Rogério, Santa Catarina
10465=Galvão, Santa Catarina
10470=Garopaba, Santa Catarina
10475=Garuva, Santa Catarina
10480=Gaspar, Santa Catarina
10485=Governador Celso Ramos, Santa Catarina
10490=Grão-Pará, Santa Catarina
10495=Gravatal, Santa Catarina
10500=Guabiruba, Santa Catarina
10505=Guaraciaba, Santa Catarina
10510=Guaramirim, Santa Catarina
10515=Guarujá do Sul, Santa Catarina
10520=Guatambu, Santa Catarina
10525=Herval D´Oeste, Santa Catarina
10530=Ibiam, Santa Catarina
10535=Ibicaré, Santa Catarina
10540=Ibirama, Santa Catarina
10545=Içara, Santa Catarina
10550=Ilhota, Santa Catarina
14. 10555=Imaruí, Santa Catarina
10560=Imbituba, Santa Catarina
10565=Imbuia, Santa Catarina
10570=Indaial, Santa Catarina
10575=Iomerê, Santa Catarina
10580=Ipira, Santa Catarina
10585=Iporã do Oeste, Santa Catarina
10590=Ipuaçu, Santa Catarina
10595=Ipumirim, Santa Catarina
10600=Iraceminha, Santa Catarina
10605=Irani, Santa Catarina
10610=Irati, Santa Catarina
10615=Irineópolis, Santa Catarina
10620=Itá, Santa Catarina
10625=Itaiópolis, Santa Catarina
10630=Itajaí, Santa Catarina
10635=Itapema, Santa Catarina
10640=Itapiranga, Santa Catarina
10645=Itapoá, Santa Catarina
10650=Ituporanga, Santa Catarina
10655=Jaborá, Santa Catarina
10660=Jacinto Machado, Santa Catarina
10665=Jaguaruna, Santa Catarina
10670=Jaraguá do Sul, Santa Catarina
10675=Jardinópolis, Santa Catarina
10680=Joaçaba, Santa Catarina
10685=Joinville, Santa Catarina
10690=José Boiteux, Santa Catarina
10695=Jupiá, Santa Catarina
10700=Lacerdópolis, Santa Catarina
10705=Lages, Santa Catarina
10710=Laguna, Santa Catarina
10715=Lajeado Grande, Santa Catarina
10720=Laurentino, Santa Catarina
10725=Lauro Müller, Santa Catarina
10730=Lebon Régis, Santa Catarina
10735=Leoberto Leal, Santa Catarina
10740=Lindóia do Sul, Santa Catarina
15. 10745=Lontras, Santa Catarina
10750=Luiz Alves, Santa Catarina
10755=Luzerna, Santa Catarina
10760=Macieira, Santa Catarina
10765=Mafra, Santa Catarina
10770=Major Gercino, Santa Catarina
10775=Major Vieira, Santa Catarina
10780=Maracajá, Santa Catarina
10785=Maravilha, Santa Catarina
10790=Marema, Santa Catarina
10795=Massaranduba, Santa Catarina
10800=Matos Costa, Santa Catarina
10805=Meleiro, Santa Catarina
10810=Mirim Doce, Santa Catarina
10815=Modelo, Santa Catarina
10820=Mondaí, Santa Catarina
10825=Monte Carlo, Santa Catarina
10830=Monte Castelo, Santa Catarina
10835=Morro da Fumaça, Santa Catarina
10840=Morro Grande, Santa Catarina
10845=Navegantes, Santa Catarina
10850=Nova Erechim, Santa Catarina
10855=Nova Itaberaba, Santa Catarina
10860=Nova Trento, Santa Catarina
10865=Nova Veneza, Santa Catarina
10870=Novo Horizonte, Santa Catarina
10875=Orleans, Santa Catarina
10880=Otacílio Costa, Santa Catarina
10885=Ouro, Santa Catarina
10890=Ouro Verde, Santa Catarina
10895=Paial, Santa Catarina
10900=Painel, Santa Catarina
10905=Palhoça, Santa Catarina
10910=Palma Sola, Santa Catarina
10915=Palmeira, Santa Catarina
10920=Palmitos, Santa Catarina
10925=Papanduva, Santa Catarina
10930=Paraíso, Santa Catarina
16. 10935=Passo de Torres, Santa Catarina
10940=Passos Maia, Santa Catarina
10945=Paulo Lopes, Santa Catarina
10950=Pedras Grandes, Santa Catarina
10955=Penha, Santa Catarina
10960=Peritiba, Santa Catarina
10965=Petrolândia, Santa Catarina
10970=Pinhalzinho, Santa Catarina
10975=Pinheiro Preto, Santa Catarina
10980=Piratuba, Santa Catarina
10985=Planalto Alegre, Santa Catarina
10990=Pomerode, Santa Catarina
10995=Ponte Alta, Santa Catarina
11000=Ponte Alta do Norte, Santa Catarina
11005=Ponte Serrada, Santa Catarina
11010=Porto Belo, Santa Catarina
11015=Porto União, Santa Catarina
11020=Pouso Redondo, Santa Catarina
11025=Praia Grande, Santa Catarina
11030=Presidente Castelo Branco, Santa Catarina
11035=Presidente Getúlio, Santa Catarina
11040=Presidente Nereu, Santa Catarina
11045=Princesa, Santa Catarina
11050=Quilombo, Santa Catarina
11055=Rancho Queimado, Santa Catarina
11060=Rio das Antas, Santa Catarina
11065=Rio do Campo, Santa Catarina
11070=Rio do Oeste, Santa Catarina
11075=Rio do Sul, Santa Catarina
11080=Rio dos Cedros, Santa Catarina
11085=Rio Fortuna, Santa Catarina
11090=Rio Negrinho, Santa Catarina
11095=Rio Rufino, Santa Catarina
11100=Riqueza, Santa Catarina
11105=Rodeio, Santa Catarina
11110=Romelândia, Santa Catarina
11115=Salete, Santa Catarina
11120=Saltinho, Santa Catarina
17. 11125=Salto Veloso, Santa Catarina
11130=Sangão, Santa Catarina
11135=Santa Cecília, Santa Catarina
11140=Santa Helena, Santa Catarina
11145=Santa Rosa de Lima, Santa Catarina
11150=Santa Rosa do Sul, Santa Catarina
11155=Santa Terezinha, Santa Catarina
11160=Santa Terezinha do Progresso, Santa Catarina
11165=Santiago do Sul, Santa Catarina
11170=Santo Amaro da Imperatriz, Santa Catarina
11175=São Bento do Sul, Santa Catarina
11180=São Bernardino, Santa Catarina
11185=São Bonifácio, Santa Catarina
11190=São Carlos, Santa Catarina
11195=São Cristóvão do Sul, Santa Catarina
11200=São Domingos, Santa Catarina
11205=São Francisco do Sul, Santa Catarina
11210=São João Batista, Santa Catarina
11215=São João do Itaperiú, Santa Catarina
11220=São João do Oeste, Santa Catarina
11225=São João do Sul, Santa Catarina
11230=São Joaquim, Santa Catarina
11235=São José, Santa Catarina
11240=São José do Cedro, Santa Catarina
11245=São José do Cerrito, Santa Catarina
11250=São Lourenço do Oeste, Santa Catarina
11255=São Ludgero, Santa Catarina
11260=São Martinho, Santa Catarina
11265=São Miguel da Boa Vista, Santa Catarina
11270=São Miguel do Oeste, Santa Catarina
11275=São Pedro de Alcântara, Santa Catarina
11280=Saudades, Santa Catarina
11285=Schroeder, Santa Catarina
11290=Seara, Santa Catarina
11295=Serra Alta, Santa Catarina
11300=Siderópolis, Santa Catarina
11305=Sombrio, Santa Catarina
11310=Sul Brasil, Santa Catarina
18. 11315=Taió, Santa Catarina
11320=Tangará, Santa Catarina
11325=Tigrinhos, Santa Catarina
11330=Tijucas, Santa Catarina
11335=Timbé do Sul, Santa Catarina
11340=Timbó, Santa Catarina
11345=Timbó Grande, Santa Catarina
11350=Três Barras, Santa Catarina
11355=Treviso, Santa Catarina
11360=Treze de Maio, Santa Catarina
11365=Treze Tílias, Santa Catarina
11370=Trombudo Central, Santa Catarina
11375=Tubarão, Santa Catarina
11380=Tunápolis, Santa Catarina
11385=Turvo, Santa Catarina
11390=União do Oeste, Santa Catarina
11395=Urubici, Santa Catarina
11400=Urupema, Santa Catarina
11405=Urussanga, Santa Catarina
11410=Vargeão, Santa Catarina
11415=Vargem, Santa Catarina
11420=Vargem Bonita, Santa Catarina
11425=Vidal Ramos, Santa Catarina
11430=Videira, Santa Catarina
11435=Vítor Meireles, Santa Catarina
11440=Witmarsum, Santa Catarina
11445=Xanxerê, Santa Catarina
11450=Xavantina, Santa Catarina
11455=Xaxim, Santa Catarina
11460=Zortéa, Santa Catarina