2015-09-14 4 views
3

У меня есть проект Maven 2 Maven.Tomcat 7 не сканирует аннотации при использовании Jersey 2

web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- This web.xml file is not required when using Servlet 3.0 container, 
see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html --> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <servlet> 
     <servlet-name>com.api.rest.ApplicationResource</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>   
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>com.api.rest.ApplicationResource</servlet-name> 
     <url-pattern>/api/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

pom.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/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.api</groupId> 
    <artifactId>GLI_API</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>GLI_API</name> 

    <build> 
     <finalName>GLI_API</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.5.1</version> 
       <inherited>true</inherited> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>org.glassfish.jersey</groupId> 
       <artifactId>jersey-bom</artifactId> 
       <version>${jersey.version}</version> 
       <type>pom</type> 
       <scope>import</scope> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 

    <dependencies> 
     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet</artifactId> 
      <!-- use the following artifactId if you don't need servlet 2.x compatibility --> 
      <!-- artifactId>jersey-container-servlet</artifactId --> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-moxy</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-multipart</artifactId> 
      <version>2.21</version> 
     </dependency> 


     <dependency> 
      <groupId>com.zaxxer</groupId> 
      <artifactId>HikariCP-java6</artifactId> 
      <version>2.2.5</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.36</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-codec</groupId> 
      <artifactId>commons-codec</artifactId> 
      <version>1.9</version> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-mapper-asl</artifactId> 
      <version>1.9.13</version> 
     </dependency> 
     <dependency> 
      <groupId>org.mindrot</groupId> 
      <artifactId>jbcrypt</artifactId> 
      <version>0.3m</version> 
     </dependency> 
     <dependency> 
      <groupId>net.sf.json-lib</groupId> 
      <artifactId>json-lib</artifactId> 
      <version>2.4</version> 
      <classifier>jdk15</classifier> 
     </dependency> 
     <dependency> 
      <groupId>com.cloudinary</groupId> 
      <artifactId>cloudinary-http44</artifactId> 
      <version>1.2.1</version> 
     </dependency> 
    </dependencies> 
    <properties> 
     <jersey.version>2.19</jersey.version> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
</project> 

Мой проект работает отлично при работе на местном уровне. Но это не работает, когда я развертываю его на удаленном сервере.

Итак, что происходит, в основном, что WAR развертывается правильно, но в Catalina.out действительно нет ошибок или предупреждений. Я получаю 404 на каждой из моих определенных конечных точек.

catalina.out:

Sep 14, 2015 2:03:00 PM org.apache.catalina.startup.HostConfig deployWAR 
INFO: Deploying web application archive /var/lib/tomcat7/webapps/GLI_API.war 
Sep 14, 2015 2:04:17 PM org.apache.catalina.startup.HostConfig deployWAR 
INFO: Deploying web application archive /var/lib/tomcat7/webapps/ICDS_API.war 
Sep 14, 2015 2:04:23 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory /var/lib/tomcat7/webapps/ROOT 
Sep 14, 2015 2:04:23 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["http-bio-8080"] 
Sep 14, 2015 2:04:23 PM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 84867 ms 

ApplicationResource:

package com.api.rest; 

import java.util.logging.Logger; 


import org.glassfish.jersey.filter.LoggingFilter; 
import org.glassfish.jersey.server.ResourceConfig; 
import org.glassfish.jersey.server.ServerProperties; 
import com.api.provider.ResponseCorsFilter; 
import org.glassfish.jersey.media.multipart.MultiPartFeature; 


public class ApplicationResource extends ResourceConfig { 

    private static final Logger LOGGER = null; 


    public ApplicationResource() { 
     // Register resources and providers using package-scanning. 
     packages("com.api"); 
     System.out.println("started"); 

     register(MultiPartFeature.class); 

     // Register my custom provider - not needed if it's in my.package. 
     register(ResponseCorsFilter.class); 
     // Register an instance of LoggingFilter. 
     register(new LoggingFilter(LOGGER, true)); 

     // Enable Tracing support. 
     property(ServerProperties.TRACING, "ALL"); 
    } 
} 

Что может быть проблема? Я разработал на tomcat8 (но не помню что-то специально) и развернулся на tomcat7. Это может быть проблема?


Эта конечная точка должна быть достижима: http://54.228.220.152:8080/GLI_API/api/item

Другой API работает отлично - так что сервер в целом работает.

Также - если у вас нет окончательного ответа, я бы очень признателен, если вы можете указать мне на файлы/каталоги, чтобы посмотреть, так как я не получаю никаких ошибок.

+0

Вы можете установить <нагрузки на старте> 1 до 0 или -1? – Stefan

+0

Можете ли вы вставить свой код контроллера API? –

+0

Возможно, этот пост может помочь - http://stackoverflow.com/questions/17616708/rest-service-errors-with-resource-is-not-available-glassfish-4-0-jax-rs-2-0 –

ответ

3

Вы можете попытаться включить сканирование аннотаций, установив этот параметр инициализации для сервлета:

<servlet> 
... 
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 

<init-param> 
    <param-name>jersey.config.server.provider.packages</param-name> 
    <param-value>com.yourproject.packageWhereYourResourcesAre</param-value> 
</init-param> 
... 
</servlet> 

Update

Кажется, вы собрали против Java 8, в то время как Tomcat работает с Java 7? Попробуйте это:

<configuration> 
    <source>1.7</source> 
    <target>1.7</target> 
</configuration> 

Вы также можете обновить ваш web.xml до 3,0:

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
+0

Огромное спасибо - это помогло. Я получаю неподдерживаемую основную второстепенную версию теперь, где я могу работать. Я думал, что у меня это в моем контроллере: пакеты («com.api»); В чем разница?Я иногда очень смущен между web.xml и моим ApplicationController –

+0

Результат: Я скомпилирован в JDK 1.8, но не имею его на сервере - ouch :( –

Смежные вопросы