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> <x>10 2
• 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 somarVariosEx(@WebParam(name = "x") int x, @WebParam(name = "y") int y, @WebParam(name = "z") int z) {
Resultado[] r = new Resultado[3];
List res = new ArrayList();
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 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 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(); lista.add(param); lista.add(param); System.out.println(port.somarObjetos(lista)); Adilson Vahldick
6