web services em java web services -...
TRANSCRIPT
1
Instrutor : Adilson Vahldick
Web ServicesPó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 Vahldick
Criação de WS no NetBeans 5.5
• [Arquivo] [Novo Projeto]
12
3
Adilson Vahldick
Criação de WS no NetBeans 5.5
2
1
34
2
Adilson 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 Vahldick
JAX-WS
@WebService()public class CalculoBasico {
}
Adilson Vahldick
Criação de WS no NetBeans 5.5
1
2
Adilson Vahldick
Criação de WS no NetBeans 5.5
1
4
2
3 5
6
Adilson Vahldick
JAX-WS
@WebService()public class CalculoBasico {
@WebMethodpublic int somar(
@WebParam(name = "x") int x,@WebParam(name = "y") int y) {
return x + y;}
}
3
Adilson Vahldick
Iniciar o Servidor
2
1
3
Adilson Vahldick
Implantar a Aplicação
1
2
Adilson Vahldick
Testes
• Aplicação no ar– http://localhost:8084/AplicacaoWeb
• Web Service– http://localhost:8084/AplicacaoWeb/CalculoBasico
Adilson Vahldick
Testes no NetTool
• URL: http://localhost:8084/AplicacaoWeb/CalculoBasico• [Add header]: Content-Type ; text/xml
<soap:Envelopexmlns: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 Vahldick
Criar um cliente de WS
• [Arquivo] [Novo Projeto]
1 2
3
Adilson Vahldick
Criar um cliente de WS
1
2
4
Adilson Vahldick
Criar um cliente de WS
• [Arquivo] [Novo Arquivo]
1
2
3
Adilson Vahldick
Criar um cliente de WS
1 2
4
3
Adilson Vahldick
Criar um cliente de WS
Duplo clique
Adilson Vahldick
Criar um cliente de WSpackage 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));
}
}
Adilson Vahldick
Executar classe
1
2
Adilson Vahldick
Especificar endereço de acessopackage 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));
}
}
5
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 retornopackage matematica;
import javax.xml.bind.annotation.*;
@XmlTypepublic 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 {....@WebMethodpublic 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
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]
Adilson Vahldick
Do lado clientepackage 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());
}
}
6
Adilson Vahldick
Vetor como retornopublic class CalculoBasico {
….. @WebMethodpublic 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 retornoimport java.util.*;public class CalculoBasico {
…@WebMethodpublic 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 clienteimport 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@WebMethodpublic int somarObjeto(@WebParam(name = "obj")Resultado r,
@WebParam(name = "x") int x) {return r.getValor() + x;
}
@WebMethodpublic int somarObjetos(@WebParam(name = "obj")List<Resultado> lista) {
int retorno = 0;for (Resultado r:lista) {
retorno += r.getValor();}return retorno;
}
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));