Buenas tardes a todos los foristas, espero que alguno de ustedes me puedan ayudar con un problema que no puedo resolver.
Estoy haciendo un WebService con Axis 1.4, pero estoy teniendo problemas para poder utilizar Datos complejos, en específico un objeto tipo JavaBean como parámetro, trataré de explicarme.
Estoy tratando de hacer un HolaMundo enviando como parámetro un objeto tipo JavaBean, es decir, tengo una Clase Persona así:
Código Java:
Ver originalpackage parametros;
import java.io.Serializable;
return nombre;
}
public void setNombre
(String nombre
) { this.nombre = nombre;
}
return apellido;
}
public void setApellido
(String apellido
) { this.apellido = apellido;
}
public Persona(){
}
}
En Clase del Web Service, tengo dos métodos, de esta manera:
Código Java:
Ver originalpackage publicar;
import parametros.Persona;
public class HolaMundo {
public HolaMundo(){
}
String[] regresar
= new String[]{"Hola " + nombre
+ " " + apellido
}; return regresar;
}
public String[] Saludar2
(Persona persona
){ String[] regresar
= new String[]{"Hola " + persona.
getNombre() + " " + persona.
getApellido()}; return regresar;
}
}
Como se observa, la única diferencia entre los métodos Saludar1 y Saludar2 es el objeto que se envía como parámetro. En el cliente, cuando hago la invocación del primer método, lo hago así, y funciona correctamente:
Código MySQL:
Ver originalpackage ws;
import org.apache.axis.client.Service
; public class PruebaWS {
public PruebaWS() {
}
public static void main(String[] args) {
try {
String
endpoint = "http://localhost:8084/WSHolaMundo/services/HolaMundo"; Service service = new Service();
call.setTargetEndpointAddress
( new java.net.URL
(endpoint) ); call.setOperationName
("Saludar1"); String
[] resultado
= null; resultado
= (String
[]) call.invoke
(new Object
[]{"Leonardo", "Córcega"}); for
(int i
= 0; i
<= resultado.
length - 1; i
++) { System.
out.println
("resultado " + String.valueOf
(i
) + ": ".
concat(resultado
[i
])); }
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
Sin embargo, cuando trato de hacer la invocación enviando un objeto Persona me marca un error:
Cita: java.io.IOException: No serializer found for class parametros.Persona in registry org.apache.axis.encoding.TypeMappingDelegate@1aacd 5f"
La manera en que hago la invocación es la misma que arriba, solo cambio la parte del envío del parámetro:
Código Java:
Ver original...
CALL.setOperationName("Saludar2");
Persona persona = new Persona();
persona.setNombre("Leonardo");
persona.setApellido("Córcega");
....
He leído que tengo que modificar el archivo WSDD para que pueda hacer el casteo del objeto:
http://www.coderanch.com/t/225018/We...io-IOException http://www.oio.de/axis-wsdd/beanMapping.htm http://mail-archives.apache.org/[email protected]%3E
Sin embargo no logro dar con la sintaxis correcta, lo he intentado así:
Código XML:
Ver original<service name="HolaMundo" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<parameter name="className" value="publicar.HolaMundo"/>
<beanMapping qname="Persona" type="java:parametros.Persona"/>
</service>
Código XML:
Ver original<service name="HolaMundo" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<parameter name="className" value="publicar.HolaMundo"/>
<beanMapping qname="Persona" languageSpecificType=="java:parametros.Persona"/>
</service>
Y muchas otras formas, pero con ninguna he logrado hacer correr el ejemplo... Alguno de ustedes tiene idea de lo que puede estar pasando??? cómo o hay algún error en la manera en que estoy invocando el WS?
De antemano muchas gracias por el apoyo.
Saludos
Leo.