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:
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:
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-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
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 gustaMe gusta
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 gustaMe gusta