Conceitos, SOAP, WSDL, UDDI, Exemplos. Programação com Objetos Distribuídos (C. Geyer) Web Services 1



Documentos relacionados
UNIVERSIDADE. Sistemas Distribuídos

Integração de sistemas utilizando Web Services do tipo REST

3 Serviços na Web (Web services)

UFG - Instituto de Informática

Serviços Web: Arquitetura

Introdução a Web Services

Web Services. Integração de aplicações na Web. Sistemas Distribuídos

Web Services. (Introdução)

Universidade Federal de Juiz de Fora Ciência da Computação Sistemas Distribuídos Professor Ciro Barbosa

REST Um Estilo de Arquitetura de Sistemas Distribuídos

Service Oriented Architecture SOA

Serviços Web: Introdução

Criando Web Services. Palestrante: Daniel Destro do Carmo

SOA Introdução. SOA Visão Departamental das Organizações

Web services. Um web service é qualquer software que está disponível através da Internet através de uma interface XML.

18/04/2006 Micropagamento F2b Web Services Web rev 00

Sistemas Distribuídos

Kassius Vargas Prestes

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução

Programação Cliente em Sistemas Web

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve

Web Services. Conceitos, SOAP, WSDL, UDDI, Exemplos. Programação com Objetos Distribuídos (C. Geyer) Web Services 1

Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva

Conteúdo da Aula de Hoje. Web Services. Avaliação da Disciplina. O que é um web service? O que é um web service? Vantagens

PROGRAMAÇÃO SERVIDOR WEBSERVICES EM SISTEMAS WEB. Prof. Dr. Daniel Caetano

Universidade da Beira Interior

Programação para a Internet. Prof. M.Sc. Sílvio Bacalá Jr sbacala@gmail.com

Introdução Serviços Web WSDL SOAP UDDI Ferramentas. Serviços Web. (Web Services) Emerson Ribeiro de Mello

UNIVERSIDADE. Sistemas Distribuídos

Manual de Integração WebService

Programação para Internet Avançada. 4. Web Services. Nuno Miguel Gil Fonseca

RestFull WebServices. Rafael Nunes Arquiteto de Software / Instrutor Globalcode. Globalcode Open4Education

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

Adriano Reine Bueno Rafael Barros Silva

REST. Caio Nakashima

Web Services. Autor: Rômulo Rosa Furtado

Um Processo para Desenvolvimento de Aplicações Web Baseado em Serviços. Autores: Fábio Zaupa, Itana Gimenes, Don Cowan, Paulo Alencar e Carlos Lucena

INTEGRAÇÃO DE APLICAÇÕES UTILIZANDO WEB SERVICE 1. Kellen Kristine Perazzoli 2 ; Manassés Ribeiro 3

Conceitos de Ajax Exemplos de uso do Ajax no braço, muitos exemplos, muito código (HTML, CSS, JavaScript, PHP, XML, JSON)

SOA na Prática Ricardo Limonta

Resumo: Perguntas a fazer ao elaborar um projeto arquitetural

Objetos Distribuídos - Programação Distribuída Orientado a Objetos. Luiz Affonso Guedes

Manual de Integração. Tecnologia: WebServices SOAP XML. Área: CDC. Produto: CDC Pessoa Física NFE (RFB) Versão: 1.0. Autor: Angelo Bestetti Junior

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Aula 03 - Projeto Java Web

CONCEITOS INICIAIS. Agenda A diferença entre páginas Web, Home Page e apresentação Web;

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

COMPARANDO APLICAÇÃO WEB SERVICE REST E SOAP

MADALENA PEREIRA DA SILVA SLA Sociedade Lageana de Educação DCET Departamento de Ciências Exatas e Tecnológica

Um pouco do Java. Prof. Eduardo

Sistemas Distribuídos na WEB (Plataformas para Aplicações Distribuídas)

Enterprise Java Beans

J820. Testes de interface Web com. HttpUnit. argonavis.com.br. Helder da Rocha

Arquiteturas de Aplicações Web. Leonardo Gresta Paulino Murta

SISTEMAS DISTRIBUIDOS

Sistemas Distribuídos

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

SOAP. Web Services & SOAP. Tecnologias de Middleware 2004/2005. Simple Object Access Protocol. Simple Object Access Protocol SOAP

JXTA. Alessandro Vasconcelos Ferreira de Lima.

Invocação de Métodos Remotos

Informática UFRGS. Programação com Objetos Distribuídos (C. Geyer) C# Remote V0 1

Introdução ao PHP. Prof. Késsia Marchi

Java. Marcio de Carvalho Victorino

Java 2 Standard Edition. Fundamentos de. Objetos Remotos. Helder da Rocha

Sistemas Distribuídos Capítulos 3 e 4 - Aula 4

Service Oriented Architecture SOA

Curso de Aprendizado Industrial Desenvolvedor WEB

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

SCE-557. Técnicas de Programação para WEB. Rodrigo Fernandes de Mello

