Hi All,
I need help ...
I'm using the Tomahawk library in our project. In web.xml I have an entry as follows ...,
--------------------
<filter>
<filter-name>MyFacesExtensionsFilter</filter-name>
<filter-class>org.apache.myfaces.component.html.util.ExtensionsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<!-- servlet-name must match the name of your javax.faces.webapp.FacesServlet entry -->
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<!-- extension mapping for serving page-independent resources (_javascript_, stylesheets, images, etc.) -->
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>*.jsf</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
-------------------------
I need help ...
I'm using the Tomahawk library in our project. In web.xml I have an entry as follows ...,
--------------------
<filter>
<filter-name>MyFacesExtensionsFilter</filter-name>
<filter-class>org.apache.myfaces.component.html.util.ExtensionsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<!-- servlet-name must match the name of your javax.faces.webapp.FacesServlet entry -->
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<!-- extension mapping for serving page-independent resources (_javascript_, stylesheets, images, etc.) -->
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>*.jsf</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
-------------------------
In the project I have download code as follows :
private void copyFileToResponse(HttpServletResponse response, FileInputStream fileIn) throws IOException {
int BUFF_SIZE=4096;
byte[] buffer = new byte[BUFF_SIZE];
ServletOutputStream responseOutStream = response.getOutputStream();
BufferedInputStream buf = new BufferedInputStream(fileIn);
int n = 0;
int count = 0;
while((n = buf.read (buffer)) != -1) {
// responseOutStream.write(buffer);
LOGGER.info("while loop : before write to Buffer and count => " + count);
responseOutStream.write (buffer,0,n);
count += n;
LOGGER.info("while loop : copyFileToResponse flush");
responseOutStream.flush();
LOGGER.info("while loop : copyFileToResponse flushBuffer");
LOGGER.info("while loop : after buffer read");
}
LOGGER.info("after while loop : before flushbuffer");
buf.close();
LOGGER.info("after while loop : before flushbuffer");
response.flushBuffer();
responseOutStream.close();
LOGGER.info("after while loop : after flushbuffer");
}
My problem is as follows,
If I have the mentioned entries in the web xml and I'm trying to downlaod > 100 MB file,
the above code, throws
"java.lang.OutOfMemoryException : Java heap space"
org.apache.catalina.connector.CoyoteOutputStream.
But it works fine if I remove the entries from the web.xml file.
I have debuuged and found that if I keep above "MyFacesExtensionsFilter" related entries in web.xml, the response is instantiated from org.apache.myfaces.component.html.util.ExtensionsResponseWrapper , in which case flush() doesn't work and causes the "java.lang.OutOfMemoryException : Java heap space" error.
If I remove the MyFacesExtensionsFilter related entries, the response gets instantiated by
"org.apache.catalina.connector.CoyoteOutputStream", in which case flush works fine.
Can anyone tell me how to avoid this situation by still maintaing the "MyFacesExtensionsFilter" related entries in the web.xml.
private void copyFileToResponse(HttpServletResponse response, FileInputStream fileIn) throws IOException {
int BUFF_SIZE=4096;
byte[] buffer = new byte[BUFF_SIZE];
ServletOutputStream responseOutStream = response.getOutputStream();
BufferedInputStream buf = new BufferedInputStream(fileIn);
int n = 0;
int count = 0;
while((n = buf.read (buffer)) != -1) {
// responseOutStream.write(buffer);
LOGGER.info("while loop : before write to Buffer and count => " + count);
responseOutStream.write (buffer,0,n);
count += n;
LOGGER.info("while loop : copyFileToResponse flush");
responseOutStream.flush();
LOGGER.info("while loop : copyFileToResponse flushBuffer");
LOGGER.info("while loop : after buffer read");
}
LOGGER.info("after while loop : before flushbuffer");
buf.close();
LOGGER.info("after while loop : before flushbuffer");
response.flushBuffer();
responseOutStream.close();
LOGGER.info("after while loop : after flushbuffer");
}
My problem is as follows,
If I have the mentioned entries in the web xml and I'm trying to downlaod > 100 MB file,
the above code, throws
"java.lang.OutOfMemoryException : Java heap space"
org.apache.catalina.connector.CoyoteOutputStream.
But it works fine if I remove the entries from the web.xml file.
I have debuuged and found that if I keep above "MyFacesExtensionsFilter" related entries in web.xml, the response is instantiated from org.apache.myfaces.component.html.util.ExtensionsResponseWrapper , in which case flush() doesn't work and causes the "java.lang.OutOfMemoryException : Java heap space" error.
If I remove the MyFacesExtensionsFilter related entries, the response gets instantiated by
"org.apache.catalina.connector.CoyoteOutputStream", in which case flush works fine.
Can anyone tell me how to avoid this situation by still maintaing the "MyFacesExtensionsFilter" related entries in the web.xml.
Regards,
Datta