繁体   English   中英

Restlet 2.3.5中如何诊断“ org.restlet.data.Parameter无法转换为org.restlet.data.Header”错误?

[英]How to diagnose “org.restlet.data.Parameter cannot be cast to org.restlet.data.Header” error in 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响应(内部服务器错误)。

我如何找出导致此错误的确切原因?

尝试在Restlet中添加自定义标题时,可能会导致这种情况。 初始化对应的映射时,可以使用Parameter的映射(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")); 

希望对您有帮助,蒂埃里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM