Restlet createInboundRoot вызывается, когда приложение запускается как Eclipse/J2SE, но не как maven jetty:run-war

У меня есть простое приложение Restlet, которое отлично работает при запуске в качестве приложения J2SE из Eclipse, но когда оно упаковано как война и запускается с помощью «mvn jetty: run-war» (jetty-maven-plugin), метод Application.createInboundRoot не get вызывается, и поэтому никакие маршруты не настроены.

Соответствующее сообщение об ошибке выглядит так:

WARNING: A filter was executed without a next Restlet attached to it.

Из вывода консоли видно, что в случае J2SE вызывается ModspaceRestletApplication.createInboundRoot, а в случае J2EE этот метод не вызывается. Почему нет?

Запуск от имени J2SE (Eclipse->Запуск от имени->Приложение Java).

Протестируйте, нажав на URL:

http://localhost:8182/modspace/users/fred/entries

Возвращается правильно сформированный ответ, а вывод консоли:

In ModspaceRestApplication.ctor
Mar 25, 2014 2:41:15 PM org.restlet.engine.http.connector.HttpServerHelper start
INFO: Starting the internal HTTP server on port 8182
In ModspaceRestApplication.createInboundRoot

Запустите как войну из командной строки, используя «mvn jetty: run-war».

Протестируйте, нажав URL:

http://localhost:8080/modspace/users/fred/entries

Браузер видит

The server encountered an unexpected condition which prevented it from fulfilling the request

и вывод консоли:

2014-03-25 14:42:27.125:INFO:oejs.Server:main: jetty-9.1.0.M0
2014-03-25 14:42:31.507:INFO:oejsh.ContextHandler:main: Started o.e.j.m.p.JettyWebAppContext@6307c51a{/,file:/Users/wilma/eclipse-workspace/modspace-rest/target/modspace-rest-0.0.1-SNAPSHOT/,AVAILABLE}{/Users/wilma/eclipse-workspace/modspace-rest/target/modspace-rest-0.0.1-SNAPSHOT.war}
2014-03-25 14:42:31.509:WARN:oejsh.RequestLogHandler:main: !RequestLog
2014-03-25 14:42:32.004:INFO:oejs.ServerConnector:main: Started ServerConnector@459c745a{HTTP/1.1}{0.0.0.0:8080}
[INFO] Started Jetty Server
In ModspaceRestApplication.ctor
2014-03-25 14:42:50.964:INFO:/:qtp721530251-44: RestletServlet: [Restlet] Attaching application: com.merck.modspace.rest.ModspaceRestletApplication@74e1d431 to URI: /modspace
Mar 25, 2014 2:42:50 PM org.restlet.routing.Filter doHandle
WARNING: A filter was executed without a next Restlet attached to it.
Mar 25, 2014 2:42:51 PM org.restlet.engine.log.LogFilter afterHandle
INFO: 2014-03-25    14:42:50    0:0:0:0:0:0:0:1 -   0:0:0:0:0:0:0:1 8080    GET  /modspace/users/fred/entries   -   500 365 -   20  http://localhost:8080     Mozilla/5.0 (Macintosh; Intel Mac OS X 10
<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>com.merck.modspace.rest</groupId>
  <artifactId>modspace-rest</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>ModSpaceWebService</name>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <repositories>
    <repository>
      <id>maven-restlet</id>
      <name>Restlet framework repository</name>
      <url>http://maven.restlet.org</url>
    </repository>
    <repository>
      <id>mvnrepository</id>
      <url>https://mvnrepository.com//</url>
    </repository>
  </repositories>
  <dependencies>
    <dependency>
      <groupId>org.restlet.jse</groupId>
      <artifactId>org.restlet</artifactId>
      <version>2.0.0</version>
    </dependency>
    <dependency>
      <groupId>org.restlet.jee</groupId>
      <artifactId>org.restlet</artifactId>
      <version>2.0.0</version>
    </dependency>
    <dependency>
      <groupId>org.restlet</groupId>
      <artifactId>org.restlet.ext.servlet</artifactId>
      <version>2.0-M3</version>
    </dependency>
    <dependency>
      <groupId>com.oracle</groupId>
      <artifactId>ojdbc6</artifactId>
      <version>11.2.0</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>
  </dependencies>
  <build>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1.1</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.0.2</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
          <compilerArgument>-Xlint:all</compilerArgument>
          <showWarnings>true</showWarnings>
          <showDeprecation>true</showDeprecation>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>9.1.0.M0</version>
      </plugin>
    </plugins>
  </build>
  <packaging>war</packaging>