WSDL e UDDI. Pedro Miguel Martins Nunes WSDL. WSDL Exemplo prático Resumo UDDI. Serviço UDDI Estruturas de dados UDDI e WSDL API Resumo

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

4. Qual seria o impacto da escolha de uma chave que possua letras repetidas em uma cifra de transposição?

Web Services. Tópicos. Motivação. Tecnologias Web Service. Passo a passo Business Web Conclusão. Integração de aplicações SOAP, WSDL, UDDI, WSFL

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

Wireshark. Captura de Protocolos da camada de aplicação. Maicon de Vargas Pereira

Considerações no Projeto de Sistemas Cliente/Servidor

Introdução ao Modelos de Duas Camadas Cliente Servidor

Associação Carioca de Ensino Superior Centro Universitário Carioca

Entrar neste site/arquivo e estudar esse aplicativo Prof. Ricardo César de Carvalho

4 O Workflow e a Máquina de Regras

INE Sistemas Distribuídos

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

IplanRio DOP - Diretoria de Operações GIT - Gerência de Infraestrutura Tecnológica Gerente da GIT

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. Servlets A,L,F,M

Curso de Aprendizado Industrial Desenvolvedor WEB

Introdução. à Linguagem JAVA. Prof. Dr. Jesus, Edison O. Instituto de Matemática e Computação. Laboratório de Visão Computacional

Web Services e SOAP. Alexandre Zua CaldeiraTecnologias de Middleware 2006/ Faculdade de Ciências da Universidade de Lisboa

Desenvolvimento Cliente-Servidor 1

Java Enterprise Edition. by Antonio Rodrigues Carvalho Neto

Sistemas Distribuídos Arquiteturas Middlewares

Arquiteturas SOA, WOA, e REST

Estudo comparativo das API s JAX-RPC e JAXM na construção de Web Services

Desenvolvimento WEB II. Professora: Kelly de Paula Cunha

2 Conceitos relativos a Web services e sua composição

3 SCS: Sistema de Componentes de Software

Transcrição:

Conceitos, SOAP, WSDL, UDDI, Exemplos Programação com Objetos Distribuídos (C. Geyer) Web Services 1

Autores Local Sérgio Mergen Cláudio Geyer Emanuel Müller Ramos Instituto de Informática UFRGS Versão V20 Maio 2010 cursos: Sistemas Operacionais II Programação com Objetos Distribuídos Programação com Objetos Distribuídos (C. Geyer) Web Services 2

Súmula conceitos gerais sobre Web Services conceitos de SOAP Introdução à biblioteca Axis WS no J2EE conceitos de WSDL conceitos de UDDI Observações Ênfase em WS para Java Programação com Objetos Distribuídos (C. Geyer) Web Services 3

Bibliografia Coulouris, G. Et al. Sistemas Distribuídos Conceitos e Projeto. Bookman, 2007. Cap. 19 CERAMI Ethan. Web Services Essentials - Distributed Applications with XML-RPC, SOAP, UDDI & WSDL. O'Reilly, 2002. NEWCOMER Eric. Understanding Web Services: XML, WSDL, SOAP, and UDDI. David Chappell Series Editor. 2002. Wutka, M. Special Edition Using Java 2 Enterprise Edition. QUE, 2001. capítulo 25 Tutoriais da Sun para J2EE e do NetBeans Capítulos sobre WS: JAX-WS, SOAP,... Programação com Objetos Distribuídos (C. Geyer) Web Services 4

Links Atividades do W3 em Web Services http://www.w3.org/2002/ws/ XML Protocol Working Group http://www.w3.org/2000/xp/group/ Projetos WS do grupo Apache http://ws.apache.org/ Implementações de Java SOAP Axis 2 Axis 1 http://ws.apache.org/axis2/ http://ws.apache.org/axis/ Programação com Objetos Distribuídos (C. Geyer) Web Services 5

Links Links SOAP do W3 SOAP Message Transmission Optimization Mechanism http://www.w3.org/tr/soap12-mtom SOAP Resource Representation Header http://www.w3.org/tr/soap12-rep SOAP Version 1.2 Part 0: Primer http://www.w3.org/tr/soap12-part0/ SOAP Version 1.2 Part 1: Messaging Framework http://www.w3.org/tr/soap12-part1/ Programação com Objetos Distribuídos (C. Geyer) Web Services 6

Links Links SOAP do W3 SOAP Version 1.2 Part 2: Adjuncts http://www.w3.org/tr/soap12-part2/ SOAP Version 1.2 Specification Assertions and Test Collection http://www.w3.org/tr/soap12-testcollection Programação com Objetos Distribuídos (C. Geyer) Web Services 7

Links Links WSDL do W3 Semantic Annotations for WSDL and XML Schema http://www.w3.org/tr/sawsdl Web Services Description Language (WSDL) Version 2.0 Part 0: Primer http://www.w3.org/tr/wsdl20-primer Web Services Description Language (WSDL) Version 2.0 Part 1: Core Language http://www.w3.org/tr/wsdl20 Web Services Description Language (WSDL) Version 2.0 Part 2: Adjuncts as Recommendation. http://www.w3.org/tr/wsdl20-adjuncts Programação com Objetos Distribuídos (C. Geyer) Web Services 8

