web-dev-qa-db-fra.com

Configuration de Gradle du service Web Jersey RESTful

Je suis coincé avec la création d'un projet Gradle pour un service Web RESTful en utilisant la bibliothèque de maillots. La configuration du projet doit être capable de lancer le service à l'intérieur d'un serveur d'applications de jetée. J'ai déjà trouvé une ressource: https://github.com/ziroby/jetty-gradle-hello-world

Mon problème avec cette solution est qu'elle utilise une version obsolète du maillot. J'ai besoin d'au moins la version 2 (la dernière version 2.14 préférée). J'ai essayé de rechercher de nouvelles versions sur maven central, mais dans la version 2, beaucoup de noms d'artefacts ont changé et je ne suis pas en mesure de le configurer correctement.

Edit: je n'ai pas spécifiquement besoin d'un serveur de jetée dans mon projet. Il peut s'agir de n'importe quel serveur d'applications, ce qui convient pour tester et déboguer mon application. J'utilise Jetty également en production, donc ce serait bien d'utiliser Jetty.

[~ # ~] modifier [~ # ~] : (par peeskillet) - Code du lien

construire

apply plugin: 'Java'
apply plugin: 'jetty'

repositories {
    mavenCentral()
}
dependencies {
    testCompile 'junit:junit:4.11'
    testCompile 'org.hamcrest:hamcrest-all:1.3'
    testCompile 'com.Sun.jersey:jersey-client:1.17.1'
    testCompile 'com.Sun.jersey:jersey-core:1.17.1'
    compile 'com.Sun.jersey:jersey-core:1.17.1'
    compile 'com.Sun.jersey:jersey-server:1.17.1'
    compile 'com.Sun.jersey:jersey-servlet:1.17.1'
}
test {
    exclude '**/*IntegrationTest*'
}

task integrationTest(type: Test) {
    include '**/*IntegrationTest*'
    doFirst {
        jettyRun.httpPort = 8080    // Port for test
        jettyRun.daemon = true
        jettyRun.execute()
    }
    doLast {
        jettyStop.stopPort = 8091   // Port for stop signal
        jettyStop.stopKey = 'stopKey'
        jettyStop.execute()
    }
}

Tester

public class HelloIntegrationTest {
    private static String HELLO_URL = "http://localhost:8080/hello";

    @Test
    public void testHello() throws Exception {
        Client client = Client.create();
        WebResource webResource = client.resource(HELLO_URL);
        String response = webResource.get(String.class);

        assertThat(response, is("Hello, World!"));
    }
}

Ressource

@Path("/hello")
public class HelloWebapp {
    private static HelloWorldService helloWorldService = new HelloWorldService();

    @GET()
    public String hello() {
        return helloWorldService.sayHello();
    }
}

web.xml

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://Java.Sun.com/dtd/web-app_2_3.dtd" >
<web-app>
  <display-name>Jetty Gradle Hello World</display-name>
  <servlet>
    <servlet-name>HelloWorldServlet</servlet-name>
    <servlet-class>com.Sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.Sun.jersey.config.property.packages</param-name>
      <param-value>com.ziroby.hello.webapp</param-value>
    </init-param>
    <!-- <init-param> -->
    <!-- <param-name>com.Sun.jersey.api.json.POJOMappingFeature</param-name> -->
    <!-- <param-value>true</param-value> -->
    <!-- </init-param> -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloWorldServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>
20
ruabmbua

Premier

Débarrassez-vous de toutes les dépendances de Jersey que vous avez actuellement

dependencies {
    testCompile 'junit:junit:4.11'
    testCompile 'org.hamcrest:hamcrest-all:1.3'
    +------------- ======= JUNK ======= ----------------+
    | testCompile 'com.Sun.jersey:jersey-client:1.17.1' |
    | compile 'com.Sun.jersey:jersey-core:1.17.1'       |
    | compile 'com.Sun.jersey:jersey-server:1.17.1'     |
    | compile 'com.Sun.jersey:jersey-servlet:1.17.1'    |
    +---------------------------------------------------+
}

Ci-dessous est le seulement seul dont vous avez besoin pour obtenir les fonctionnalités de base

dependencies {
    testCompile 'junit:junit:4.11'
    testCompile 'org.hamcrest:hamcrest-all:1.3'
   +-------------------- ========= GOLDEN ======== -------------------------+
   | compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.14'|
   +------------------------------------------------------------------------+
   /* UPDATE */
   /* Starting Jersey version 2.26, you will also need the following */
   /* compile 'org.glassfish.jersey.inject:jersey-hk2:2.26' */
}

Seconde

web.xml

<web-app>
    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>
                org.glassfish.jersey.servlet.ServletContainer
        </servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.ziroby.hello.webapp</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

Troisième

Tester

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import org.junit.Test;

public class HelloIntegrationTest {

    private static String HELLO_URL = "http://localhost:8080/hello";

    @Test
    public void testHello() throws Exception {
        Client client = ClientBuilder.newClient();
        WebTarget webTarget = client.target(HELLO_URL);
        String response = webTarget.request().get(String.class);
        System.out.println(response);
        assertThat(response, is("Hello, World!"));
    }
}

Cela a été testé avec un clone du projet lié. Seuls les changements sont indiqués ci-dessus.

Autres ressources:


Mise à jour

Pour l'utilisation du support JSON

org.glassfish.jersey.media:jersey-media-json-jackson:2.14

Aucune configuration supplémentaire n'est requise pour que cela fonctionne.

45
Paul Samsotha