Не могу начать с джерси руководство пользователя

Помоги мне, пожалуйста. Я долго пытался запустить пример приложения rest, но не могу этого сделать. Используя руководство пользователя Джерси, я застрял с ним. Вот пример:

package com.example;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;

import org.glassfish.grizzly.http.server.HttpServer;

...

public class MyResourceTest {

    private HttpServer server;
    private WebTarget target;

    @Before
    public void setUp() throws Exception {
        server = Main.startServer();

        Client c = ClientBuilder.newClient();
        target = c.target(Main.BASE_URI);
    }

    @After
    public void tearDown() throws Exception {
        server.stop();
    }

    /**
     * Test to see that the message "Got it!" is sent in the response.
     */
    @Test
    public void testGetIt() {
        String responseMsg = target.path("myresource").request().get(String.class);
        assertEquals("Got it!", responseMsg);
    }
}

но я не могу понять, что такое класс Main с методом startServer()? Здесь нет импорта для этого класса.

3 ответа

Решение

Вот ссылка на основной класс. Main.startServer() выглядит так:

/**
 * Starts Grizzly HTTP server exposing JAX-RS resources defined in this application.
 * @return Grizzly HTTP server.
 */
public static HttpServer startServer() {
    // create a resource config that scans for JAX-RS resources and providers
    // in $package package
    final ResourceConfig rc = new ResourceConfig().packages("$package");

    // create and start a new instance of grizzly http server
    // exposing the Jersey application at BASE_URI
    return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
}

Если вы прочитаете параграф над этим кодом в руководстве, это объясняет, что пример в руководстве выделяет только часть реального кода. Полный код находится в пакете com.example как класс MyResource.

Последним фрагментом кода, сгенерированным в этом каркасном проекте, является класс модульного теста MyResourceTest, который находится в том же пакете com.example, что и класс MyResource, однако этот класс модульного теста помещается в исходный каталог тестового проекта проекта maven src. /test/java (некоторые комментарии кода и импорт JUnit были исключены для краткости):

Вы пропустили всю главу 1.1. Создание нового проекта из Maven Archetype, который включает в себя выполнение команды:

mvn архетип: генерировать -DarchetypeArtifactId=jersey-quickstart-grizzly2 \ -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \ -DgroupId=com.example -DartifactId= простой сервис -Dpackage = com.extype \Dar 2,27

Если у вас уже есть проект, просто запустите его в новом отдельном каталоге, подождите, пока генератор Maven не завершит свою магию, а затем скопируйте зависимости копирования, помещенные в pom.xml.

Я взял только эти два ниже. Не забывайте добавлять туда маркеры тестовой области. В сочетании с ранее добавленной зависимостью grizzly-http-server-jaxws мои полученные записи POM выглядят следующим образом:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey</groupId>
            <artifactId>jersey-bom</artifactId>
            <version>2.27</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
  <dependency>
      <groupId>org.glassfish.jersey.containers</groupId>
      <artifactId>jersey-container-grizzly2-http</artifactId>
      <scope>test</scope>
  </dependency>
  <dependency>
      <groupId>org.glassfish.jersey.inject</groupId>
      <artifactId>jersey-hk2</artifactId>
      <scope>test</scope>
  </dependency>
</dependencies>

и скопируйте класс Main.java, который генерируется в дереве каталогов src/main/java, которое зависит от значений, которые вы использовали в генераторе в параметре -Dpackage.

Игнорируйте класс MyResource, который также существует, если вы поместите правильное значение пакета в указанную выше переменную, ваши собственные цели API ресурса REST должны быть использованы и протестированы.

Другие вопросы по тегам