Pessoal,
Estou com a seguinte situação:
Tenho um webservice e um servlet que tem a função de gerar relatórios pdf (jasper).
Esse servlet é “acionado” a partir do webservice (tem um método que recebe os parâmetros do relatório). Eu consegui “acionar” o servlet repassando o parâmetro recebido pelo webservice utilizando httpClient
org.apache.http.client.HttpClient httpclient = new DefaultHttpClient();
try {
HttpPost httppost = new HttpPost("http://localhost/xxxx/ServletReport");
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("dataset", arquivo));
httppost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
httpclient.execute(httppost);
} catch (Exception e) {
System.out.println(e);
} finally {
// TODO: handle exception
}
No meu servlet, no método service (chamado acima pelo httpClient.execute(httppost)) é o seguinte (ocultando detalhes não importantes)
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(reportData);
JasperPrint prt = JasperFillManager.fillReport(reportFile.getPath(), params, ds);
bytes = JasperExportManager.exportReportToPdf(prt);
if (bytes != null && bytes.length > 0) {
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
response.setHeader("Content-disposition", "attachment;filename=relatorio.pdf"); //Ja tentei sem essa linha e não adianta tbm
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
}
}
O processamento é realizado sem problema, porém não exibe o relatório (pdf) em outra aba do browser, nem pede para salvar.
Esse mesmo servlet eu utilizo em uma aplicação Flex e essa chama esse servlet usando
var request:URLRequest = new URLRequest("/servlet/ServletReport");
navigateToURL(request, "_blank");
Nesse caso funciona. A diferença é que chamando do Flex (código acima) é aberta uma nova aba do browser em branco
com o endereço do servlet na barra de endereço…aí funciona perfeitamente…Mas “chamando” do webservice a aba não é
aberta…
Alguém saberia o que fazer nesse caso? Acho que só falta mesmo abrir outra aba com o endereço do servlet.
Para teste eu digitei manualmente no browser o endereço do servlet e funcionou…