2012-02-17 2 views
0

я в настоящее время пытаюсь транслировать видео файл через сервис Джерси REST и получить таинственное исключение по возвращению ответа:потокового видео с Джерси

ERROR WebApplicationImpl - The RuntimeException could not be mapped to a response, re-throwing to the HTTP container java.lang.NullPointerException 
at com.sun.jersey.core.util.KeyComparatorHashMap$Entry.hashCode(KeyComparatorHashMap.java:735) 
at java.util.HashMap.getEntry(HashMap.java:344) 
at java.util.HashMap.containsKey(HashMap.java:335) 
at java.util.HashSet.contains(HashSet.java:184) 
at com.sun.jersey.server.linking.impl.RefProcessor.processLinks(RefProcessor.java:85) 
at com.sun.jersey.server.linking.impl.RefProcessor.processMember(RefProcessor.java:120) 
at com.sun.jersey.server.linking.impl.RefProcessor.processLinks(RefProcessor.java:113) 
at com.sun.jersey.server.linking.impl.RefProcessor.processMember(RefProcessor.java:120) 
at com.sun.jersey.server.linking.impl.RefProcessor.processLinks(RefProcessor.java:113) 
at com.sun.jersey.server.linking.impl.RefProcessor.processMember(RefProcessor.java:120) 
.... 

код создает ответ выглядит как следующим образом:

return Response.ok(new StreamingOutput() 
    { 
     @Override 
     public void write(OutputStream output) throws WebApplicationException 
     { 
      PrintWriter out = new PrintWriter(output); 
      out.println("Foo"); 
      out.close(); 
     } 
    }, MediaType.MULTIPART_FORM_DATA).build(); 

(Я уже удалил дополнительные заголовки и прочее). У меня есть несколько точек останова в методе StreamingOutput.write(), но, похоже, ничего не найдено. У меня есть второй метод отдыха, который возвращает видео как полноценный объект, который работает.

Итак, есть ли кто-нибудь, что означает исключение, и что я могу улучшить? Благодаря!

+0

Первое понимание: деактивация LinkFilter в web.xml делает работу – Andreas

ответ

0

ОК, проблема в том, что на Jersey LinkFilter появляется исключение, обрабатывающее StreamingOutput. Мое решение заключалось в том, чтобы написать собственный LinkFilter, расширяющий существующий, как показано ниже:

public class LinkFilter extends com.sun.jersey.server.linking.LinkFilter { 

@Override 
public ContainerResponse filter(ContainerRequest request, ContainerResponse response){ 
    if (request.getPath(true).endsWith("mov")) 
    { 
     return response; 
    } 
    else 
    { 
     return super.filter(request, response); 
    } 
}} 
Смежные вопросы