2014-10-17 2 views
7

Мы генерируем наши отчеты с использованием JasperReports 5.6.1 и разрешаем экспортировать один и тот же шаблон в PDF или Powerpoint. При работе на локальном компьютере загруженный файл PDF и PPTX работает отлично. Когда мы развертываем наши серверы, PDF работает отлично, но файлы PPTX не могут быть открыты. Когда мы запускаем локально, он развертывается в tomcat, но при развертывании на сервере он работает в Websphere.Ошибка загрузки отчета, экспортированного в PPTX при развертывании на сервере

Вещи, которые я принимала, и заметил:

  • Я проверил журналы, и нет никаких исключений или что-нибудь, чтобы поднять любые брови.
  • Загруженный файл обычно немного больше, чем тот, который мы получаем при локальном запуске.
  • Если я изменил расширение файлов на zip и разархивировал их. Структура файла и имена файлов одинаковы, а файлы фактически имеют одинаковый размер файла. Содержимое, по-видимому, отличается только в именах объектов, найденных на каждом слайде.
  • думаю, что это может быть проблема с файлами типа x, которые я тоже пытался экспортировать в xlsx, просто чтобы узнать, что произойдет, и он отлично работает с тем же шаблоном.
  • Я добавил статический файл pptx, который был хорошо известен и может загрузить его без проблем с сервера. Я сделал это, чтобы попытаться устранить конфигурацию сервера из проблемы, и почувствовал, что это сработало, я предполагаю, что это что-то с моим кодом, просто не уверен, что.

Вот код, где мы пишем ответ:

if ("xlsx".equals(type)) { 
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
    response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".xlsx"); 
} else if ("pptx".equals(type)) { 
    response.setContentType("application/vnd.openxmlformats-officedocument.presentationml.presentation"); 
    response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".pptx"); 
    response.setCharacterEncoding("UTF-8"); 
} else { 
    response.setContentType("application/pdf"); 
    response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".pdf"); 
} 
try (final ByteArrayOutputStream reportResult = reportsService.generateReport(
     getDeal(userId, dealId, sessionStore), 
     getScenarioModel(userId, dealId, scenarioId, sessionStore), reportId, type)) { 
    configureResponse(response, type, reportResult, dealId + "-" + scenarioId); 
    // Write to http response 
    reportResult.writeTo(response.getOutputStream()); 
} 

response.flushBuffer(); 

Я кончатся идеи по устранению неполадок, и, не будучи в состоянии воспроизвести его на месте, я нахожу, что трудно диагностировать ,

+0

У кого-нибудь есть решение этой проблемы? Мы боремся с тем же вопросом. Может ли кто-нибудь помочь в этом? –

+0

Настройки класса? Такая же версия локальной и серверной Java? Такая же версия библиотеки JasperReports? Все зависимые библиотеки установлены? Те же версии? Вход в систему для проверки дерева решений? (Кроме того, для любви будущих сопровождающих, пожалуйста, удалите повторяющийся код ...) –

ответ

3

Это немного выстрел в темноте, но вы уверены, что тип mime правильно настроен в ваших экземплярах WebSphere? (Я понимаю, что настройка типа контента в ответе должна устранять необходимость настройки веб-сервера для этого типа MIME, но в конце концов это WebSphere ;-))

Я готов поспорить, что PDF является настроенный тип MIME, но PPTX - нет. Вы можете проверить?

  1. Войти в WAS Консоль администратора
  2. Перейти к Virtual Hosts
  3. Нажмите на ссылку под названием типы MIME

(here's a more detailed technote)

IIRC, в отличие от Tomcat, который (за неимением более подходящий термин), который представляет собой «комплектный» контейнер HTTP и контейнера «все-в-одном», WebSphere имеет отдельный стек HTTP (вместе с отдельной JVM для каждого приложения), поэтому неудивительно, что config может потребоваться там, где не было бы более простых контейнеров.

+0

да, я согласен, вы должны это сделать, и если он отсутствует, вы должны добавить свой тип MIME ('application/vnd.openxmlformats-officedocument.presentationml.presentation') там – borowis