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
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
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.
Dá para retornar um array de objetos, se não me engano. Pelo menos tentei com o WebSphere e funciona OK.
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.
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
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).
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:
<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<!-- Services from RecursosHumanosService WSDL service -->
<service name="RecursosHumanosWS" provider="java:RPC" style="wrapped" use="literal">
<parameter name="wsdlTargetNamespace" value="urn:RecursosHumanos"/>
<parameter name="wsdlServiceElement" value="RecursosHumanosService"/>
<parameter name="schemaQualified" value="urn:RecursosHumanos"/>
<parameter name="wsdlServicePort" value="RecursosHumanosWS"/>
<parameter name="className" value="rh.ws.RecursosHumanosWSSoapBindingSkeleton"/>
<parameter name="wsdlPortType" value="RecursosHumanos"/>
<parameter name="typeMappingVersion" value="1.2"/>
<parameter name="allowedMethods" value="*"/>
<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=""
/>
</service>
</deployment>
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
=)
1 - Gerar o WSDL da sua classe de serviço
2 - Gerar o “skeleton” a partir do WSDL gerado (ele tbm gera o WSDD)
Tem como você me passar os comandos para gerar o WSDL e o Skeleton???
Valews
=)
http://java.danieldestro.com.br
Lá tem uma apostila sobre Axis.
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.
Tio, você poderia postar a classe "tcelFilmes " também? Só para o pessoal poder lhe ajudar.
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.