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

 

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

  1. HI,

    I am facing same issue, I recently upgraded to Payara 4.1 aka glassfish 4.1 opensource, I am using Jdeveloper 12.2.1

    your jar fixes the issue on sample application, but when i use it on the actual application it still throws an EOFexception. I am not able to debug the same. can you please help me with this.

    Thanks in advance
    Apoorv Jain

    Me gusta

  2. Hola Alex,

    Muchas gracias por tus posts. Sobre todo el workaround para subir ficheros, me ha sacado de un apuro.

    Un pregunta, ¿por qué hay que cambiar el parámetro javax.faces.FACELETS_VIEW_MAPPINGS?

    En mi aplicacion actual tiene el valor: *.jsf;*.xhtml y tu comentas que hay que añadirle además *.jspx,*.jsp.

    ¿Con esto qué conseguimos?

    Gracias!

    Me gusta

Deja un comentario