Retornar un dataset o conjunto de datos en Webservice con JaxWS
Bueno, despues de la pela que coji , tratando de entender los WS ya estoy mano a la obra con los WS de mi proyecto, ya llevo como 10, hechos, ahora me encuentro un problema que no se como resolver, necesito retornar una seleccion de mi tabla mediante WS. he leido sobre no retornar dataset y cosas por el estilo porque haria el WS casarse con Jjava, asi que pense en retornar una matriz de n elementos para esto.
La verdad estoy especulando un poco aqui porque no se mucho esto, pero al menos se que la matriz no sera muy grande, a lo sumo, 20 filas, no se si existe una manera mas lógica de hacer esto de forma tal que no tenga que enviar una matriz .
Los que había hecho hasta ahora, eran simples solo retornaban valores atomicos o nada.
- Inicie sesión o regístrese para enviar comentarios
Regresa un arreglo de
Regresa un arreglo de objetos.
Si tus renglones representan una entidad lógica de "algo" ( personas, escuelas, clientes, productos ) puedes crear una clase de esa cosa y almacenar cada registro en un arreglo.
Luego entonces lo que devolvería tu servicio sería un arreglo de esas "cosas":
...
}
Regresaría un arreglo de alumnos.
¿Tiene sentido?
Uhmm...si tiene sentido pero
Uhmm...si tiene sentido pero me preocupa que quien vaya a consumir ese WS pueda entender que eso es un arreglo de objetos. Esa seria mi unica preocupacion porque no se con que lo vayan a consumir al menos se con que java y .net
No te preocupes, los ws están
No te preocupes, los ws están diseñados para que puedas enviar una colección de datos complejos.
Lo que sí puede ser más dificil es un tipo de dato específico de java ( como por ejemplo java.sql.ResultSet ) pero si vas a usar una clase como estructura de datos así:
String nombre;
String apellido;
int edad;
}
Los webservices no tienen ningún problema consumiendo algo como esto, así que adelante!
Sí tu WDSL...
Si tu WSDL está bien formado no tienes por qué preocuparte ya java y .net soportan bien los arreglos, te pongo un ejemplo de la representación de un arreglo en el WSDL
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Alumno" type="Alumno" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Alumno">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nombre" type="xsd:string" minOccurs="0" maxOccurs="1"/>
<xsd:element name="grado" type="xsd:string" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
La descripción en XML de arriba quiere decir simplemente que existe un Elemento qué se llama Alumnos y dentro de este existe otro elemento qué se llama Alumno y es es del tipo Alumno y puede aparecer 0 ó hasta n veces en tu XML de respuesta o petición según hagas uso de este elemento. Obviamente de este XML jamás te enteras ya qué todo el parseo del XML es transparente para tí.
Suponiendo qué estas esperando una respuesta de este tipo entonces el XML se parecería a lo siguiente:
<Alumno>
<nombre>Luigi</nombre>
<grado>maternal 1</grado>
</Alumno>
<Alumno>
<nombre>Mario</nombre>
<grado>maternal 1</grado>
</Alumno>
<Alumno>
<nombre>Koopa</nombre>
<grado>maternal 1</grado>
</Alumno>
<Alumno>
<nombre>Princess Peach</nombre>
<grado>maternal 1</grado>
</Alumno>
<Alumno>
<nombre>Wario</nombre>
<grado>maternal 1</grado>
</Alumno>
</Alumnos>
JAVA y .net son capaces de transformalo a un arreglo sin ningún tipo de problemas así qué no te preocupes, el resultado probablemente que te genere tu herramienta para consumir servicios web podría ser un arreglo o alguna colección, es cuestión que hagas la prueba.
Suerte.
En este ejemplo usas los
En este ejemplo usas los atributos publicos. Hice la clase pero como una clase no como una estructura y use los metodos normales de set y get para los valores. Seria mejor asi o de plano lo uso mejor como una estructura.
Me estoy llevando del ejemplo de que es un bean
Definitivamente como lo
Definitivamente como lo tienes tú, con :
private String atributo;
public String getAtributo() {
return this.atributo;
}
public void setAtributo( String nuevoValor ) {
this.atributo = nuevoValor;
}
}
Lo que puse fue solo un ejemplo y no quize escribir los get/set pero sí lo lo debes de hacer.