Súmula Conceitos gerais sobre Web Services motivação para o uso de Web Services definição arquitetura componentes pilha de protocolos Programação com Objetos Distribuídos (C. Geyer) Web Services 9

Súmula Conceitos de SOAP Introdução ao SOAP Vantagens do SOAP Desvantagens do SOAP Estrutura de uma mensagem SOAP Exemplo de WS/SOAP com Apache Axis Comparação entre RMI e Apache SOAP Programação com Objetos Distribuídos (C. Geyer) Web Services 10

Súmula WS no J2EE Características Tipos JAX-WS RESTFul WSDL UDDI Programação com Objetos Distribuídos (C. Geyer) Web Services 11

A Internet Tradicional Ótima forma para troca de informações Independência de plataforma Abstração do hardware, software e sistema operacional utilizados Problemas: WWW era centrada no ser humano pessoas acessam, modificam, inserem e removem documentos remotos Aplicações que desejavam trocar informações pela Web necessitavam utilizar soluções ad-hoc Necessidade de estender a Web para suportar esse novo tipo de interação Web Services: web para sistemas coorportaivos Programação com Objetos Distribuídos (C. Geyer) Web Services 12

Web Services Objetivos Permitir uma comunicação fácil entre diferentes aplicações utilizando a estrutura já existente da Web Determinam um conjunto de mecanismos (padrões, especificões, etc.) que permitam estender a Internet para aceitar a troca de informações entre aplicações Adicionalmente: permitir que aplicações descubram automaticamente qual serviço elas desejam utilizar Chamada automática de serviços Sem nenhuma intervenção do ser humano Ainda não é totalmente realidade Obs: CORBA tinha alguns objetivos similares Programação com Objetos Distribuídos (C. Geyer) Web Services 13

Web Services Conceito Um Web Service é uma aplicação que: Está disponível através da Internet Utiliza padrões baseados em XML para descrever as mensagens enviadas e recebidas, bem como seus dados É independente de hardware, sistema operacional e linguagem de programação Pode ser descrita utilizando XML (WSDL) Pode ser encontrada facilmente (usando UDDI por exemplo) OBS.: Web Services baseados na arquitetura REST (REST WS) não seguem exatamente esses conceitos REST WS são mais simples Programação com Objetos Distribuídos (C. Geyer) Web Services 14

Exemplo Básico - Linguagens Java e C - SOs Windows e Linux - Mensagem XML - requisição e resposta Programação com Objetos Distribuídos (C. Geyer) Web Services 15

Arquitetura Pode ser descrita de duas formas Pelos componentes que a compõem Pela pilha de protocolos utilizada Programação com Objetos Distribuídos (C. Geyer) Web Services 16

Componentes Programação com Objetos Distribuídos (C. Geyer) Web Services 17

Pilha de Protocolos Conjunto mais utilizado: HTTP + SOAP + WSDL + UDDI Programação com Objetos Distribuídos (C. Geyer) Web Services 18

Nível de transporte Responsável por transmitir os dados entre as aplicações Pode utilizar protocolos já disponíveis pela internet (HTTP, SMTP, FTP, etc.) Nível de mensagem Define o formato das mensagens enviadas entre as aplicações Obs.: Formato XML puro não garante interoperabilidade entre aplicações Programação com Objetos Distribuídos (C. Geyer) Web Services 19

Nível de descrição Representa a interface de um Web Service aos clientes Nome das operações disponíveis Parâmetros Protocolos do nível de transporte utilizados Etc Nível de descoberta Registros onde é possível publicar um Web Service Programação com Objetos Distribuídos (C. Geyer) Web Services 20

Súmula da parte SOAP Conceitos de SOAP Introdução ao SOAP Vantagens do SOAP Desvantagens do SOAP Estrutura de uma mensagem SOAP Exemplo de WS/SOAP com Apache Comparação entre RMI e Apache SOAP Programação com Objetos Distribuídos (C. Geyer) Web Services 21

O que é SOAP? Protocolo para troca de mensagens distribuídas Pode ser usado como o nível de mensagem da arquitetura WS Concorrente de IIOP (Corba), JRMP (Java RMI), XML-RPC, REST- WS e outros Proposto a IETF e ao W3 W3: World Wide Web Consortium IETF: organização que publica padrões para Internet como TCP, FTP, HTTP, Especificação inicial desenvolvida por Microsoft, IBM/Lotus, Don Box (guru COM), Dave Winer (criador de um XML-RPC) Programação com Objetos Distribuídos (C. Geyer) Web Services 22

