Web Service: metodo retornar um Vector

13 respostas
trevezani

E ai Pessoal,

Estou tentando criar um WS que retorna uma lista de objetos só que eu acho que tem que serializar para eu receber no meu cliente. Alguém sabe alguma coisa a respeito???

[],s

Alberto

13 Respostas

O

Se vc estiver usando o Axis, você deve fazer algumas configurações e colocar um código cliente para registrar o Tipo.
Eu acho que no caso de um Vector tem que fazer o registro do tipo.
Dê uma olahada nos exemplos do Axis.

T

Dá para retornar um array de objetos, se não me engano. Pelo menos tentei com o WebSphere e funciona OK.

danieldestro

Com o Apache Axis 1.3 você gera um WS com retorno de um array de um tipo, sem maiores problemas e sem configurações extras. Ele mesmo cuida de configurar os BeanSerializer.

trevezani

Hoje eu estou usando o AXIS 1.2 e estou usando um deploy simples. Tenho que confgurar alguma coisa nele???

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  <service name="Catalogo" provider="java:RPC">
    <parameter name="className" value="Catalogo"/>
    <parameter name="allowedMethods" value="*"/>
  </service>
</deployment>

Server:

import java.util.Vector;

public class Catalogo {

    public Vector getFilmes() {
        Vector lista = new Vector();
        
        Filme filme1 = new Filme();
        filme1.setID(1);
        filme1.setNome("Rambo");

        lista.add( filme1 );
        
        Filme filme2 = new Filme();
        filme2.setID(2);
        filme2.setNome("Platoom");

        lista.add( filme2 );
        
        return lista;
    }

}

O que posso fazer para funcionar?

[],s

T

A dica que demos é usar um array de objetos, não um Vector. No seu caso, você poderia retornar um Filme[].

(Para transformar um Vector de Filme em um Filme[] consulte o método toArray da interface java.util.List).

danieldestro

O próprio Axis gera para você o WSDD, não precisa criar na mão.

Olha um WSDD meu de exemplo, gerado pelo Axis:

&lt;deployment
    xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"&gt;

  &lt;!-- Services from RecursosHumanosService WSDL service --&gt;

  &lt;service name="RecursosHumanosWS" provider="java:RPC" style="wrapped" use="literal"&gt;
      &lt;parameter name="wsdlTargetNamespace" value="urn:RecursosHumanos"/&gt;
      &lt;parameter name="wsdlServiceElement" value="RecursosHumanosService"/&gt;
      &lt;parameter name="schemaQualified" value="urn:RecursosHumanos"/&gt;
      &lt;parameter name="wsdlServicePort" value="RecursosHumanosWS"/&gt;
      &lt;parameter name="className" value="rh.ws.RecursosHumanosWSSoapBindingSkeleton"/&gt;
      &lt;parameter name="wsdlPortType" value="RecursosHumanos"/&gt;
      &lt;parameter name="typeMappingVersion" value="1.2"/&gt;
      &lt;parameter name="allowedMethods" value="*"/&gt;
      &lt;typeMapping
        xmlns:ns="urn:RecursosHumanos"
        qname="ns:Empregado"
        type="java:rh.ws.Empregado"
        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
        deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
        encodingStyle=""
      /&gt;
  &lt;/service&gt;
&lt;/deployment&gt;
trevezani

Vou fazer o teste retornando um array. No caso não sabia que o AXIS gerava o WSDD não. Como eu faço para gerar o WSDD automaticamente para minha classe Catalogo?

Valews

=)

danieldestro

1 - Gerar o WSDL da sua classe de serviço
2 - Gerar o “skeleton” a partir do WSDL gerado (ele tbm gera o WSDD)

trevezani

Tem como você me passar os comandos para gerar o WSDL e o Skeleton???

Valews

=)

danieldestro

http://java.danieldestro.com.br
Lá tem uma apostila sobre Axis.

F

Srs. to com esse mesmo prblema, não consigo retornar nem um array de objetos nem um vector. vejam meu wservice
import java.util.*;

public class WServiceFunVideo {

//Objetos de Negocio
private tNegocioAgenda objNegAgenda = new tNegocioAgenda();
private tNegocioFilme objNegFilme = new tNegocioFilme();
private tNegocioListaEspera objNegListaEspera = new tNegocioListaEspera();

private tcelFilmes objFilme = new tcelFilmes();


public tcelFilmes[] teste(String str){

        //Vector vec = new Vector();
        tcelFilmes obj1 = new tcelFilmes();
        tcelFilmes obj2 = new tcelFilmes();
        tcelFilmes obj3 = new tcelFilmes();

        tcelFilmes[] ArraytcelFilmes = new tcelFilmes[3];

        obj1.IdFilme = 1;
        obj1.strNome = "teste";
        obj1.strGenero  = "av";

        obj2.IdFilme = 2;
		obj2.strNome = "teste 2";
		obj2.strGenero  = "av2";

        obj3.IdFilme = 3;
		obj3.strNome = "teste3";
		obj3.strGenero  = "av3";


		ArraytcelFilmes[0] = obj1;
		ArraytcelFilmes[1] = obj2;
		ArraytcelFilmes[2] = obj3;
/*

vec.add(obj1);

vec.add(obj2);

vec.add(obj3);

*/

return ArraytcelFilmes;
}

}

To usando o TOMCAT com axis 1.4.

Me ajudem.

T

Tio, você poderia postar a classe "tcelFilmes " também? Só para o pessoal poder lhe ajudar.

F

Ok segue a classe
ublic class tcelFilmes {

//Atributos
/*
 *  "IdFilme" int8 NOT NULL,
	"vchNome" varchar(200) NOT NULL,
	"vchGenero" varchar(100)
 */
Integer IdFilme;
String strNome;
String strGenero;

public tcelFilmes(){
	// TODO Auto-generated constructor stub
}

}

Mas meu problema acredito estar no Vetor do Wservice. Coloquei uns debugs p/ ver o result na janela do Tomcat e vi que ao ler o vetor ele não consegue passar do primeiro registro. To mandando em anexo uma copia do meu WS.

Criado 29 de maio de 2006
Ultima resposta 5 de dez. de 2006
Respostas 13
Participantes 5