2014-04-08 8 views
5

I migracji z web.xml całkowicie konfiguracja Java używając ResourceConfig z Jersey 2,7 ​​i wdrażanie na Tomcat 7. Po, że nie jestem w stanie dotrzeć do usług już przy użyciu tego samego adresy URL, których używałem przy użyciu metody web.xml. Nie rozumiem, w jaki sposób ResourceConfig wpływa na ścieżki.URL aplikacji Jersey wykorzystaniem ResourceConfig bez web.xml

Moje poprzednie web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
version="3.0"> 
<servlet> 
    <servlet-name>my.app</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.mypackage.resource,com.mypackage.providers</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.scanning.recursive</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value>org.glassfish.jersey.filter.LoggingFilter</param-value>   
    </init-param> 
    <init-param> 
     <param-name>org.glassfish.jersey.server.ServerProperties.BV_SEND_ERROR_IN_RESPONSE</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>my.app</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

Moja klasa konfiguracji, która rozciąga ResourceConfig jest:

MyRESTAPIApp.java

@ApplicationPath("") 
public class MyRESTAPIApp extends ResourceConfig{ 
    public MyRESTAPIApp() { 
     packages("com.mypackage.resource", "com.mypackage.providers"); 
     register(org.glassfish.jersey.filter.LoggingFilter.class); 
     property("jersey.config.beanValidation.enableOutputValidationErrorEntity.server", "true"); 
    } 
} 

jeden z moich zasobów jest:

FlagResource.java

@Path("my-resource") 
public class FlagResource { 
private MyService myService = new MyService(); 

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public FlagResource getFlagResource(@NotNull @QueryParam("level") Long level) { 
    FlagResource flagResource = myService.getFlagResource(level); 
    return flagResource; 
} 

}

Wojna że jestem generowania nazywa się: my.app.war.

Tomcat brała ścieżkę główną kontekstowe WWW z nazwą pliku wojennej, jak zwykle, ale nie wiem, czy to zmienia się podczas korzystania z konfiguracji opartej kodu Java.

GET http://localhost:8080/my.app/my-resource?level=1 

Zwraca 404

Odpowiedz

7

Właściwie to rozwiązać dodając „/” jako wartość adnotacją @ApplicationPath, myślałem, że to nie było konieczne, ponieważ dokumentacja API mówi po dla wartości @ApplicationPath param :

Defines the base URI for all resource URIs. A trailing '/' character will be automatically appended if one is not present. 

Sądziłem, że pozostawiając pusty ciąg będzie równoważna użyciu @ApplicationPath („/”), ale tak nie jest.

Tak to jest jak klasa konfiguracja wygląda teraz:

@ApplicationPath("/") 
public class MyRESTAPIApp extends ResourceConfig{ 
    public MyRESTAPIApp() { 
     packages("com.mypackage.resource", "com.mypackage.providers"); 
     register(org.glassfish.jersey.filter.LoggingFilter.class); 
     property("jersey.config.beanValidation.enableOutputValidationErrorEntity.server", "true"); 
    } 
} 
Powiązane problemy