Buscar
Social
Ofertas laborales ES
« Excelente recopilación de información sobre Java EE 7 | Main | El pernicioso circulo vicioso de las "cárnicas". Los que pagan, los clientes »
lunes
jul082013

JDK 7u40 va a realizar cambios en el API de Reflection que podrían romper código

Por motivos de seguridad (aunque no han dado muchos detalles) Oracle tiene intención de realizar cambios en el JDK 7u40 que podrían hacer que programas que ahora se ejecutan correctamente en versiones anteriores dejen de hacerlo; estos cambios afectan al API de Reflection y consisten en la eliminación del método sun.reflect.Reflection.getCallerClass(int).

De un modo temporal, va a existir un comando de consola que va a permitir "reactivar" ese método en un JDK 7:

-Djdk.reflect.allowGetCallerClass

Pero en Java 8 ese método no estará accesible de ningún modo. Y, en cualquier caso, al ser un método no estándar (sun.*) en teoría nadie lo debería estar usando. Pero como siempre sucede con estos métodos, hay gente que los usa. Si vosotros estáis en este caso, tener en cuenta que pronto vais a dejar de poder emplearlo.

Oracle está avisando de esta situación para que no pilla nadie desprevenido cuando publique la u40.

PrintView Printer Friendly Version

EmailEmail Article to Friend

Reader Comments (4)

Por mucho que Oracle avise mi preocupación es enorme. El problema puede estar en frameworks que realizan "magia" (entiéndase un funcionamiento basado en reflection) que obligarán a mantener su uso hasta la correspondiente actualización.
Los cambios en API que rompen compatibilidad son muy drásticos, y sin más información acerca de ese problema de seguridad es difícil dar una opinión, pero tiene que ser muy grave, para que se adopte una decisión de ese calibre.
Por supuesto que el uso de APIs internas de Sun conlleva un riesgo. Lástima que los frameworks no incluyan una referencia de su uso, podría ser un punto más a la hora de valorar una elección.

julio 8, 2013 | Registered CommenterRamón Rial

En docjar

Returns the class of the method realFramesToSkip frames up the stack (zero-based), ignoring frames associated with java.lang.reflect.Method.invoke() and its implementation.
The first frame is that associated with this method, so getCallerClass(0) returns the Class object for sun.reflect.Reflection.
Frames associated with java.lang.reflect.Method.invoke() and its implementation are completely ignored and do not count toward the number of "real" frames skipped
.

Por lo que se entiende que esto es de cuidado para todos los que estemos utilizando el método java.lang.reflect.Method.invoke().

Un saludo,

julio 8, 2013 | Registered Commenterefrigerio

Coming Soon: Preparados una nueva Release de todo Spring para corregir esto.

julio 9, 2013 | Registered Commenterantuansoft

amigos el metodo .invoke es muy usado con frameworks como ZK que pasaria si el metodo .invoke es eliminado?

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>