</project>
2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36 -

Инструменты:

Apache Maven 3.0.5
Java version: 1.7.0_51

веб.xml:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app id="ModspaceWS" version="2.4"  
            xmlns="http://java.sun.com/xml/ns/j2ee"  
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
            xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee  
                 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
   <display-name>Modspace RESTlet web service</display-name>  

   <!-- Restlet adapter -->  
   <servlet>  
      <servlet-name>RestletServlet</servlet-name>  
      <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
      <init-param>
            <!-- Application class name -->
            <param-name>org.restlet.application</param-name>
            <param-value>com.merck.modspace.rest.ModspaceRestletApplication</param-value>
      </init-param>
   </servlet>  

   <!-- Catch all requests -->  
   <servlet-mapping>  
      <servlet-name>RestletServlet</servlet-name>  
      <url-pattern>/modspace/*</url-pattern>  
   </servlet-mapping>  
</web-app> 

пом.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>com.merck.modspace.rest</groupId>
  <artifactId>modspace-rest</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>ModSpaceWebService</name>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <repositories>
    <repository>
      <id>maven-restlet</id>
      <name>Restlet framework repository</name>
      <url>http://maven.restlet.org</url>
    </repository>
    <repository>
      <id>mvnrepository</id>
      <url>https://mvnrepository.com//</url>
    </repository>
  </repositories>
  <dependencies>
    <dependency>
      <groupId>org.restlet.jse</groupId>
      <artifactId>org.restlet</artifactId>
      <version>2.0.0</version>
    </dependency>
    <dependency>
      <groupId>org.restlet.jee</groupId>
      <artifactId>org.restlet</artifactId>
      <version>2.0.0</version>
    </dependency>
    <dependency>
      <groupId>org.restlet</groupId>
      <artifactId>org.restlet.ext.servlet</artifactId>
      <version>2.0-M3</version>
    </dependency>
    <dependency>
      <groupId>com.oracle</groupId>
      <artifactId>ojdbc6</artifactId>
      <version>11.2.0</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>
  </dependencies>
  <build>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1.1</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.0.2</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
          <compilerArgument>-Xlint:all</compilerArgument>
          <showWarnings>true</showWarnings>
          <showDeprecation>true</showDeprecation>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>9.1.0.M0</version>
      </plugin>
    </plugins>
  </build>
  <packaging>war</packaging>
</project>

Класс приложения Restlet:

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

public class ModspaceRestletApplication extends Application {

    Router router;

    public ModspaceRestletApplication() {
        System.out.println("In ModspaceRestApplication.ctor");
        //this.setInboundRoot(this.createInboundRoot());
    }

    @Override
    public synchronized Restlet createInboundRoot() {
        // Create a root router
        router = new Router(getContext());

        System.out.println("In ModspaceRestApplication.createInboundRoot");

        // Attach the handlers to the root router
        router.attach("/users/{user}", UserResource.class);
        router.attach("/users/{user}/entries", ModelResource.class);

        return router;
    }

    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {

        // Create a new Restlet component and add a HTTP server connector to it
        Component component = new Component();
        component.getServers().add(Protocol.HTTP, 8182);

        // Then attach it to the local host
        component.getDefaultHost().attach("/modspace", new ModspaceRestletApplication());

        // Now, let's start the component!
        // Note that the HTTP server connector is also automatically started.
        component.start();
    }
}

person Jam560    schedule 25.03.2014    source источник


Ответы (1)


Теперь это работает. Я считаю, что проблема была из-за:

<dependency>
  <groupId>org.restlet</groupId>
  <artifactId>org.restlet.ext.servlet</artifactId>
  <version>2.0-M3</version>
</dependency>

что должно быть:

<dependency>
  <groupId>org.restlet.jee</groupId>
  <artifactId>org.restlet.ext.servlet</artifactId>
  <version>2.2.0</version>
</dependency>

Обратите внимание, что идентификатор группы неверен, а версия устарела.

person Jam560    schedule 02.04.2014