Безопасен ли поток SeekableStream?

#java #image #jersey #inputstream

#java #изображение #джерси #входной поток

Вопрос:

У меня есть программа, которая должна изменять размер изображения. Когда я запускаю его один (вызов из JUnit), он работает нормально. Но когда я вызываю его изнутри servelet (фактически Jersey в JUnit), он выдает следующее исключение:

 SEVERE: The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container
java.lang.NoClassDefFoundError: com/sun/media/jai/codec/SeekableStream
  

Исключение указывает на строку

 SeekableStream seekableImageStream = SeekableStream.wrapInputStream(inputstream, true);
  

У кого-нибудь есть какое-либо исправление?

ЧТОБЫ УТОЧНИТЬ ПОСЛЕ НЕКОТОРЫХ ОТВЕТОВ НИЖЕ:

Когда я вызываю класс из JUnit следующим образом, он работает: ResizeMyImage.smallImage(imageFilepath, thumbnailWidth);

Но когда я вызываю его, как показано ниже, я получаю сообщение об ошибке:

 DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
httppost.setEntity(entity);
HttpResponse response = httpclient.execute(httppost);
  

Если я удалю вызовы ResizeMyImage из более крупной программы, DefaultHttpClient … также работает. Спасибо.

Ответ ниже: как мне проверить, что GlassFish использует другой JDK?

Комментарии:

1. Находится ли JAI jars в пути к классу вашего контейнера webapp / servlet?

2. Я создал класс ResizeMyImage внутри пакета для веб-приложения. Я использую netbeans. Импорт работает нормально: он создает и развертывает. Когда я запускаю класс отдельно как локальное приложение, он работает нормально. Он выводит ошибку только тогда, когда я запускаю его как часть более крупного пакета и использую DefaultHttpClient . Есть ли дополнительный способ добавить jar в путь к классу контейнера webapp? Не могли бы вы показать, как это сделать?

3. Все это означает, что ссылки на соответствующие библиотеки используются во время разработки, но не во время выполнения из контейнера сервлета, в который вы должны поместить 3.party jar, которые вы используете, в папке WEB-INF / lib / вашего веб-приложения, но я недостаточно знаком с тем, как вы будете настраивать netbeans для аккуратногоупакуйте это для вас.

4. Это не сторонняя библиотека. jai_codec.jar и jai_core.jar поставляется с JDK 1.6. И я проверяю; они есть — в JDK, я имею в виду. Мой сервер — GlassFish.

5. О? Тогда Glassfish, по-видимому, использует другую версию JDK.

Ответ №1:

Вам нужно беспокоиться о том, что объект является потокобезопасным, только если у вас есть ссылка на объект из двух разных потоков. Если это не потокобезопасно, у вас возникнут проблемы, когда два разных потока попытаются использовать объект одновременно.

Как указывали другие, NoClassDefFoundError означает, что java не может найти класс, на который вы ссылаетесь в своем коде.

Редактировать

JAI воняет тем, что делает некоторые вещи. Такая библиотека, как sanselan, может работать лучше для вас.