Web Services em Java Web Services • JAX-WS (Java API for XML Web Services): Pós-Graduação em Tecnologias para o Desenvolvimento de Aplicações WEB – Esconde a complexidade em montar um envelope SOAP – Converte os envelopes em RPC – É uma tecnologia disponível a partir do JEE5.0 – Utiliza anotações (uma novidade da versão 5 do Java) Prof. Adilson Vahldick Instrutor : Adilson Vahldick Adilson Vahldick JAX-WS NetBeans 5.5 • Faça o download no endereço abaixo – Com o SDK do Java • http://java.sun.com/javase/downloads/netbeans.html – Sem o SDK do Java • http://www.netbeans.info/downloads/index.php Adilson Vahldick Adilson Vahldick Criação de WS no NetBeans 5.5 Criação de WS no NetBeans 5.5 • [Arquivo] [Novo Projeto] 1 2 1 2 3 4 3 Adilson Vahldick Adilson Vahldick 1 Criação de WS no NetBeans 5.5 Criação de WS no NetBeans 5.5 • [Arquivo] [Novo Arquivo] 1 2 2 1 3 3 Adilson Vahldick Adilson Vahldick JAX-WS Criação de WS no NetBeans 5.5 @WebService() public class CalculoBasico { 1 } 2 Adilson Vahldick Adilson Vahldick JAX-WS Criação de WS no NetBeans 5.5 @WebService() public class CalculoBasico { 1 2 @WebMethod public int somar( @WebParam(name = "x") int x, @WebParam(name = "y") int y) { return x + y; } 4 5 3 6 } Adilson Vahldick Adilson Vahldick 2 Iniciar o Servidor Implantar a Aplicação 1 1 2 3 2 Adilson Vahldick Adilson Vahldick Testes Testes no NetTool • URL: http://localhost:8084/AplicacaoWeb/CalculoBasico • [Add header]: Content-Type ; text/xml • Aplicação no ar – http://localhost:8084/AplicacaoWeb <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://matematica/"> <soap:Body> <tns:somar> <x>10</x> <y>2</y> </tns:somar> </soap:Body> </soap:Envelope> • Web Service – http://localhost:8084/AplicacaoWeb/CalculoBasico Adilson Vahldick Adilson Vahldick Criar um cliente de WS Criar um cliente de WS • [Arquivo] [Novo Projeto] 1 2 1 2 3 Adilson Vahldick Adilson Vahldick 3 Criar um cliente de WS Criar um cliente de WS • [Arquivo] [Novo Arquivo] 1 2 2 1 3 4 3 Adilson Vahldick Adilson Vahldick Criar um cliente de WS Criar um cliente de WS package aplicacaocliente; import cliente.*; public class Main { Duplo clique public static void main(String[] args) throws Exception { CalculoBasicoService cb = new CalculoBasicoService(); CalculoBasico port = cb.getCalculoBasicoPort(); System.out.println(port.somar(10, 2)); } } Adilson Vahldick Adilson Vahldick Executar classe Especificar endereço de acesso package aplicacaocliente; import cliente.*; import java.net.URL; import javax.xml.namespace.QName; 1 public class Main { public static void main(String[] args) throws Exception { 2 CalculoBasicoService cb = new CalculoBasicoService( new URL("http://localhost:8084/AplicacaoWeb/CalculoBasico?wsdl"), new QName("http://matematica/", "CalculoBasicoService")); CalculoBasico port = cb.getCalculoBasicoPort(); System.out.println(port.somar(10, 2)); } } Adilson Vahldick Adilson Vahldick 4 JAXB • Java Architecture for XML Bindings • Utilizado para converter XML em objetos Java e vice-versa • Suporta anotações Objetos como retorno • • • • • Selecione o Projeto [AplicacaoWeb] Selecione [Pacotes de Código-Fonte] Selecione [matematica] Botão direito [Novo][Classe Java] Digite em Nome da Classe: Resultado Adilson Vahldick Adilson Vahldick Objetos como retorno package matematica; import javax.xml.bind.annotation.*; @XmlType public class Resultado { private int valor; private String texto; public Resultado() { } public int getValor() { return valor; } public void setValor(int valor) { this.valor = valor; } public String getTexto() { return this.texto; } public void setTexto(String texto) { this.texto = texto.toUpperCase();} Objetos como retorno public class CalculoBasico { .... @WebMethod public Resultado somarEx( @WebParam(name = "x") int x, @WebParam(name = "y") int y) { Resultado r = new Resultado(); r.setTexto("adilson"); r.setValor(x + y); return r; } } } Adilson Vahldick Adilson Vahldick Objetos como retorno • • • • • Implante novamente a aplicação WEB No projeto [AplicacaoCliente] Selecione [Referências de Serviços Web] Selecione [CalculoBasico] Botão direito [Atualizar Cliente] Do lado cliente package aplicacaocliente; import cliente.*; public class Main { public static void main(String[] args) throws Exception { CalculoBasicoService cb = new CalculoBasicoService(); CalculoBasico port = cb.getCalculoBasicoPort(); System.out.println(port.somar(10, 2)); Resultado r = port.somarEx(10, 5); System.out.println(r.getTexto() + "=" + r.getValor()); } } Adilson Vahldick Adilson Vahldick 5 Vetor como retorno public class CalculoBasico { ….. @WebMethod public Resultado[] somarVarios(@WebParam(name = "x") int x, @WebParam(name = "y") int y, @WebParam(name = "z") int z) { Lista como retorno import java.util.*; public class CalculoBasico { … @WebMethod public List<Resultado> somarVariosEx(@WebParam(name = "x") int x, @WebParam(name = "y") int y, @WebParam(name = "z") int z) { Resultado[] r = new Resultado[3]; List<Resultado> res = new ArrayList<Resultado>(); r[0] = new Resultado(); r[0].setTexto("x + y"); r[0].setValor(x + y); Resultado r0 = new Resultado(); r0.setTexto("x + y"); r0.setValor(x + y); res.add(r0); r[1] = new Resultado(); r[1].setTexto("x + z"); r[1].setValor(x + z); Resultado r1 = new Resultado(); r1.setTexto("x + z"); r1.setValor(x + z); res.add(r1); r[2] = new Resultado(); r[2].setTexto("y + z"); r[2].setValor(y + z); Resultado r2 = new Resultado(); r2.setTexto("y + z"); r2.setValor(y + z); res.add(r2); return r; return res; } } } } Adilson Vahldick Adilson Vahldick Do lado cliente import java.util.*; public class Main { public static void main(String[] args) throws Exception { .... List<Resultado> rs = port.somarVarios(1, 2, 4); for (Resultado rr:rs) { System.out.println(rr.getTexto() + "=" + rr.getValor()); } rs = port.somarVariosEx(1, 2, 4); for (Resultado rr:rs) { System.out.println(rr.getTexto() + "=" + rr.getValor()); } Objetos como Parâmetro @WebMethod public int somarObjeto(@WebParam(name = "obj")Resultado r, @WebParam(name = "x") int x) { return r.getValor() + x; } @WebMethod public int somarObjetos(@WebParam(name = "obj")List<Resultado> lista) { int retorno = 0; for (Resultado r:lista) { retorno += r.getValor(); } return retorno; } } } Adilson Vahldick Adilson Vahldick Do lado cliente Resultado param = new Resultado(); param.setValor(100); System.out.println(port.somarObjeto(param, 10)); List lista = new ArrayList<Resultado>(); lista.add(param); lista.add(param); System.out.println(port.somarObjetos(lista)); Adilson Vahldick 6