Características do SOAP Baseado em tecnologias já existentes HTTP, SMTP como nível de transporte XML Utiliza mensagens no formato XML Unidirecional Sem estado Não define um modelo de objetos Não define um modelo para troca de mensagens Não está necessariamente ligado a Web Services Programação com Objetos Distribuídos (C. Geyer) Web Services 23

Características do SOAP Quando usado em chamada de WS Aplica modelo requisição resposta (cliente/servidor) com 2 mensagens SOAP Chamada pode ser: Síncrona (normal em RPC) Assíncrona Assíncrona com resposta no futuro Programação com Objetos Distribuídos (C. Geyer) Web Services 24

Vantagens do SOAP Firewall Friendly uso de protocolos Web como HTTP Infraestrutura já conhecida Amplo suporte a XML Suportado por grandes organizações Variedade de bibliotecas (livres e pagas) para sua utilzação Programação com Objetos Distribuídos (C. Geyer) Web Services 25

Vantagens SOAP Independe de linguagem (se utilizado seguindo corretamente os padrões) RMI: só Java observação: RMI-IIOP permite Java x linguagens com IIOP IIOP: exige biblioteca IIOP para a linguagem SOAP: somente um parser XML mais biblioteca para envio de requisições HTTP Independe de plataforma permitiria ponte entre mundos Linux e Microsoft obs: RMI e CORBA oferecem essa ponte, mas não com o mesmo nível de abstração Programação com Objetos Distribuídos (C. Geyer) Web Services 26

Desvantagens SOAP Brechas na segurança WS-Security tenta resolver esses problemas http://www.oasis-open.org/committees/tc_home.php? wg_abbrev=wss Problemas de performance menos rápido que atuais competidores tipo RPC como RMI (Java), IIOP (CORBA), DCOM e Remote (Microsoft) mais lento mesmo comparado a competidores que são baseados em XML (XML-RPC, REST-WS) Muito complexo: overhead aplicações geralmente não necessitam de tantas funcionalidades para realizar seus objetivos REST-WS é mais simples -> mais eficiente (?) Programação com Objetos Distribuídos (C. Geyer) Web Services 27

Desvantagens SOAP Não oferece serviços avançados A revisar conforme novos padrões Web Services Como CORBA, J2EE, CORBA possuía mais de 20 serviços como persistência, transações, real-time, aluguel de objetos,... Não possui noção de objeto com estado como em RMI Não suporta passagem por referência Obs.: possível simular esses comportamentos de OO Programação com Objetos Distribuídos (C. Geyer) Web Services 28

Versões SOAP 1.2 http://www.w3.org/tr/2007/rec-soap12-part0-20070427/ SOAP 1.1 http://www.w3.org/tr/2000/note-soap-20000508/ Programação com Objetos Distribuídos (C. Geyer) Web Services 29

Especificação (estrutura geral dos documentos) Parte 1: define o envelope, um framework geral para definir o conteúdo de uma mensagem Também define os protocolos de ligação e o mapeamento para um protocolo inferior Parte 2: Define um modelo de dados para o SOAP Representação de recurso Especifica um bloco de cabeçalho, no qual há a representação de um recurso Web Outros documentos Programação com Objetos Distribuídos (C. Geyer) Web Services 30

Envelope: define o começo da mensagem SOAP Header: possui informações específicas da aplicação Dados de autenticação Número de transação Etc. opcional Body: contém a mensagem propriamente dita Contém dados que devem ser transmitidos de forma estruturada Possiveis excessões durante o tratamento da mensagem Programação com Objetos Distribuídos (C. Geyer) Web Services 31

POST /Temperature HTTP/1.1X Host: www.weather.com Content-Type: text/xml Content-Length: <whatever> SOAPMethodName: <some-uri>#currenttemp Http Header Soap Extensions <SOAP:Envelope xmlns:soap="urn:schemas-xmlsoaporg:soap.v1"> <SOAP:Body> </SOAP:BODY> <SOAP:Envelope> <m:currenttemp xmlns:m="some-uri"> <zip_code>37919</zip_code> <m:currenttemp> Sem header Xml Payload argumento Programação com Objetos Distribuídos (C. Geyer) Web Services 32

HTTP/1.1 200 OK Content-Type: text/xml Content-Length: <whatever> Http Header Com header <SOAP:Envelope xmlns:soap="urn:schemas-xmlsoap-org:soap.v1"> <SOAP:Header> <t:transaction xmlns:t="some-uri"> 5 </t:transaction> </SOAP:Header> <SOAP:Body> Xml Payload <m:currenttempresponse xmlns:m="some-uri"> <return>42</return> </m:currenttempresponse> </SOAP:Body> </SOAP:Envelope> resposta Programação com Objetos Distribuídos (C. Geyer) Web Services 33

Estrutura XML das mensagens SOAP inicialmente complexa como exemplos anteriores eliminando as informações de namespace como <SOAP:Envelope xmlns:soap="urn:schemas-xmlsoaporg:soap.v1"> o resto é simples e legível (?) Ao menos mais do que formato Java/RMI, Corba/IIOP,... Programação com Objetos Distribuídos (C. Geyer) Web Services 34

