2015-09-14 45 views
3

我有一個Jersey 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> 
... 
<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> 

更新

看來你已經對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

非常感謝 - 這有助於我獲得不受支持的主要次要版本現在我可以在哪裏工作 我以爲我在我的控制器中有這個:packages(「com.api」); 有什麼區別?我有時非常困惑web.xml和我的ApplicationController –

+0

結果:我編譯在JDK 1.8中,但沒有在服務器上 - ouch :( –