Web Services Web Services em Java JAX

Propaganda
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
Download