Implementação Apache Axis para Java baseada em implementação anterior Apache SOAP conjunto de bibliotecas clientes bibliotecas para o servidor servlet para processamento das chamadas Classe servidora ferramentas auxiliares para utilização de Web Services Programação com Objetos Distribuídos (C. Geyer) Web Services 35

Implementação Apache programa cliente usa as suas bibliotecas para empacotar a chamada (request) Diferentes níveis de abstração dependendo da abordagem utilizada servidor decodifica a chamada chama o método do objeto servidor e empacota o resultado para o cliente obs: tudo isto de forma transparente para o programador Programação com Objetos Distribuídos (C. Geyer) Web Services 36

Exemplo Hello especificação cliente realiza uma chamada SOAP a uma operação de um servidor Hello servidor Interface: 2 (duas) operações responde à chamada de saudação recebe nova saudação Programação com Objetos Distribuídos (C. Geyer) Web Services 37

Exemplo Hello codificação do cliente duas aproximações criar chamada manualmente parte mais complexa uso de vários métodos do pacote SOAP criação da chamada inclusão de cada argumento da chamada utilizar o arquivo WSDL (se disponível) WSDL: descrição (opcional) de um WS em xml aproximação estática (geração de Stubs) ou dinâmica chamada similar à de um método local Programação com Objetos Distribuídos (C. Geyer) Web Services 38

Exemplo Hello código do cliente codificação manual trabalhosa import java.io.*; import java.net.*; import java.util.*; import org.w3c.dom.*; import org.apache.soap.*; import org.apache.soap.encoding.*; import org.apache.soap.encoding.soapenc.*; import org.apache.soap.rpc.*; import org.apache.soap.util.xml.*; Programação com Objetos Distribuídos (C. Geyer) Web Services 39

public class GetHello { public static void main(string[] args) throws Exception { // The URL for the SOAP servlet (servidor WS) URL url = new URL("http://localhost/soap/servlet/ rpcrouter"); // Create a new call Call call = new Call(); // Tell SOAP which object you want (qual serviço) call.settargetobjecturi("urn:helloapp"); // Tell SOAP which method to invoke call.setmethodname("gethello"); Programação com Objetos Distribuídos (C. Geyer) Web Services 40

// Tell SOAP to use the regular SOAP encoding style call.setencodingstyleuri (Constants.NS_URI_SOAP_ENC); // Create a vector to hold the method parameters Vector params = new Vector(); // Add a string parameter called extra1 with a value of "Hello info // Specify null for the encoding style params.addelement(new Parameter("extra1", String.class, "Hello info", null)); Programação com Objetos Distribuídos (C. Geyer) Web Services 41

// Add an int parameter called extra2 with a value of 123 // Specify null for the encoding style params.addelement(new Parameter("extra2", Integer.class, new Integer(123), null)); // Store the parameters in the request call.setparams(params); // Prepara uma variável para a resposta Response resp = null; Programação com Objetos Distribuídos (C. Geyer) Web Services 42

// Invoke the call method try { resp = call.invoke(url, ""); } catch (SOAPException e) { e.printstacktrace(); System.exit(0); } Programação com Objetos Distribuídos (C. Geyer) Web Services 43

// See if the response contains an error if (!resp.generatedfault()) { // If not, get the return value Parameter ret = resp.getreturnvalue(); // Expect it to be a string String value = (String) ret.getvalue(); } System.out.println(value); Programação com Objetos Distribuídos (C. Geyer) Web Services 44

else { Fault fault = resp.getfault(); System.err.println("Generated fault: "); System.out.println (" Fault Code = " + fault.getfaultcode()); System.out.println (" Fault String = " + fault.getfaultstring()); } } } Programação com Objetos Distribuídos (C. Geyer) Web Services 45

Código do cliente geração de Stubs Outra alternativa para codificação Axis gera automaticamente classes para acessar o Web Service baseados em SOAP/WSDL A partir dessas classes, o desenvolvedor necessita apenas instanciá-las para executar a operação desejada Hello WSDL Hello Service.java Hello Port.java Arquivo WSDL Axis WSDL2Java Hello Service Locator.java Hello BindingStub.java Stubs Gerados Programação com Objetos Distribuídos (C. Geyer) Web Services 46

