Recientemente actualizamos nuestro jBoss EAP de 6.2 a 7.3.0.
Después de la actualización, observamos que la aplicación comenzó a comportarse de manera extraña. Estamos utilizando la versión Spring Framework - 4.1.9.RELEASE.
Por ejemplo:
@RestController public class CommonController{ @RequestMapping(value = "/rest/report/testResponse", method = RequestMethod.GET) public @ResponseBody List<Entry<String, Number>> getData(){ List<Entry<String, Number>> technologyList = new ArrayList<>(); SimpleEntry<String, Number> simpleEntry1 = new AbstractMap.SimpleEntry<String,Number>("Java",1); SimpleEntry<String, Number> simpleEntry2 = new AbstractMap.SimpleEntry<String,Number>("Spring",2); technologyList.add(simpleEntry1); technologyList.add(simpleEntry2); return technologyList; } }La respuesta que recibo cuando se implementó la aplicación en jBoss 6.2 es:
[ { "key": "Java", "value": 1 }, { "key": "Spring", "value": 2 } ]La respuesta que obtengo cuando la aplicación ahora se implementa en jBoss 7.3 es:
[ { "Java": 1 }, { "Spring": 2 } ]Como puede ver, hay una diferencia sutil en las dos respuestas anteriores. Esto está rompiendo mi código de interfaz donde hemos usado el código javascript como se muestra a continuación, ya que ahora en jBoss7 no recibimos una respuesta con la clave/valor antepuesto:
<ui-select-choices repeat="obj.value as obj in technologyList | orderBy:'key'"> <div class ="small" ng-bind-html="obj.key" title ="{{obj.key}}"></div> </ui-select-choices>No podemos modificar el código backend/frontend porque la aplicación ya se está ejecutando en producción y no será posible cambiar el código en muchos lugares. Solo queremos actualizar la versión de jBoss.
Cualquiera que haya enfrentado un problema similar, por favor comente/sugiera la resolución.
Este fue un problema para jackson, que se usa de forma predeterminada para la serialización.
Aquí está el comunicado cuando se trajo el cambio a jackson. El problema que enfrenta también se menciona en los problemas de compatibilidad para Jackson 2.5
JBoss 7.3 probablemente viene con una biblioteca de jackson ya incluida, por lo que aquí es donde se ve afectado. Consulte aquí cómo excluir a Jackson de JBoss 7
Luego empaque su aplicación con una biblioteca jackson anterior a 2.5 y vuelva a implementarla.