java - 如何诊断ReSTLet 2.3.5中的 "org.reSTLet.data.Parameter cannot be cast to org.reSTLet.data.Header"错误?

标签 java web-services rest restlet restlet-2.0

我在我的应用程序中使用 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 响应(内部服务器错误)。

我怎样才能找出到底是什么导致了这个错误?

最佳答案

这可能是在尝试在 ReSTLet 中添加自定义 header 时引起的。初始化对应的map时,可以使用Parameter的map(ReSTLet中的Series)来代替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")); 

希望对你有帮助 蒂埃里

关于java - 如何诊断ReSTLet 2.3.5中的 "org.reSTLet.data.Parameter cannot be cast to org.reSTLet.data.Header"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33985884/

相关文章:

java - 为什么相同算法的运行时间差异如此之大?

java - 如何使用 JOD Converter 打印到 PDF 来减少 Open Office Service 的响应时间?

web-services - Web 服务 ‘mandatory/optional’ 字段 : XSD Design time vs Runtime

node.js - 如何在 Hapi 中正确处理错误?

java - 将事件发布到单个微服务实例

java - Tomcat 8 过滤器以从 URL 中删除扩展名

iOS:从服务器请求少量数据的最简单、最快的方法?

PHP通过Webservice在moodle中创建用户

java.security.cert.CertificateException : No subject alternative names matching IP address

RESTful 设计 : return an empty object as a template for create new form