Código do cliente geração de Stubs import HelloServiceLocator; import HelloService; import HelloPort; import HelloBindingStub; public class GetHello { public static void main(string[] args) throws Exception { // localize the service; uso de métodos das classes geradas HelloService locator = new HelloServiceLocator(); HelloPort port = locator.gethelloport(); } } //execute the remote method String result = port.gethello( Hello Info, new Integer(123)); System.out.println(result); Programação com Objetos Distribuídos (C. Geyer) Web Services 47

Exemplo Hello código do servidor // standard Java public class SoapHello { protected String hellostring; public SoapHello() { hellostring = "Hello!"; } Programação com Objetos Distribuídos (C. Geyer) Web Services 48

public String gethello(string extra1, int extra2) { return hellostring+" "+extra1+" "+extra2; } } public void sethello(string newhello) { hellostring = newhello; } Programação com Objetos Distribuídos (C. Geyer) Web Services 49

Publicando o servidor utilizando Apache Axis Duas formas principais Salvar código do servidor na pasta raiz do Axis com a extensão.jws instalação instantânea Extremamente simples; Necessita do código fonte (e não o binário); Web service é gerado no instante em que o cliente o acessa: baixo desempenho; Utilizar um arquivo de configuração WSDD (Web Service Deployment Descriptor) Mais complicado; Resolve os problemas da alternativa anterior; Programação com Objetos Distribuídos (C. Geyer) Web Services 50

Programação com Objetos Distribuídos (C. Geyer) Web Services 51

Protocolo de transporte SOAP qualquer um (preferência para HTTP) XML-RPC somente HTTP Tipos extensível utilizando XML Schema restritos a um conjunto básico Ordem de parâmetros indiferente importante Complexidade complicado simples SOAP tem várias vantagens; mas é mais complexo Programação com Objetos Distribuídos (C. Geyer) Web Services 52

Pacote da Sun para Web Services Obs.: em 2006 nome: JWSDP - Java Web Services Developer Pack 1.2 link http://java.sun.com/webservices/index.jsp agora: http://java.sun.com/webservices/downloads/ previous/webservicespack.jsp anteriormente: http://java.sun.com/webservices/downloads/ webservicespack.html em transição para projeto GlassFish: https://glassfish.dev.java.net/ Programação com Objetos Distribuídos (C. Geyer) Web Services 53

Pacote da Sun para Web Services conteúdo (obs. Versão 1.2): JavaServer Faces (JSF) v1.0 EA4 XML and Web Services Security (xws-security) v1.0 EA Java Architecture for XML Binding (JAXB) v1.0.1 Java API for XML Processing (JAXP) v1.2.3 Java API for XML Registries (JAXR) v1.0.4 Java API for XML-based RPC (JAX-RPC) v1.1 EA SOAP with Attachments API for Java (SAAJ) v1.2 EA JavaServer Pages Standard Tag Library (JSTL) v1.1 EA Java WSDP Registry Server v1.0_05 Ant Build Tool 1.5.1 Apache Tomcat v5 development container Programação com Objetos Distribuídos (C. Geyer) Web Services 54

Pacote Sun Web Services pacote testado com plataformas Sun Solaris Operating Environment 8 and 9 Windows 2000 Professional Edition Windows XP Professional Edition RedHat Linux 8.0 ambiente Java Java 2 SDK, Standard Edition version 1.4.1_02 plataforma de desenvolvimento e execução Sun recomenda Sun ONE Studio 4 and Sun ONE Application Server 7. Programação com Objetos Distribuídos (C. Geyer) Web Services 55

WS no J2EE WS no J2EE Tecnologias incluídas JAX-WS Java API para XML Web Services JAX-RS Conceito WS Java API para RESTFul Web Services São aplicações cliente / servidor Comunicando sobre o protocolo HTTP Programação com Objetos Distribuídos (C. Geyer) Web Services 56

WS no J2EE WS no J2EE Características Interoperabilidade via padrões Portabilidade sobre diversas plataformas e frameworks Extensíveis Descrições processáveis graças a XML Combináveis de forma leve para obter operações complexas Tipos Big WS RESTFul WS Programação com Objetos Distribuídos (C. Geyer) Web Services 57

WS no J2EE WS no J2EE Big WS Uso de XML e SOAP Descrição dos serviços em WSDL (linguagem em XML) opcional Adotado por diversas ferramentas como NetBeans IDE Programação com Objetos Distribuídos (C. Geyer) Web Services 58

WS no J2EE WS no J2EE Big WS Elementos principais Contrato formal Descreve a interface Mensagens, operações, localização do WS, ligações Arquitetura Tratar diversos requisitos complexos não funcionais Transações, segurança, endereçamento, confiança, cordenação,... Processamento e chamada assíncronos Programação com Objetos Distribuídos (C. Geyer) Web Services 59

WS no J2EE WS no J2EE RESTFul Representational State Transfer Apropriado para cenários básicos e ad doc Melhor integração com HTTP que serviços SOAP Não exigem mensagens XML nem WSDL Uso do projeto Jersey Segue padrão: JSR 311 JAX-RS Permite anotações Mais funcionalidades extra JSR 311 Mais leves Exigem poucas ferramentas Também integrado no NetBeans IDE Programação com Objetos Distribuídos (C. Geyer) Web Services 60

WS no J2EE WS no J2EE RESTFul Usos reais Muitos sites de blogs Download de arquivos XMl em formato RSS com listas de links Twitter Amazon Simple Storage Service (S3) Programação com Objetos Distribuídos (C. Geyer) Web Services 61

WS no J2EE WS no J2EE RESTFul Apropriado em/se WS sem estado Teste: interação sobrevive a queda / colocar-no-ar do servidor (restart) Infra-estrutura de cache pode ser mais simples Quando dados de retorno são estáticos Técnicas de cache do servidor web mais simples Cuidado: em geral limitado a método GET do HTTP Programação com Objetos Distribuídos (C. Geyer) Web Services 62

WS no J2EE WS no J2EE RESTFul Apropriado em/se Contrato liente (consumidor) e serviço (produtor) em formato ad hoc Sobre contexto e conteúdo Muitos serviços distribuem toolkits com Descrição de interfaces em linguagens populares Quando banda é limitada Por exemplo para PDAs e smartphones SOAP é pesado Programação com Objetos Distribuídos (C. Geyer) Web Services 63

WS no J2EE WS no J2EE RESTFul Apropriado em/se Agregação de serviços é simples Via uso de tecnologias como JAX-RS AJAX: Asynchronous JavaScript com XML Toolkits como DWR (Direct Web Remoting) Serviços já existentes podem ser expostos via páginas HTML sem muito esforço Desenvolvimento mais produtivo Não é uma nova tecnologia Programação com Objetos Distribuídos (C. Geyer) Web Services 64

WS no J2EE WS no J2EE Big WS x RESTFul Usar JAX-WS quando Aplicação necessita de vários requisitos de QoS Usualmente em aplicações coorporativas Mais fácil o uso de padrões de segurança e confiabilidade Melhor interoperabilidade com outros WS Programação com Objetos Distribuídos (C. Geyer) Web Services 65

WS no J2EE WS no J2EE Big WS x RESTFul Usar JAX-RS quando Desenvolvimento mais simples Acoplamento reduzido Mais fácil o consumo (clientes) Facilita manutenção (extensão da app) e escalabilidade Cliente pode consumir parte do serviço e combiná-lo como outros serviços (mash-up) Artigo Pautasso, C. et al. RESTFul Web Services vs. Big Web Services: Making the Right Architectural Decision. WWW 08, pp. 805-814 Programação com Objetos Distribuídos (C. Geyer) Web Services 66

WS no J2EE WS no J2EE Desenvolvendo com JAX-WS Características Complexidade do SOAP escondida via APIs do JAX-WS Lado servidor Operações definidas por métodos em interface Java Implementação via classe(s) que implementam os métodos da interface Lado cliente Cria um proxy Objeto local que representa o serviço Chama métodos do proxy Não é necessário gerar ou examinar mensagens SOAP Programação com Objetos Distribuídos (C. Geyer) Web Services 67

WS no J2EE WS no J2EE Desenvolvendo com JAX-WS Características Portabilidade de Java Independência de plataforma Interoperabilidade entre plataformas Cliente JAX-WS pode acessar WS não Java Cliente não Java pode acessar serviço JAX-WS Óbvio... (?) Devido JAX-WS seguir padrões do W3C para WS Programação com Objetos Distribuídos (C. Geyer) Web Services 68

WS no J2EE WS no J2EE Desenvolvendo com JAX-WS Porta do servidor Diversos arquivos referenciam a porta do servidor Padrão é 8080 Pode ser alterada Programação com Objetos Distribuídos (C. Geyer) Web Services 69

WS no J2EE WS no J2EE Desenvolvendo com JAX-WS Exemplo Hello Serviço Classe Java anotada com @WebService Classe passa a ser um SEI SEI Service Endpoint Interface ou Service Endpoint Implementation A interface não é obrigatória Se interface Indicada por argumento endpointinterface na anotação @WebService Programação com Objetos Distribuídos (C. Geyer) Web Services 70

WS no J2EE WS no J2EE Desenvolvendo com JAX-WS Exemplo Hello Serviço Ferramenta (wsgen) gera todos os artefatos Em uso Via o Enterprise Server (container) Passos Codificação da classe Compilação da classe Criação dos artefatos (wsgen) Empacotamento em arquivo WAR Instalação (deploy) do WAR no servidor Programação com Objetos Distribuídos (C. Geyer) Web Services 71

WS no J2EE WS no J2EE Desenvolvendo com JAX-WS Exemplo Hello Servidor Requisitos Anotar classe ou interface (se houver) Métodos da classe devem ser Públicos Não static nem final Métodos do WS Anotados com @WebMethod Programação com Objetos Distribuídos (C. Geyer) Web Services 72

WS no J2EE WS no J2EE Desenvolvendo com JAX-WS Exemplo Hello Servidor Código package helloservice.endpoint; import javax.jws.webservice; @WebService public class Hello { private String message = new String("Hello, "); public void Hello() {} } @WebMethod public String sayhello(string name) { return message + name + "."; } Programação com Objetos Distribuídos (C. Geyer) Web Services 73

WS no J2EE WS no J2EE Desenvolvendo com JAX-WS Exemplo Hello Servidor Teste sem cliente Após WS instalado (no container do J2EE) Entrar com URL (local) do serviço mais função de teste?tester Na página de teste (resposta) entrar com argumentos (se for o caso) e clicar no método Será mostrada a resposta do método Programação com Objetos Distribuídos (C. Geyer) Web Services 74

WS no J2EE WS no J2EE Desenvolvendo com JAX-WS Exemplo Hello / Cliente Instanciar a classe gerada helloservice.endpoint.helloservice Ela representa o serviço na URI indicada no arquivo WSDL instalado HelloService service = new HelloService(); Recuperar um proxy ao serviço Também conhecido como port Chamando o método gethelloport do serviço Hello port = service.gethelloport(); Chamar o método de negócio via proxy String response = port.sayhello(name); Programação com Objetos Distribuídos (C. Geyer) Web Services 75

WS no J2EE WS no J2EE Desenvolvendo com JAX-WS Exemplo Hello / Cliente Código completo O exemplo completo é um pouco mais complexo Mas o adicional não é exigido pelo JAX-WS Puro Java Programação com Objetos Distribuídos (C. Geyer) Web Services 76

J2EE / RESTFul conceitos Programação com Objetos Distribuídos (C. Geyer) Web Services 77

RESTFul RESTful WS Serviços desenvolvidos para funcionar melhor na web Melhor? Escalabilidade REST Desempenho Capacidade de modificação REpresentational State Transfer Recurso Combinação de dados e funcionalidades Programação com Objetos Distribuídos (C. Geyer) Web Services 78

RESTFul RESTful WS Identificação por URI Endereço global Protocolo de comunicação sem estado Por exemplo, HTTP Uso de interface uniforme Programação com Objetos Distribuídos (C. Geyer) Web Services 79

J2EE / RESTful RESTful Objetivos Aplicações RESTful devem ser Simples Leves Alto desempenho Interface (uniforme) 4 operações PUT: cria um novo recurso DELETE: recurso (criado) é excluído GET: recupera o estado de um recurso POST: atualiza o estado de um recurso Programação com Objetos Distribuídos (C. Geyer) Web Services 80

J2EE / RESTful RESTful Mensagens auto-descritas Recursos são independentes da sua representação Recursos podem ser acessados de diferentes formas como HTML, XML, texto, PDF, JPEG, JSON e outras Metadados sobre o recurso usados para Controlar cache Detectar erros de transmissão Negociar forma de representação Realizar autenticação Controlar acesso Programação com Objetos Distribuídos (C. Geyer) Web Services 81

J2EE / RESTful RESTful Interações com estado Cada interação com um recurso é sem estado Mensagens são auto-contidas Interações com estado via conceito de transferência explícita de estado Via técnicas como Reescrita de URI Cookies Campos escondidos de form Técnicas não aprofundadas no tutorial Java EE Programação com Objetos Distribuídos (C. Geyer) Web Services 82

J2EE / RESTful RESTful Jersey implementação Segue padrão JSR 311: JAX-RS Suporte a anotações Documentação em: https://jsr311.dev.java.net/nonav/javadoc/index.html A documentação teria que ser instalada (?) no Enterprise server v3 Programação com Objetos Distribuídos (C. Geyer) Web Services 83

J2EE/RESTful RESTful Classes de recurso raiz Anotadas com @Path Ou ao menos um método anotado com @Path ou com designador de método de requisição @GET, @PUT, @POST ou @DELETE Métodos de recursos Métodos com o designador de requisição Programação com Objetos Distribuídos (C. Geyer) Web Services 84

J2EE/RESTful RESTFul JAX-RS API Java API para facilitar o desenvolvimento de aplicações com RSET Uso de anotações, específicas para HTTP Anotações são resolvidas durante execução (runtime) Uso de reflexão para gerar classes auxiliares e outros artefatos para o recurso Classes e artefatos agrupados em arquivo WAR (web) WAR deve ser instalado em container J2EE ou web Programação com Objetos Distribuídos (C. Geyer) Web Services 85

J2EE/RESTful RESTful Principais anotações @Path Caminho relativo de URI Indica onde a classe Java será instalada Pode ser adicionada com variáveis para definir modelos (templates) Exemplos /helloworld Com controle de usuário/senha /helloworld{username} Programação com Objetos Distribuídos (C. Geyer) Web Services 86

RESTful J2EE/RESTful Principais anotações @GET Métodos @GET devem processar requisições HTTP GET @POST Métodos @POST devem processar requisições HTTP POST @PUT Métodos @PUT... @DELETE Métodos @DELETE... @HEAD Métodos @HEAD... Programação com Objetos Distribuídos (C. Geyer) Web Services 87

RESTful J2EE/RESTful Principais anotações @PathParam Tipo de parâmetro que pode ser extraído para uso na classe (em métodos por exemplo) Extraído da URI requisitada Nomes de parâmetros definidos na anotação @Path @QueryParam Tipo de parâmetro que pode ser extraído para uso na classe Extraído da URI requisitada Programação com Objetos Distribuídos (C. Geyer) Web Services 88