2015-01-20 2 views
0

У меня есть приложение для Java-приложения, которое должно отображать отчет яшмы, полученный из веб-службы. Веб-служба возвращает массив байтов как таковой:Отображение отчета jasper, сгенерированного веб-службой

JasperDesign jasperDesign = JRXmlLoader.load(input); 
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); 
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parametersMap, resultSetDataSource); 
byte[] pdfByteArray = JasperExportManager.exportReportToPdf(jasperPrint); 
return pdfByteArray; 

Как отобразить возвращаемый массив байтов в JRViewer? Можно ли преобразовать массив байтов в объект JasperPrint? Я не могу вернуть объект JasperPrint из веб-службы, потому что получаю ошибку «интерфейса».

ответ

1

Наконец-то я нашел решение моей проблемы. Во-первых, вместо того, чтобы возвращать массив байтов из веб-службы, я возвращает строку, которая содержит файл XML, как например:

JasperDesign jasperDesign = JRXmlLoader.load(input); 
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); 
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parametersMap, resultSetDataSource); 
String xmlString = JasperExportManager.exportReportToXml(jasperPrint); 
return xmlString; 

Далее в клиентском приложении, я беру эту строку и преобразовать его в документ. Я получил следующий метод из http://www.journaldev.com/1237/java-convert-string-to-xml-document-and-xml-document-to-string:

private static Document convertStringToDocument(String xmlStr) { 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder; 
    try { 
     builder = factory.newDocumentBuilder(); 
     Document doc = builder.parse(new InputSource(new StringReader(xmlStr))); 
     return doc; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

Далее я сохранить документ на локальном диске, как, например:

Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
Result output = new StreamResult(new File("theFile.xml")); 
Source input = new DOMSource(doc); 
transformer.transform(input, output); 

и, наконец, я показал недавно сохраненный XML с помощью конструктора Jrviewer:

JRViewer view = new JRViewer("theFile.xml", true); 
Смежные вопросы