Возможно, причина в том, что запрос проходит через SeamFilter, как вы и предполагали.
Я думаю, что не сам SeamFilter буферизирует поток данных из вашего сервлета, а фильтр Ajax4Jsf, который вызывается в цепочке фильтров.
Если у вас есть RichFaces в classpath, есть компонент шва, который регистрирует фильтр Ajax4jsf в цепочке. А именно, компонент Seam равен org.jboss.seam.web.ajax4jsfFilter
.
Если вам не нужны RichFaces, попробуйте удалить его из пути к классам. Если вам это нужно, я предлагаю переопределить org.jboss.seam.web.ajax4jsfFilter
, чтобы пропустить фильтр Ajax4Jsf для запросов, направленных на ваш сервлет.
Другим возможным решением является преобразование вашего сервлета в фильтр в качестве компонента Seam (см. Аннотацию @Filter) и размещение его в начале цепочки с атрибутомround. Что-то вроде:
@Name("FormerServlet")
@Scope(STATELESS)
@BypassInterceptors
@Filter(around = "org.jboss.seam.web.ajax4jsfFilterInstantiator")
public class FormerServletFilter implements Filter
{
protected void init(FilterConfig filterConfig) throws Exception
{
}
protected void doDestroy()
{
}
/**
* Performs the filtering for a request.
*/
protected void doFilter(final HttpServletRequest request, final HttpServletResponse response,
final FilterChain chain) throws Exception
{
if (thisRequestShoudBeManagedByMyServlet(request) )
{
// do here what you previously did in the servlet
} else
{
// go ahead with the Seam lifecycle
chain.doFilter(request, response);
}
}