Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Sumrio
1 nstru!"es iniciais################################################################################################################$ 2 mplementando cliente com %&'(WS )%*+ 1#,-#################################################################. 2#1 Criando um pro/eto %ava no Eclipse############################################################################. 2#2 Criando ar0uivo de autentica!1o do Web Service######################################################. 2#$ niciando a gera!1o das classes#################################################################################. 2#. 2eali3ando a c4amada ao Web Service#####################################################################5 2#5 %&'(WS com 6aven####################################################################################################, $ mplementando cliente WS com &' S e Eclipse S*+########################################################7 $#1 Criando um pro/eto B8sico no Eclipse#########################################################################7 $#2 9erificando a %2E utili3ada pelo Eclipse#####################################################################7 $#$ &dicionando Web Services Client no Eclipse S*+#####################################################7 $#. 2eali3ando a primeira c4amada ao Web Service#######################################################: $#5 Criando classe com o m;todo main############################################################################< . mportando os certificados de acesso##############################################################################10 .#1 Bai=ando os certificados############################################################################################10 .#2 mportando os certificados para a %96 padr1o#########################################################11 5 2espondendo demandas com ane=os#############################################################################1$ 5#1 >pera!1o responder##################################################################################################1$ 5#2 >pera!1o responderBase,.#####################################################################################1. , 2ecuperando ane=os do WS############################################################################################1, 7 Problemas con4ecidos######################################################################################################17 7#1 9alidade do '6?########################################################################################################17 7#2 nvalid element org#apac4e#a=is#encoding#ser#Bean*eseriali3er#onStartC4ild#########17 7#$ T4ere@s no >b/ectAactorB Cit4 an D'mlElement*ecl for t4e element#####################17
P8gina $ de 1:
1 Instrues iniciais
Para esta configura!1o foi utili3ado o Eclipse S*+ Helios S21 com o %2E vers1o , atuali3a!1o 22 )1#,#0E22(b0.- com sistema WindoCs 'P Professional# Siga a ordem dos tFpicos a seguir para concluir a configura!1o do Cliente# Se vocG tem certe3a de 0ue nunca importou os certificados do B&CEH, necess8rios para acesso ao WS, pode ir direto para o passo Importando os certificados de acesso na p8gina 10, antes de iniciar 0ual0uer configura!1o do cliente# Heste manual, s1o descritos duas maneiras de gerar um cliente de Web Services em %avaI - Implementando cliente WS com AXIS e Eclipse SDK; e - Implementando cliente com JAX-WS JDK 1!"#! Escol4a a configura!1o 0ue mel4or se aplica a sua organi3a!1o, e siga as orienta!"es# Todos os recursos do Web Service )inclusive o WS*?- s1o protegidos por usu8rio e sen4a de acesso# &s credenciais de acesso s1o as mesmas utili3adas no sistema 2*2JS SC&P e devem ser fornecidas no formato $institui%o&$depend'ncia&!$usurio& )e=emploI ()*+,,-,)!cef(1*..-# > usu8rio do Web Service, deve estar credenciado nas transa!"es SSCP001 eJou SSCP002 do S SB&CEH no ambiente de 4omologa!1o# Ksu8rios 0ue /8 possuem acesso ao 2*2JS SC&P, automaticamente /8 possuem acesso tamb;m aos servi!os do Web Service 2*2 e vice(versa#
P8gina . de 1:
P8gina 5 de 1:
import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype. !LGregorianCalendar; import import import import import import import "r.gov."c".rdr.siscapws.o"jetos.xsd.Demanda#$%; "r.gov."c".rdr.siscapws.o"jetos.xsd.&ituacao#$%; "r.gov."c".rdr.siscapws.o"jetos.xsd.%ipoPes'uisa#$%; "r.gov."c".rdr.siscapws.services.Get&ituacoes(esponse; "r.gov."c".rdr.siscapws.services.Get%iposPes'uisa(esponse; "r.gov."c".rdr.siscapws.services.)nstituicao&ervice; "r.gov."c".rdr.siscapws.services.)nstituicao&ervicePort%ype;
public class !ain * public static void main+&tring,- args. throws /xception * 00Colo'ue a senha de acesso ao sis"acen a'ui Authenticator.setDefault+new Authenticator+. * protected PasswordAuthentication getPasswordAuthentication+. * &tring user 1 2usuario2; &tring password 1 2senha2; return new PasswordAuthentication+user3 password.toCharArray+..; 4 4.; )nstituicao&ervice service 1 new )nstituicao&ervice+.; )nstituicao&ervicePort%ype endpoint 1 service.get)nstituicao&ervice5ttp&oap66/ndpoint+.; Get&ituacoes(esponse situacoes 1 endpoint.get&ituacoes+.; List7&ituacao#$%8 lista 1 situacoes.get(eturn+.; for +&ituacao#$% situacao#$% 9 lista. * &ystem.out.println+situacao#$%.getDescricao+..get:alue+..; 4 Get%iposPes'uisa(esponse tiposPes'uisa(esponse 1 endpoint.get%iposPes'uisa+.; List7%ipoPes'uisa#$%8 tiposPes'uisa 1 tiposPes'uisa(esponse.get(eturn+.; for +%ipoPes'uisa#$% tipoPes'uisa#$% 9 tiposPes'uisa. * &ystem.out.println+tipoPes'uisa#$%.getCodigo+..get:alue+. ; 2 2 ; tipoPes'uisa#$%.getDescricao+..get:alue+..; 4 DatatypeFactory <actory 1 DatatypeFactory.newInstance+.; !LGregorianCalendar data)nicio 1 <actory.new !LGregorianCalendar+new GregorianCalendar+=>>?3 @3>@3 >3 >3 >..; !LGregorianCalendar dataFim 1 <actory.new !LGregorianCalendar+new GregorianCalendar+=>663 @3>@3 >3 >3 >..;
P8gina , de 1:
List7Demanda#$%8 demandas 1 endpoint.getDemandas+data)nicio3 dataFim3 2A23 null3 null.; for +Demanda#$% demanda#$% 9 demandas. * &ystem.out.println+demanda#$%.get)d)nterno+..get:alue+. ;2 2;demanda#$%.getAumeroDemanda+..get:alue+..; 4 4 4
L possMvel tamb;m, gerar as classes do cliente utili3ando todos os WS*? dos servi!os suportados pelo Web Service, repetindo o elemento OCsdlKrlP para cada servi!o do 2*2 Web Service# 6as aten!1o, 48 um problema con4ecido ao ler v8rios WS*?s com o mesmo namespace Q ve/a mais na p8gina 17 ( OT4ere@s no >b/ectAactorB Cit4 an D'mlElement*ecl for t4e elementO#
P8gina 7 de 1:
Ho campo Ser3ice definition colo0ue a K2? 0ue possui o WS*? )neste e=emplo useI 4ttpsIJJCCC<#bcb#gov#brJ4mlJrdrCsJservicesJ nstituicaoServiceW Csdl-R &o terminar de digitar o endere!o ou mover o foco para fora do campo, o Eclipse dever8 E=ibir uma tela com usu8rio e sen4a a serem informados ou a mensagem de erro @1e ser3ice definition selected is in3alid R caso esta mensagem ten4a sido e=ibida pelo Eclipse, v8 para o tFpico Importando os
P8gina : de 1:
certificados de acesso )p8gina 10- e ao finali3ar este passo adicional, fec4e o Eclipse e inicie novamente, retomando a configura!1o at; este ponto# Se o certificado tiver sido importado com sucesso, o Eclipse mostrar8 a telaI
Basta clicar >+ e continuar normalmenteR Ha sess1o de =onfi>urationA selecione os seguintes itensI Web service runtimeI &pac4e &=is Client pro/ectI clienttest observe 0ue o pro/eto informado deve ser o mesmo pro/eto criado no passo =riando um pro:eto Bsico no Eclipse )p8gina 7-R Cli0ue em 7e;tR Cli0ue em 5inis1 e aguarde a cria!1o e gera!1o das classes do Web Service pelo EclipseR
P8gina < de 1:
E=ecute a classe utili3ando a mesma %2E 0ue cont;m os certificados necess8rios# Este cFdigo ; a consulta do total de demandas e=istentes para os parVmetros informados, este total ; impresso no console# &0ui termina a configura!1o do cliente, lembrando 0ue ; apenas uma configura!1o de teste e 0ue podem 4aver particularidades do ambiente 0ue fogem do escopo deste documento e 0ue devem ser tratadas por conta e risco de 0uem est8 implementando#
P8gina 10 de 1:
Cli0ue em 4ais informaes!!!R Ha tela 0ue aparece, cli0ue em E;i2ir certificadoR Cli0ue na aba Detal1esR
P8gina 11 de 1:
E=porte todos os certificados da Hierar0uia clicando sobre o certificado e logo apFs no bot1o E;portar!!!R Salve o certificado no diretFrio ,($V$-./01,#!ib#sec&rit2, lembrando 0ue este %&9&EH>6E deve ser a mesma %96 utili3ada pelo Eclipse )E=emploI ":#$r%&ivos e pro'ramas#(ava#)re*#!ib#sec&rit2 Se os certificados necess8rios n1o tiverem sofrido nen4uma mudan!a, os seguintes certificados foram encontrados e bai=ados para sua m80uinaI (#bcb#gov#br#crt &utoridadeCertificadoradoSE2P2>Ainalv2#crt &utoridadeCertificadora2ai3Brasileirav1#crt &utoridadeCertificadoraSE2P2>v2#crt
P8gina 12 de 1:
Aa!a um bacTup copiando o ar0uivo original =ACArDui3os de pro>ramasCJa3aC:re"Cli2CsecuritECcacerts para outro lugar, pois este ser8 modificado ao importar os certificados# Supondo 0ue foram bai=ados os 0uatro certificados no passo anterior, repita o comando abai=o 0uatro ve3es, uma para cada certificado, substituindo o nome em negrito pelo nome do ar0uivo sem a e=tens1oI TeBtool (import (trustcacerts (TeBstore ##JlibJsecuritBJcacerts (storepass c4angeit (noprompt (alias nomeFdoFcertificado (file ##JlibJsecuritBJnomeFdoFcertificado#crt E=emploI CIS&r0uivos de programasS%avaS/re,SbinYGeEtool -import -trustcacerts -GeEstore !!6li26securitE6cacerts -storepass c1an>eit -noprompt -alias Autoridade=ertificadora/ai0Brasileira31 -file !!6li26securitE6Autoridade=ertificadora/ai0Brasileira31!crt CIS&r0uivos de programasS%avaS/re,SbinYGeEtool -import -trustcacerts -GeEstore !!6li26securitE6cacerts -storepass c1an>eit -noprompt -alias Autoridade=ertificadoraSE/9/?3* -file !!6li26securitE6Autoridade=ertificadoraSE/9/?3*!crt CIS&r0uivos de programasS%avaS/re,SbinYGeEtool -import -trustcacerts -GeEstore !!6li26securitE6cacerts -storepass c1an>eit -noprompt -alias Autoridade=ertificadoradoSE/9/?5inal3* -file !!6li26securitE6Autoridade=ertificadoradoSE/9/?5inal3*!crt CIS&r0uivos de programasS%avaS/re,SbinYGeEtool -import -trustcacerts -GeEstore !!6li26securitE6cacerts -storepass c1an>eit -noprompt -alias -!2c2!>o3!2r -file !!6li26securitE6-!2c2!>o3!2r!crt Xuando o comando for e=ecutado corretamente a seguinte mensagem ; e=ibidaI Certi$icate 0as added to 1e2store
P8gina 1$ de 1:
P8gina 1. de 1:
>bserve 0ue nas lin4as acima, estamos re(atribuindo as vari8veis nome&r0uivo e content d com os valores reais 0ue ser1o repassados ao WS durante a c4amada# ?ogo a seguir tem(se o e=emplo da c4amada a esta opera!1o, 0ue acionar8 o WS enviando o ar0uivo e a resposta para o encamin4amentoI
public class (esponderDemanda * public static void main+&tring,- args. throws /xception * AtualiIarDemanda&erviceLocator locator 1 new AtualiIarDemanda&erviceLocator+.; AtualiIarDemanda&ervicePort%ype endpoint 1 locator.getAtualiIarDemanda&ervice5ttp&oap66/ndpoint+.; &tring resposta 1 2(espondendo o encaminhamento =6?J>F pelo K&2; )nteger id/ncaminhamento 1 new )nteger+=6?J>F.; &tring nomeAr'uivo 1 2C9LLPrMBprojeto.pd<2; 4 4 endpoint.responder+resposta3 id/ncaminhamento3 null3 nomeAr'uivo.;
P8gina 15 de 1:
public class (esponderDemandaNaseJH * public static void main+&tring,- args. throws /xception * AtualiIarDemanda&erviceLocator locator 1 new AtualiIarDemanda&erviceLocator+.; AtualiIarDemanda&ervicePort%ype endpoint 1 locator.getAtualiIarDemanda&ervice5ttp&oap66/ndpoint+.; &tring resposta 1 2(espondendo o encaminhamento =6?=6J pelo K&2; )nteger id/ncaminhamento 1 new )nteger+=6?=6J.; File ar'uivo 1 new File+2C9LLPrMBprojeto.pd<2.; File)nput&tream ar'uivo)& 1 new File)nput&tream+ar'uivo.; NyteArray#utput&tream saida 1 new NyteArray#utput&tream+.; copia+saida3 ar'uivo)&.; byte,- conteudo&tringAr'uivo 1 saida.toNyteArray+.; &tring nomeAr'uivo 1 ar'uivo.getAame+.; &tring content%ype 1 ar'uivo.to$(L+..openConnection+..getContent%ype+.; &tring conteudoNaseJH 1 NaseJH.encode+conteudo&tringAr'uivo.; if+2content0unOnown2.e'uals+content%ype..* content%ype 1 2application0octetBstream2; 4 endpoint.responderNaseJH+resposta3 id/ncaminhamento3 nomeAr'uivo3 content%ype3 conteudoNaseJH.; 4 0PP P copiar uma stream para outra P @param destino P @param origem P @throws )#/xception P0 public static void copia+#utput&tream destino3 )nput&tream origem.throws )#/xception * byte,- "u<<er 1 new byte,Q6?=-; int 'tdeLida 1 >; while ++'tdeLida 1 origem.read+"u<<er.. 8 >. * destino.write+"u<<er3 >3 'tdeLida.; 4 destino.close+.; origem.close+.;
4 4
P8gina 1, de 1:
P8gina 17 de 1:
, 9ro2lemas con1ecidos
Configurando o Web Services client com este tutorial foram detectados alguns problemas 0ue podem ocorrer ao reali3ar as c4amadas# &lguns destes problemas s1o descritos a0ui#
P8gina 1: de 1:
ao final, /untar o conteNdo dos ar0uivos O>b/ectAactorB#/avaP gerados para cada servi!o, em apenas um# Essa estrat;gia foi testada, e funcionou corretamente, mantendo a coes1o das classes sem ter 0ue desnecessariamente duplic8(las#