2015-04-20 2 views
0

Я только начал создавать свое первое приложение-рестарт. Я следил за учебником по первому шагу. Я создал все файлы в точности, как указано, и сервер отлично работает, когда я запускаю его, но потом, когда я называю обслуживание через почтальона я получаю эту ошибку:RestLet: Исключено возникновение записи объекта ответа

Ошибка:

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 Класс:

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"; 
    } 

} 

и вот мой ар класс применения:

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; 
    } 

} 

Я не смог найти контент в Интернете относительно этой ошибки. Я заново создал проект с нуля, следуя инструкциям на тройник, и по-прежнему получил ту же ошибку. Я не уверен, что я делаю неправильно, и любая помощь будет очень признательна.

Update

да, я могу подтвердить, порт открыт и прослушивания

enter image description here

обновления Два

http://restlet.com/technical-resources/restlet-framework/guide/2.2/editions/jse/overview

Я теперь также попробовал maven и получил тот же результат.

Update Три

Я дал ему еще один шанс сегодня, и начал с нуля повторно загружать все, и это работает прекрасно в этот раз. Не совсем понятно, в чем была проблема, но, скорее всего, это было связано с использованием версии restlet.

+0

Можете ли вы подтвердить, что ваш порт открыт и прослушивает трафик? – ryekayo

+0

@ryekayo Да, я могу, у меня есть фотография, добавленная к вопросу. – Bawn

+0

Можете ли вы добавить ссылку учебника на свое следующее? – ryekayo

ответ

1

Я предлагаю вам использовать версию 2.3 Restlet с серверным коннектором типа Jetty (добавьте расширение org.restlet.ext.jetty в свой путь к классу).

Насколько я могу судить, вы сделали правильные вещи для реализации стартового приложения с помощью Restlet.

Можете ли вы дать нам точную версию Restlet, которую вы используете?

Вот пример файла pom.xml, что вы можете попробовать для вашего приложения:

<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> 
    <artifactId>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> 
      <artifactId>org.restlet</artifactId> 
      <version>${restlet-version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.restlet.jse</groupId> 
      <artifactId>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> 

Надеется, что это помогает, Тьерри

+0

Спасибо за помощь, я перезагрузил все, и теперь все работает отлично, поэтому у меня должна быть версия, которую я использовал. – Bawn

0

для меня он работал после того, как я добавил расширение org.restlet.ext .jetty в classpath, как было предложено. BTW Я использовал Gradle для создания проекта.