Как диагностировать ошибку org.restlet.data.Parameter в org.restlet.data.Header в Restlet 2.3.5?

Я использую Restlet 2.3.5 в своем приложении. Когда вызывается обработчик запроса GET определенного ресурса сервера, я получаю следующую ошибку:

[10:26:04] [Restlet-860541310/WARN]: Nov 29, 2015 10:26:04 AM org.restlet.engine.adapter.ServerAdapter addResponseHeaders
WARNING: Exception intercepted while adding the response headers
java.lang.ClassCastException: org.restlet.data.Parameter cannot be cast to org.restlet.data.Header
    at org.restlet.engine.header.HeaderUtils.addExtensionHeaders(HeaderUtils.java:226)
    at org.restlet.engine.header.HeaderUtils.addResponseHeaders(HeaderUtils.java:653)
    at org.restlet.engine.adapter.ServerAdapter.addResponseHeaders(ServerAdapter.java:83)
    at org.restlet.engine.adapter.ServerAdapter.commit(ServerAdapter.java:184)
    at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:144)
    at org.restlet.engine.connector.HttpServerHelper$1.handle(HttpServerHelper.java:64)
    at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77)
    at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83)
    at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:80)
    at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:677)
    at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77)
    at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:649)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

Проблема в том, что это исключение выбрасывается вне кода, который я написал (я добавил операторы ведения журнала в свой серверный ресурс и, согласно им, исключение выбрасывается где-то еще).

В результате я получаю ответ 500 (внутренняя ошибка сервера), хотя мой серверный ресурс отправляет клиенту правильные данные.

Как я могу узнать, что именно вызывает эту ошибку?


person Mentiflectax    schedule 29.11.2015    source источник


Ответы (1)


Это может быть вызвано попыткой добавить пользовательские заголовки в Restlet. При инициализации соответствующей карты вы должны использовать карту (Series в Restlet) Parameter вместо Header...

Вы можете использовать что-то вроде этого:

Series<Header> responseHeaders = (Series<Header>) 
response.getAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS); 
if (responseHeaders == null) { 
    responseHeaders = new Series(Header.class); 
    response.getAttributes().put(
            HeaderConstants.ATTRIBUTE_HEADERS, responseHeaders); 
}
responseHeaders.add(new Header("X-MyHeader", "value")); 

Надеюсь, это поможет вам, Тьерри.

person Thierry Templier    schedule 30.11.2015