¿El EL soporta métodos sobrecargados?

Actualicé mi aplicación web Java EE para usar la versión más reciente de PrimeFaces y de repente la llamada de un método bean sobrecargado en un atributo de acción del comando CommandFace no funcionó más. Intenté usar JSF default commandlink para probarlo y este tampoco funcionó.

Las firmas de método son las siguientes:

public void updateA(B b); public void updateA(A a); 

Siempre intentó lanzar A a B.

Más curioso, ¿cómo podría funcionar antes de la actualización?

EL no lo admite, no. Siempre será el primer método de la matriz Class#getMethods() cuyo nombre (y cantidad de argumentos) coincide con la llamada al método EL. Si devuelve el mismo método cada vez o no depende de la marca / versión de JVM utilizada. Quizás también hayas hecho una actualización Java SE mientras tanto. El javadoc incluso dice esto:

Los elementos en la matriz devuelta no están ordenados y no están en ningún orden particular.

No deberías confiar en un comportamiento no especificado. Dales un nombre diferente.

La forma en que puede evitar esto es crear un método genérico y hacer el ‘enrutamiento’ dentro de ese método. Sé que esto podría no ser ideal, pero terminas con menos configuraciones en funciones y páginas XHTML.

 if (A.class.isInstance(obj)) { A o = (A) obj; return method(o, highRes); } else if (B.class.isInstance(obj)) { B o = (B) obj; return method(o, highRes); } else if (C.class.isInstance(obj)) { C o = (C) obj; return method(o, highRes); } else { throw new FacesException("Unsupported Conversion: " + obj); }