WEBCODELOG

free codes, enjoy

Web Services com Apache Axis e Tipos Complexos – Part III

with 9 comments

Criar WebServices já foi um trabalho árduo, mas há alguns anos isto deixou de ser um problema com a ajuda das IDEs. Então vou mostrar como utilizar os recursos do Eclipse que facilitam o desenvolvimento de serviços.

Você já sabe o que é um WebServices e também como é simples publicá-lo utilizando Axis, mas nem todos seus serviços irão trabalhar apenas com tipos de dados primitivos, provavelmente será necessário retornar uma lista de Pessoas, Enderecos, ou qualquer outro tipo de dado complexo.

Nosso cenário é um projeto cujo o objetivo é fornecer consultas de Países e seus respectivos Estados, acessados através de serviços, a definição de Beans, DAOs e qualquer outras classes serão ocultadas, porém, no final deste post você poderá baixar a versão completa do projeto.

Bem como já foi demonstrado aqui precisamos de uma classe para que seja a base do serviço, neste caso será a harpia.region.services.Region, veja:

package harpia.region.services;

/* imports ocultados */

public class Region {
private RegionDAO rdao = new RegionDAO();

/**
*
* @param Nome do Pais
* @return Todos os países encontrados
*/
public Pais[] find(String nmPais){
ArrayList<pais> list = rdao.getAllPais( nmPais );
Pais[] paises    = new Pais[list.size()];
list.toArray(paises);

return paises;
}
}

Criando o WSDL
Crie um novo objeto chamado Web Service (File > New > Others > Web Service). Após selecionar Web Service clique em Next.

Clique em Browse e selecione a classe responsável por implementar o serviço, ou seja, harpia.region.services.Region. Veja que o tipo deve ser Bottom up Java Web Service.

Na sequência serão exibidos os métodos disponibilizados pelo serviço, caso você não queira publicar basta desmarcar.

E por fim a caixa de dialogo informa que o servidor Apache está down é que será necessário fazer o startup para concluir a criação e publicação do WSDL, utilize esta mesma tela para iniciar o servidor e concluir o passo-a-passo.

Veja que um novo arquivo foi criado em projeto, agora existe o wsdl/Region.wsdl.

O WSDL (Web Service Description Language) nada mais é do que um Schema XML cujo está descrito o serviço de internet. Você poderá acessar este serviço em http://localhost/Harpia/wsdl/Region.wsdl ou também http://localhost/Harpia/services/Region?wsdl.

Criando o Client

Nosso serviço foi criado em Java 1.5, porem, neste momento poderiamos fazer uma solicitação a partir de qualquer linguagem que saiba interpretar o WSDL. Vamos continuar no Java por enquanto e fazer a chamada do nosso Web Service.
Já que a intensão é mostrar como a IDE facilita a criação de Web Services, aqui vai mais um wizard de como fazer o Web Service Client no eclipse.

Hey Client! Chamaí o serviço pow!

import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import harpia.region.bean.Pais;
import harpia.region.services.RegionServiceLocator;

public class HarpiaClient {

public static void main(String[] args) throws RemoteException, ServiceException {
// obter o nome do pais para pesquisa
String nome = JOptionPane.showInputDialog(null, "Qual é o pais?", "Unido");

RegionServiceLocator locator = new RegionServiceLocator(); // localizando ...
Pais[] paises = locator.getRegion().find(nome); // procurando ...
for (int i = 0; i < paises.length; i++) { // exibindo
Pais pais = paises[i];

System.out.println("["+i+"] " + pais.getNome() + " | ID: " + pais.getId_pais());
}
// Simples assim
}

}

E para aqueles que ainda dizem por aí que tudo isso aqui é conversa fiada, se é que existe algum maluco pra dizer isto, tomaí! PHP consumindo o Web Service feito em Java.

<?
$client = new SoapClient(null, array('location' => 'http://localhost/Harpia/services/Region?wsdl',
'uri' => 'http://localhost/Harpia/services/Region?wsdl',
'trace' => '1'));

$result = $client->find('ale');

if(  is_soap_fault($result) ){
echo "Ocorreu algum erro.<br/>";
}else{

print_r($result);
}

unset($client);
?>

Faça download dos fontes aqui.

That’s all.

Bookmark and Share

Written by Luciano

agosto 5th, 2008 at 8:12 pm

Posted in Programação

Tagged with , , , ,

9 Responses to 'Web Services com Apache Axis e Tipos Complexos – Part III'

Subscribe to comments with RSS or TrackBack to 'Web Services com Apache Axis e Tipos Complexos – Part III'.

  1. Isso foi demais , funciona mesmo

    Vou implementar essa solução integrando Java com PHP

    Valeu
    Marco Aurélio

    Marco Aurélio

    29 out 08 at 15:56

  2. Este exemplo está funcionando no eclipse ,porém quando exporto o projeto e rodo sem o eclipse, não consigo enxergar o xsdl

    vc sabe porque isso acontece ?

    Marco Aurélio

    21 nov 08 at 14:03

  3. Responder assim é muito vago, posso tentar ajudá-lo.
    Envie-me o war ou se preferir descreva como está configurado, supostamente deveria funcionar.

    []‘s

    Luciano

    22 nov 08 at 19:53

  4. O arquivo para download não está mais disponivel. Poderia disponibiliza-lo por favor.
    Obrigado

    Gil

    25 fev 09 at 20:20

  5. Gil, o link está reabilitado.

    Abraço, boa sorte!

    Luciano

    25 fev 09 at 21:43

  6. Bom tarde Luciano,

    Quando vc diz que “…a definição de Beans, DAOs e qualquer outras classes serão ocultadas…”, o que vc quiz dizer com isso?

    Atenciosamente,

    Fernando.

    Fernando Salgado

    3 abr 09 at 16:21

  7. Olá Fernando, eu apenas quiz dizer de que não irei demonstrar todos códigos de todas classes para q não fique imenso o texto, já que o projeto-fonte está disponível para download no fim do post. Okay?

    Luciano

    6 abr 09 at 10:42

  8. É que estou tendo um problema com meu projeto de webService. Como o webservice trata-se de um projeto de apenas um arquivo, teoricamente nao deve ter imports, certo? Como faço para que ele consiga ter acesso aos objetos que utilizo no webService, por exemplo, alguma objeto de conexão ao banco, ou mesmo um objeto que seja retornado de uma consulta ao banco de dados? Quando executo o webservice do meu eclipse, tudo funciona muito bem, mas q a quando tento executar a partir de uma chamada do browser, ocorre um erro de classNotFound.
    Como poderia solucionar este erro? Existe algum lugar que disponibilize minhas classe para que o webservice reconheça?

    Atenciosamente,

    Fernando

    Fernando Salgado

    6 abr 09 at 14:00

  9. Fernando, você criou um Web Services ou está tentando consumir um?
    O processo inverso para obter estas classes (Tipos Complexos) é conhecido como “Proxy”. Posso tentar ajudá-lo, envie me um e-mail com sua dúvida mais detalhada luciano@lucianosilva.com.

    Luciano

    10 abr 09 at 22:15

Leave a Reply