He estado usando AutoBeans para mapear datos JSON procedentes de un servicio web no GWT-RPC basado en Java. Todo ha estado funcionando hasta ahora excepto por un mapeo.¿Hay alguna manera de abatir un AutoBean de GWT?
En el lado del servidor, la clase tiene una propiedad de tipo Mapa donde MyAbstractParentObject es la clase principal de aproximadamente 15 clases secundarias diferentes.
Cuando lo correlaciono con una interfaz AutoBean correspondiente en el cliente, no puedo bajar MyAbstractParentObject a su tipo secundario después de que se haya descodificado. Busqué en todos los documentos de GWT y en "Google" para ver si AutoBeans incluso tiene soporte polimórfico pero no pudo obtener una respuesta de ninguna manera. Los interceptores y las categorías no parecen ser capaces de manejar esto, solo los métodos que desean que existan en la interfaz no son getters/setters.
Estaba intentando hacer una solución utilizando el campo tipo en los datos JSON para crear una instancia de la clase secundaria pero el AutoBean no me da acceso al JSON sin formato, aunque en el depurador puedo verlo como un campo protegido llamado 'datos'. Si intento decodificar el bean original, solo tendrá los campos en MyAbstractParentObject.
Las únicas alternativas que puedo ver son:
- Extender o crear mi propia AutoBeanCodex que puede manejar adecuadamente los hijos de MyAbstractParentObject cuando se decodifica la JSON.
- Busque una forma de obtener el JSON sin procesar en el AutoBean MyAbstractParentObject y utilícelo para crear una instancia de la clase hija sobre la marcha.
- Cambie a algún otro marco de serialización JSON-GWT como GWTProJSONSerializer o piriti.
Cualquier ayuda sería apreciada.
He tenido que hacer cosas similares con AutoBeans, pero hago una codificación completa para obtener el Splittable de un AutoBean Splittable split = AutoBeanCodex.encode (AutoBeanUtils.getAutoBean (sourceBean)); – Jonathan
@Jonathan Probé 'AutoBeanCodex.encode()'; funciona para upcasting, pero no para downcasting - una pena, ya que sería una manera fácil de hacerlo. :) 'encode()' utiliza el patrón de visitante para recorrer las propiedades del bean y generar el nuevo 'Splittable'. Lamentablemente, el JSON de origen tiene propiedades que no son accesibles a través de ese bean, pero que son necesarias para 'downcast' ... y el visitante no las ve, por lo que el JSON de 'encode()' 's' Splittable 'no los tiene. :( ... De ahí extrañamente obteniendo el 'Splittable' directamente y copiándolo; se decodifica correctamente ya que toda la información está todavía allí. –
Veo a qué te refieres. Ahora me parece que ambas técnicas tienen su casos de uso. He estado utilizando el método que mencioné anteriormente porque la mayoría de las veces cuando estoy transformando un autobean en otro, he hecho cambios antes de hacerlo. Por lo tanto, en ese caso, necesito el recorrido completo del visitante para poder para obtener toda la información corregida correcta. Pendiente resbaladiza aquí ya que el uso de 'HasSplittable' puede ser excelente si no has realizado cambios, y sabes ** que no se han realizado cambios. De lo contrario, eres la única opción. para realizar la codificación completa. A menos que me falta algo ..... – Jonathan