Могу ли я заставить причал *не* включать заголовок Content-Length для модульного тестирования?

Я использую простой встроенный экземпляр Jetty в некоторых тестах JUnit.

Я хочу заставить Jetty возвращать ответ HTTP без заголовка Content-Length (как мы видели, это происходит с некоторыми запросами в дикой природе).

В настоящее время я реализую handle(...) из AbstractHandler в качестве основного способа захвата запросов, а затем, на основе параметров в URL-адресе, Jetty возвращает множество возможных ответов, хороших или нет.

response.setHeader("Content-Length", null); не работал, он по-прежнему возвращал допустимую длину содержимого на основе данных моего тела.


person David Parks    schedule 07.02.2013    source источник


Ответы (2)


Создайте javax.servlet.Filter, который обертывает < href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletResponseWrapper.html" rel="nofollow">HttpServletResponse с вашей реализацией, который предотвращает появление заголовка Content-Length устанавливается.

Обязательно реализуйте следующие методы в файле HttpServletResponseWrapper.

каждый из них может быть простым фрагментом кода, похожим на...

@Override
public void addHeader(String name, String val)
{
    if ( "Content-Length".equalsIgnoreCase(name) ) 
    {
        // Ignore content-length from servlets
        return;
    }
    super.addHeader(name,val);
}
person Joakim Erdfelt    schedule 07.02.2013

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

person JB Nizet    schedule 07.02.2013