web-dev-qa-db-ja.com

Jersey RESTful WebサービスのGradleセットアップ

私は、ジャージライブラリを使用してRESTful Webサービスのgradleプロジェクトを作成することにこだわっています。プロジェクト構成は、jettyアプリケーションサーバー内でサービスを起動できる必要があります。私はすでにリソースを見つけました: https://github.com/ziroby/jetty-gradle-hello-world

このソリューションの私の問題は、ジャージの古いバージョンを使用していることです。少なくともバージョン2が必要です(最新の2.14を推奨)。 Maven Centralで新しいバージョンを検索しようとしましたが、バージョン2では多くのアーティファクト名が変更され、正しく構成できません。

編集:私のプロジェクトでは特に桟橋サーバーは必要ありません。アプリケーションのテストとデバッグに適した任意のアプリケーションサーバーを使用できます。本番でも桟橋を使用しているので、桟橋を使用するのは良いことです。

[〜#〜] edit [〜#〜]:(by peeskillet)-リンクからのコード

建てる

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()
    }
}

テスト

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

資源

@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

最初

現在持っているすべてのJersey依存関係を取り除きます

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'    |
    +---------------------------------------------------+
}

以下は、基本機能を取得するために必要なonlyのみです

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' */
}

第二

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>

三番

テスト

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

これは、リンクされたプロジェクトのクローンでテストされています。変更のみが上に示されています。

その他のリソース:


更新

JSONサポート用

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

動作するために追加の構成は必要ありません。

45
Paul Samsotha