Я пытаюсь прочитать документ Excel, помассировать его, а затем написать документ на верблюде.Я могу прочитать документ Excel, я могу написать в его ячейки или обновить его.У меня проблемы с записью потока в обмен сообщениями верблюда и получением документа Excel.
что я делаю не так?спасибо !!!
так, идея в том, что у меня есть шаблон Excel, который я импортирую.У меня есть данные, поступающие с биржи, которые будут помещены в ячейки электронной таблицы на 2-м листе, а затем мне нужно отправить этот файл в пункт назначения.
public class XlsxProcessor implements Processor {
private Logger log = Logger.getLogger(XlsxProcessor.class.getName());
private static final String template = "DataloaderTemplate.xlsx";
/* collect data from in msg exchange to populate excel spreadsheet */
@Override
public void process(Exchange exchange) throws Exception {
log.info("Importing Excel Spreedsheet Start...");
/* List<Map<String, String>> rows = (List<Map<String, String>>)exchange.getIn().getBody();
for (Map<String, String> row : rows) {
StringBuilder line = new StringBuilder();
Iterator<String> rowItr = row.values().iterator();
while (rowItr.hasNext()) {
String value = rowItr.next();
line.append(value);
if (rowItr.hasNext()) {
line.append(",");
}
}
line.append("\n");
log.info("row values: " + line.toString() );
}
*/
InputStream xlsxStream = null;
ClassLoader classLoader = this.getClass().getClassLoader();
URL url = this.getClass().getClassLoader().getResource("/excel/" + template);
log.info("Located Resource URL: " + url );
if (url != null ){
log.info("open input stream");
xlsxStream = url.openStream();
} else {
log.error("Excel APM Upload Template URI cannot be located!");
}
log.info("Open WorkBook!");
XSSFWorkbook workbook = new XSSFWorkbook(xlsxStream);
XSSFSheet worksheet = workbook.getSheetAt(1);
XSSFRow row;
int rowid = 2; //data entry starts at row 3 sheet 1 ( 0, 1, 2 )
// for (String key : keyid) {
row = worksheet.createRow(rowid++);
int cellid = 0;
// for (Object obj : objectArr) {
for ( int i = 0; i < 10; i++){
XSSFCell cell = (XSSFCell) row.createCell(i);
cell.setCellValue(String.valueOf(i));
}
// }
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
workbook.write(bos);
} catch (IOException e) {
} finally {
try {
bos.close();
} catch (IOException e) {
}
}
byte[] xlsx = bos.toByteArray();
exchange.getIn().setBody(xlsx);
log.info("APM Predix Excel Spreedsheet End...");
}
, который переходит в контекст верблюда для отправки файла по назначению
<process ref="xlsxProcessor" />
<to uri="{{EndpointTest}}fileName=/${header.aircraftMetadata.outputPath}/${header.aircraftMetadata.shipNumber}-${header.enginePosition}_${header.messageDateTime}.xlsx&charset={{outputEncoding}}" />
<log message="Sending data packet: ${header.aircraftMetadata.outputPath}/${header.aircraftMetadata.shipNumber}-${header.enginePosition}_${header.messageDateTime}.xlsx" />
Выходные данные выглядят как двоичный файл, весь в нем собранный, это не файл Excel.Я думаю, это из-за того, как оно отправляется на обмен сообщениями?