jax-rs tomcat mavenПервый сервер не нашел текущего представления для целевого ресурса или не хочет раскрывать, что он существует - PullRequest
0 голосов
/ 12 июня 2019

Я работаю с JAX-RS. У меня есть проект Maven и сервер Tomcat. Я Ява класс с пути / книги. Я также использую трикотаж 1.x. В консоли Tomcat я вижу развернутое приложение.

URL http://localhost:8080/rest-server работает нормально, но когда я выполнил URL

http://localhost:8080/rest-server/books

Я получаю ошибку

HTTP 404



The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

Это мой файл web.xml

В файле web.xml я определил

<url-pattern>/rest-server/*</url-pattern> 





 <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
      <display-name>rest-server</display-name>
    <servlet>
    <servlet-name>Test Jersey Service</servlet-name>
    <!-- For Jersey 1.x -->
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <!-- For Jersey 2.x -->
    <!--  <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> -->
    <init-param>
        <!-- For Jersey 1.x -->
    <param-name>com.sun.jersey.config.property.packages</param-name> 
    <!-- For Jersey 2.x -->
    <!--  <param-name>jersey.config.server.provider.packages</param-name> -->
    <param-value>com.readlearncode.dukesbookshop.restserver.rest</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>Test Jersey Service </servlet-name>
    <url-pattern>/rest-server/*</url-pattern>
    </servlet-mapping>
    </web-app>

Это мой pom.xml

В pom.xml

<name>rest-server</name>

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

    <parent>
        <groupId>com.readlearncode</groupId>
        <artifactId>dukesbookshop</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>rest-server</artifactId>
    <packaging>war</packaging>

    <name>rest-server</name>
    <url>http://localhost:8080</url>

    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <java.version>1.8</java.version>
        <javaee-api.version>7.0</javaee-api.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>${javaee-api.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!-- For Jersey 1.x -->
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-server</artifactId>
            <version>1.19</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-servlet</artifactId>
            <version>1.19</version>
        </dependency> 
    </dependencies>

    <build>
        <finalName>rest-server</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                 <configuration>
                    <url>http://localhost:8080/manager/text</url>
                    <path>/rest-server</path>
                    <!-- Set update to true to avoid exist war package can not be override error -->
                    <update>true</update>
                    <!-- Because deploy this maven project using plugin in pom so use the manager-script role user. -->
                    <username>tomcat</username>
                    <password>tomcat</password>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.0</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <compilerArguments>
                        <endorseddirs>${endorsed.dir}</endorseddirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.18.1</version>
                <configuration>
                    <skipTests>true</skipTests>
                    <systemPropertyVariables>
                        <!-- This is needed to tell the unit tests which profile we are running. -->
                    </systemPropertyVariables>
                </configuration>
            </plugin>
        </plugins>
    </build>


</project>

Это мой java сервис

В этом классе есть @Path / books

 package com.readlearncode.dukesbookshop.restserver.rest;

    import javax.ejb.EJB;
    import javax.ejb.Stateless;
    import javax.ws.rs.Consumes;
    import javax.ws.rs.GET;
    import javax.ws.rs.POST;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.GenericEntity;
    import javax.ws.rs.core.MediaType;
    import javax.ws.rs.core.Response;

    import java.util.List;
    import java.util.Optional;

    import javax.annotation.*;

    import com.readlearncode.dukesbookshop.restserver.domain.Book;
    import com.readlearncode.dukesbookshop.restserver.infrastructure.BookRepository;

    /**
     * @author Alex Theedom www.readlearncode.com
     * @version 1.0
     */
    @Stateless
    @Path("/books")
    public class BookResource {

        @EJB
        private BookRepository bookrepository;
        @GET
        @Produces(MediaType.APPLICATION_JSON)
        public Response getAllBooks() {

            List<Book> books = bookrepository.getAll();
            GenericEntity<List<Book>> bookWrapper =  new GenericEntity<List<Book>>(books) {};

            return Response.ok(bookWrapper).build();

        }

        @POST
        @Produces(MediaType.APPLICATION_JSON)
        @Consumes(MediaType.APPLICATION_JSON)
        public Response saveBook(final Book book) {
            Book persistedBook = bookrepository.saveBook(book);

            return Response.ok(persistedBook).build();

        }

        @GET
        @Produces(MediaType.APPLICATION_JSON)
        @Path("{isbn:\\d{9}[\\d:X]$}")
        public Response getBookbyIsbn(final @PathParam("isbn") String isbn) {

            Optional<Book> book = bookrepository.getByISBN(isbn);
            if (book.isPresent()) {
                return Response.ok(book.get()).build();
            }
            return Response.noContent().build();

        }
    }
...