Estoy intentando crear un cliente soap para conectarme a un servicio web hecho en php, he tenido éxito cuando el servicio me retorna un valor simple como un número o un texto, pero cuando necesito que me regrese un arreglo es que tengo el error porque no sé como capturar los datos en realidad.
Lo que intento es llamar una lista de usuarios según el sexo, femenino o masculino. Este arreglo consta de un id, nombre y apellido como este ejemplo:
Id: 1 - Nombre: Zelda, Apellido: De Hyrule
Id: 2 - Nombre: Misato, Apellido: Katsuragi
Id: 3 - Nombre: Asuka, Apellido: Langley
Id: 7 - Nombre: Jill, Apellido: Valentine
Este es el código:
Código Java:
Ver original/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cliente_soap2;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
/**
*
* @author hug0
*/
public class Cliente_soap2 {
/**
* @param args the command line arguments
*/
public static void main
(String[] args
) { // TODO code application logic here
try{
//url del servicio soap
String soapURL
= "http://garabatoslinux.net/apps/soap_java/servicio.phpp";
//instanciar un nuevo servicio
Service servicio = new Service();
//variable que invocara la llamada al servicio
Call llamada = (Call) servicio.createCall();
//establecemos la direccion del servicio
llamada.
setTargetEndpointAddress(new java.
net.
URL(soapURL
));
//establecemos el nombre de la funcion a llamar
llamada.setOperationName(new QName("consultaUsuarios"));
//url con los esquemas de los tipos de datos
String NS_XSD
= "http://www.w3.org/2001/XMLSchema";
//tipo de dato a enviar
QName QNAME_TYPE_STRING = new QName(NS_XSD, "string");
//definir el primer parametro a enviar
llamada.addParameter("sexo", QNAME_TYPE_STRING, ParameterMode.IN);
//Introducir los parametros en un arreglo,
//en el mismo orde que se definieron
//Establecer el tipo de dato regresado
llamada.setReturnType(org.apache.axis.Constants.XSD_STRING);
//Guardar resultado despues establecer la llamada
String[] resultado
= (String[]) llamada.
invoke( parametros
);
//imprimir resultado
//System.out.println("El resultado de la suma es: " + resultado[0]);
//System.err.print(e.getStackTrace());
//System.out.println("ERROR\n" + e.getStackTrace());
}
}
}
Y este es el mensaje de error:
Código:
- Exception:
org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
at org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeserializer.java:145)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
at org.apache.axis.client.Call.invoke(Call.java:2467)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at cliente_soap2.Cliente_soap2.main(Cliente_soap2.java:62)
Alguien me puede dar una pista de como debería capturar los datos para presentarlos, sería de mucho ayuda.