pessoal estou com um problema a dias e nao estou conseguindo resolver peço a ajuda dos amigos de profissão
O que ocorre, tenho que pegar um PDF de um servidor ftp e baixar para a pasta do usuario (user.home), em seguida eu acesso esta pasta que exibe este PDF dentro de um iframe.
Ate esta parte esta funcionando blzinha, o que acontence é que quando eu faço este processo denvo eu tomo este erro “getOutputStream() has already been called for this response”, lembrando que este PDF estou gerando em um Servlet separado pq não achei uma forma de faze-lo com o primefaces, se alguem souber uma forma mais simples por favor me ajude, bom vou colocar o codigo pros amigos verem, eu acredito que o JSF que esteja diaparando este erro:
stacktrace
Jun 10, 2012 11:57:31 PM org.apache.catalina.core.StandardWrapperValve invoke
Grave: Servlet.service() for servlet [Faces Servlet] in context with path [/DigitalizacaoApp] threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:637)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:214)
at com.sun.faces.context.ExternalContextImpl.getResponseOutputWriter(ExternalContextImpl.java:723)
at com.sun.faces.context.PartialViewContextImpl.createPartialResponseWriter(PartialViewContextImpl.java:431)
at com.sun.faces.context.PartialViewContextImpl.access$300(PartialViewContextImpl.java:71)
at com.sun.faces.context.PartialViewContextImpl$DelayedInitPartialResponseWriter.getWrapped(PartialViewContextImpl.java:582)
at javax.faces.context.PartialResponseWriter.startDocument(PartialResponseWriter.java:115)
at org.primefaces.context.PrimePartialResponseWriter.startDocument(PrimePartialResponseWriter.java:205)
at com.sun.faces.context.AjaxExceptionHandlerImpl.handlePartialResponseError(AjaxExceptionHandlerImpl.java:199)
at com.sun.faces.context.AjaxExceptionHandlerImpl.handle(AjaxExceptionHandlerImpl.java:123)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
segue o meu Servlet
public void exibeImagen(HttpServletRequest request, HttpServletResponse response, String nome){
InputStream in = null;
OutputStream outs = null;
String userHome = null;
try {
userHome = System.getProperty("user.home");
File file = new File("C:\\Users\\Meinel\\img\\comprovante Luz pag 14042011.pdf");
if(file.exists()){
response.setHeader("application/pdf", "Content-Type");
response.setContentType("application/pdf");
outs = response.getOutputStream();
in = new BufferedInputStream(new FileInputStream("C:\\Users\\Meinel\\img\\comprovante Luz pag 14042011.pdf"));
byte[] buf = new byte[4 * 1024]; // 4K buffer
int bytesRead;
while ((bytesRead = in.read(buf)) != -1) {
outs.write(buf,0,bytesRead);
}
outs.flush();
outs.close();
in.close();
}
} catch(Exception e){
e.getMessage();
}finally{
}
}
eu chamo ele dentro do meu iframe assim
<iframe src="imagem" width="85%" frameborder="1" name="pedf" id="pdf" style="height:750px;" scrolling="auto" title="Imagem digitalizada" />
e no meu bean estou chamando assim:
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
ServeltInagen sever = new ServeltInagen();
sever.exibeImagen(request, response,arquivo);
por favor gente me ajuda, nao quero nada pronto, so preciso de uma luz pra pode seguir…
abraço pessoal e obrigado!!!