Instrutor : Adilson Vahldick
Web Services
Pós-Graduação em
Tecnologias para o Desenvolvimento de
Aplicações WEB
Prof. Adilson Vahldick
Adilson Vahldick
Web Services em Java
• JAX-WS (Java API for XML Web Services):
– 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)
Adilson Vahldick
JAX-WS
Adilson Vahldick
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 VahldickCriação de WS no NetBeans 5.5
• [Arquivo] [Novo Projeto]
1 2 3 Adilson Vahldick
Criação de WS no NetBeans 5.5
2 1 3 4Adilson Vahldick
Criação de WS no NetBeans 5.5
• [Arquivo] [Novo Arquivo]
1 2 3 Adilson Vahldick
Criação de WS no NetBeans 5.5
1 2 3 Adilson VahldickJAX-WS
@WebService()
public class CalculoBasico {
}
Adilson VahldickCriação de WS no NetBeans 5.5
1 2Criação de WS no NetBeans 5.5
1 4 2 3 5 6JAX-WS
@WebService()
public class CalculoBasico {
@WebMethod
public int somar(
@WebParam(name = "x")
int x,
@WebParam(name = "y")
int y) {
return x + y;
}
}
Adilson Vahldick
Iniciar o Servidor
2 1 3 Adilson VahldickImplantar a Aplicação
1 2 Adilson VahldickTestes
• Aplicação no ar
–
http://localhost:8084/AplicacaoWeb
• Web Service
–
http://localhost:8084/AplicacaoWeb/CalculoBasico
Adilson VahldickTestes no NetTool
• URL: http://localhost:8084/AplicacaoWeb/CalculoBasico
• [Add header]: Content-Type ; text/xml
<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>
Adilson VahldickCriar um cliente de WS
• [Arquivo] [Novo Projeto]
1 2 3 Adilson Vahldick
Criar um cliente de WS
1 2Adilson Vahldick
Criar um cliente de WS
• [Arquivo] [Novo Arquivo]
1 2 3 Adilson Vahldick
Criar um cliente de WS
1 2 4 3 Adilson VahldickCriar um cliente de WS
Duplo clique Adilson VahldickCriar um cliente de WS
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)); } }
Executar classe
1 2Especificar endereço de acesso
package aplicacaocliente;import cliente.*; import java.net.URL;
import javax.xml.namespace.QName; public class Main {
public static void main(String[] args) throws Exception { 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
JAXB
• Java Architecture for XML Bindings
• Utilizado para converter XML em objetos
Java e vice-versa
• Suporta anotações
Adilson Vahldick
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
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();} }
Adilson Vahldick
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 VahldickObjetos 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]
Adilson Vahldick
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
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) { Resultado[] r = new Resultado[3];
r[0] = new Resultado();
r[0].setTexto("x + y"); r[0].setValor(x + y); r[1] = new Resultado(); r[1].setTexto("x + z"); r[1].setValor(x + z); r[2] = new Resultado(); r[2].setTexto("y + z"); r[2].setValor(y + z); return r; } } Adilson Vahldick
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) { List<Resultado> res = new ArrayList<Resultado>();
Resultado r0 = new Resultado(); r0.setTexto("x + y"); r0.setValor(x + y); res.add(r0);
Resultado r1 = new Resultado(); r1.setTexto("x + z"); r1.setValor(x + z); res.add(r1);
Resultado r2 = new Resultado(); r2.setTexto("y + z"); r2.setValor(y + z); res.add(r2); return res; } } 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()); } } } Adilson Vahldick
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; }