Resolviendo Bug ADF 12c + Trinidad + Glassfish 4.1 (trindiad-impl.jar)

Existe un bug en la última versión de ADF Studio Edition Version 12.2.1.0.0 y Glassfish 4.1 que no permite subir archivos utilizando el componente af:inputFile. El error se produce en la clase MultipartFormHandler.class de trinidad-impl.jar (ver. 2.0.0).

Si estamos utilizando af:inputFile con un af:form y la propiedad usesUpload a true.

<af:form id=»f1″ usesUpload=»true»>

<af:inputFile label=»Archivo» id=»dc_if1″ />

</af:form>

Cuando intentamos subir un archivo a nuestra aplicación, Glassfish devuelve el siguiente error:

java.io.EOFException at org.apache.myfaces.trinidadinternal.share.util.MultipartFormHandler.

_skipBoundary(MultipartFormHandler.java:229) at org.apache.myfaces.trinidadinternal.share.util.MultipartFormHandler.

<init>(MultipartFormHandler.java:102) at org.apache.myfaces.trinidadinternal.share.util.MultipartFormHandler.<init>(MultipartFormHandler.java:75) at org.apache.myfaces.trinidadinternal.config.upload.FileUploadConfiguratorImpl.

beginRequest(FileUploadConfiguratorImpl.java:139) at org.apache.myfaces.trinidadinternal.config.GlobalConfiguratorImpl.

_startConfiguratorServiceRequest(GlobalConfiguratorImpl.java:746) at org.apache.myfaces.trinidadinternal.config.GlobalConfiguratorImpl.

beginRequest(GlobalConfiguratorImpl.java:227) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:184) at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)

El método _parseBoundary(String ), no está devolviendo la cadena correcta. En algunos casos al parámetro boundary que devuelve se le está sumando la cadena “charset=UTF-8”.

MultipartFormHandler.java

Método original:

Captura1
Para resolverlo, descargaremos la versión de trinidad-impl.jar que está usando ADF (trinidad-impl-2.0.0-sources.jar.zip). Y añadiremos el siguiente parche:

Captura2

Donde nos quedamos con el valor de boundary descartando cualquier string que se añada después (“charset=UTF-8” en nuestro caso).

Compilamos trinidad-impl y sustituimos el jar en el despliegue de nuestra aplicación.

trinidad-impl.java

trinidad-impl-2.0.0-sources.jar.zip

 

Hilos abiertos sobre el bug:

https://community.oracle.com/message/13845423#13845423

https://community.oracle.com/message/13845425#13845425

https://community.oracle.com/message/13845473#13845473

https://community.oracle.com/message/13845424#13845424

https://community.oracle.com/message/13845421#13845421