menu
JSON-RPC-Java: devolviendo objetos complejos: Beans, Lists, Maps y Sets
JSON-RPC-Java permite, como comentamos en el post anterior, la comunicación transparente entre el código JavaScript y Java.
Otra de las características que hacen tremendamente interesante a esta tecnología es el tratamiento que hace a los objetos devueltos. Esta librería es capaz de serializar los objetos Java y de deserializarlos como objetos JavaScript. Así ahorramos el tiempo necesario para determinar el formato de la información a enviar, siendo innecesario definir esquemas para nuestros XML o JSON como hacíamos sin JSON-RPC-Java.
Devolviendo Beans
Un Bean (o JavaBean) es un objeto Java que cumple las siguientes características:
- Implementa un constructor sin parámetros.
- Sus atributos son accesibles vía getters y setters.
- Implementa la interfaz Serializable.
Podéis encontrar más información en la Web de esta tecnología.
Con JSON-RPC-Java, si una función de un objeto registrado devuelve un Bean este se serializa y se envia. De tal forma que podremos acceder a el como si se tratara de un objeto JavaScript.
Por ejemplo, un objeto de la siguiente clase:
public class Ejemplo implements Serializable {
private int id;
private String nombre;
public Ejemplo() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
Al ser devuelto y serializarse, el JSON que recibiria nuestra página seria:
{
"javaClass":"com.ateneaTech.Ejemplo",
"id":"12",
"nombre":"Un ejemplo"
}
Así, de forma transparente (sin tener que hacer el eval con lo que nos retorne la función) si la función foo devolviera un objeto de la clase Ejemplo podemos hacer:
var bar = jsonrpc.ejemplo.foo()
alert(bar.nombre);
Devolviendo colecciones de objetos: Lists, Maps y Sets
JSON-RPC-Java es capaz de serializar tambien las colecciones incluidas en java.util. concretamente puede serializar las diferentes colecciones que implementen las interfaces List, Set y Map.
En el primer caso, los List, el JSON que genera y evalua es de la forma:
{
"javaClass": "java.util.ArrayList",
"list": [0, 1, 2, 3, 4]
}
En el segundo, en el caso de los Set, el JSON es:
{
"javaClass": "java.util.HashMap",
"map": {"foo key": "foo value"}
}
Y en el tercero y último, los Map, es:
{
"javaClass": "java.util.HashSet",
"set": {"foo key": "foo key"}
}
De esta forma podemos acceder a grandes cantidades de información sin tener que diseñar ningun mecanismo de comunicación. JSON-RPC-Java se encargará de ello.
Si tenéis alguna pregunta no dudéis en comentar :)