关于java:RestLet:写入响应实体时发生异常

RestLet: An exception occured writing the response entity

我刚刚开始创建我的第一个restlet应用程序。我遵循了restlet第一步教程。我已经完全按照规定创建了所有文件,并且在运行该文件时服务器运行正常,但是当我通过邮递员致电我的服务时,出现以下错误:

错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2015-04-20  20:39:53    0:0:0:0:0:0:0:1 -   -   8182    GET /firstSteps/hello   -   200 12  0   156 http://localhost:8182   Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36    -
An exception occured writing the response entity

java.lang.ClassCastException: org.restlet.data.Header cannot be cast to org.restlet.engine.header.Header
    at org.restlet.ext.simple.internal.SimpleCall.writeResponseHead(SimpleCall.java:304)
    at org.restlet.engine.adapter.ServerCall.sendResponse(ServerCall.java:450)
    at org.restlet.engine.adapter.ServerAdapter.commit(ServerAdapter.java:187)
    at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:144)
    at org.restlet.ext.simple.internal.SimpleContainer.handle(SimpleContainer.java:80)
    at org.simpleframework.http.core.Dispatcher.dispatch(Dispatcher.java:121)
    at org.simpleframework.http.core.Dispatcher.run(Dispatcher.java:103)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Error while handling an HTTP server call

这是我的代码:

Helloworld类别:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package smartRoom;


import org.restlet.resource.Get;
import org.restlet.resource.ServerResource;

/**
 * Resource which has only one representation.
 */

public class Helloworld extends ServerResource {


    @Get
    public String represent() {

        return"hello, world";
    }

}

这是我的应用程序类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package smartRoom;

import org.restlet.Application;
import org.restlet.Component;
import org.restlet.Restlet;
import org.restlet.data.Protocol;
import org.restlet.routing.Router;

public class HelloworldAppilcation extends Application {


    public static void main(String[] args) throws Exception {  
        // Create a new Component.  
        Component component = new Component();  

        // Add a new HTTP server listening on port 8182.  
        component.getServers().add(Protocol.HTTP, 8182);  

        // Attach the sample application.  
        component.getDefaultHost().attach("/firstSteps",  
                new HelloworldAppilcation());  

        // Start the component.  
        component.start();  
    }    



    /**
     * Creates a root Restlet that will receive all incoming calls.
     */

    @Override
    public synchronized Restlet createInboundRoot() {
        // Create a router Restlet that routes each call to a new instance of HelloWorldResource.
        Router router = new Router(getContext());

        // Defines only one route
        router.attach("/hello", Helloworld.class);

        return router;
    }

}

我无法在线找到有关此错误的任何内容。我按照发球台的指示从头开始重新创建了项目,但仍然遇到相同的错误。我不确定自己做错了什么,将不胜感激。

更新

是的,我可以确认端口已打开并且正在监听

enter


我建议您将2.3版本的Restlet与服务器连接器(如Jetty)一起使用(在类路径中添加扩展名org.restlet.ext.jetty)。

据我所知,您做了正确的事情以使用Restlet实现入门应用程序。

您能给我们您使用的Restlet的确切版本吗?

以下是文件pom.xml的示例,您可以为您的应用程序尝试该文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.restlet</groupId>
    restlet-starter</artifactId>
    <name>${project.artifactId}</name>
    <packaging>jar</packaging>
    <version>1.0.0-snapshot</version>

    <properties>
        <restlet-version>2.3.1</restlet-version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.restlet.jse</groupId>
            org.restlet</artifactId>
            <version>${restlet-version}</version>
        </dependency>

        <dependency>
            <groupId>org.restlet.jse</groupId>
            org.restlet.ext.jetty</artifactId>
            <version>${restlet-version}</version>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>maven-restlet</id>
            <name>Public online Restlet repository</name>
            <url>http://maven.restlet.com</url>
        </repository>
    </repositories>
</project>

希望它对您有帮助,
蒂埃里


对我来说,在我按照建议将扩展org.restlet.ext.jetty添加到classpath后,它起作用了。顺便说一句,我用Gradle构建项目。