Montag, Januar 27, 2020

Upgrade JAX-RS 1.1 JAX-RS 2.0 Hilfe brauchen web.xml Bereitstellung

Ich arbeite an einem Projekt, um ein upgrade von meinem bestehenden web-Applikation entwickelt, die in JAX-RS 1.12 und läuft im tomcat 7. Jetzt bin ich ein „Upgrade“ zu JAX-RS2.0. Während der tomcat-server-Start-meine Ressourcen sind nicht immer geladen ?

Unten sind die details.
Hinzugefügt unten Gläser für JAX-RS 2.0

jersey-client-2.0-m07-1
jersey-common-2.0-m07-1
jersey-container-servlet-2.0-m07-1
jersey-container-servlet-core-2.0-m07-1
jersey-server-2.0-m07-1
javax.ws.rs-api-2.0-m10
osgi-resource-locator-1.0.1
javax.Spritzen-2.1.28
javax.Spritzen-1
hk2-utils-2.1.28
hk2-locator-2.1.28
hk2-api-2.1.28
Guave-13.0
cglib-2.1.28
asm-alle-neu verpackt-2.1.28

In 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_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>ConfigLiteJersey2</display-name>

<!-- Jersey Servlet to Support JAXRS Services -->
<servlet>
    <servlet-name>ConfigLiteServices</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>        
     <init-param>
        <param-name>javax.ws.rs.core.Application</param-name>
        <param-value>com.cisco.config.resource</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
     <servlet-mapping>
    <servlet-name>ConfigLiteServices</servlet-name>
    <url-pattern>/config/*</url-pattern>
</servlet-mapping>

Meine Ressource-Datei

@Path("/configset")
public class ConfigSetResource {   
    @POST
@Path("/id{configsetid: (/[^/]+?)?}")
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public ConfigSetResponse getConfigSet(@PathParam("configsetid") String sConfigSetId)    throws    Exception {
     //Code
    }
    }

Versuch den Zugriff auf meine Ressourcen-API durch die URL unten
IP-Adresse:8080/ConfigLiteJersey2/config/configset/id

Erste HTTP-status 404 not found.

Sieht aus wie ich bin nicht zu geben richtige servletclass mapping in web.xml. Bitte teilen Sie Ihre Gedanken auf diese

InformationsquelleAutor Aswani | 2012-09-26

4 Kommentare

  1. 2

    Wenn Sie möchten, Jersey, Scannen Sie Ihr Paket für die Ressourcen, ändern Sie Ihr param-name:

    <param-name>jersey.config.server.provider.packages</param-name>
  2. 1

    Ich bin mit Jersey 2.15, und unten ist die funktionierende Konfiguration:

    <servlet>
        <servlet-name>emper</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.le.config.ResourceConfiguration</param-value>
        </init-param>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.le.exceptions</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>emper</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet>  

    Tolle Sache, die ich erfuhr, war, können wir register-provider Klasse wie Globalen Exception-handler. daher com.le.exceptions enthalten, bei meinem provider-Klasse, die implementiert ExceptionMapper zur Verfügung gestellt von Jersey.

    Andere Sache, die Wir brauchen zu erstellen eine Unterklasse org.glassfish.jersey.server.ResourceConfig und registrieren es als unsere jax-rs Anwendung.

  3. 0

    Wenn Sie mit der Servlet-version 3.0 würde ich vorschlagen, nach dem Vorbild in den jersey-Handbuch hier: https://jersey.java.net/documentation/latest/deployment.html#deployment.servlet.3.descriptor

    Erstellen Sie eine Klasse, die javax.ws.rs.core.Anwendung sagen, org.foo.rest.ConfigLiteApplication. Dann stellen Sie Ihre web.xml wie folgt (übernommen aus der jersey-Seite etwas passend zu Ihrem Beispiel):

    <web-app>
        <servlet>
            <servlet-name>org.foo.rest.ConfigLiteApplication</servlet-name>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>org.foo.rest.ConfigLiteApplication</servlet-name>
            <url-pattern>/config/*</url-pattern>
        </servlet-mapping>
    </web-app>

    Sollte diese Arbeit auf die beiden JAX-RS 1.1 und JAX-RS 2.0 und neutral sein sollte, um die jersey-version, wie Sie nie brauchen, um eine jersey-Klassen. Die ConfigLiteApplication Klasse laden soll, die Ressourcen, die Sie einschließen möchten, zum Beispiel adaptiert von http://tomee.apache.org/examples-trunk/rest-example-with-application/README.html:

    @ApplicationPath("/config")
    public class ConfigLiteApplication extends Application {
        public Set<Class<?>> getClasses() {
            return new HashSet<Class<?>>(Arrays.asList(ConfigSetResource.class));
        }
    }

    Einer modernen IDE werden wahrscheinlich in der Lage, zu verwalten, diese Klasse für Sie.

    Auch, wenn ich du wäre würde ich vorsichtig sein, zu überprüfen, in diesem regulären Ausdruck entsprechen, wenn Sie in der Hoffnung, mit /id

    @Path("/id{configsetid: (/[^/]+?)?}")

    Ich würde aufteilen dieser in mehrere Funktionen oder sonst arbeiten, um zu versuchen und vermeiden Sie diese Art von regex. Zum Beispiel

    @POST
    @Path("/id")
    public ConfigSetResponse getConfigSet() {
         return this.getConfigSet(null);
    }
    @POST
    @Path("/id/{configsetid}")
    public ConfigSetResponse getConfigSet(@PathParam("configsetid") String sConfigSetId) {
         //Code
    }
  4. 0

    Nach langer Google-Suche, Konfigurierte ich mir auf diese Weise, und es funktionierte perfekt

    bauen.gradle sollte so etwas wie dieses

    compile 'log4j:log4j:1.2.7'
    compile 'org.slf4j:slf4j-log4j12:1.6.6'
    compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.6'

    ApplicationConfig.java die Datei sollte so etwas wie dieses

    @ApplicationPath("/app")
    public class ApplicationConfig extends ResourceConfig {
    
        public ApplicationConfig() {
            packages("com.flexisaf.resources");
    
        }
    }

    Ihre web.xml die Datei sollte so etwas wie dieses

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
        <!-- Default page to serve -->
    
        <session-config>
            <session-timeout>30</session-timeout>
        </session-config>
        <display-name>SAFHRMS</display-name>
        <servlet>
            <servlet-name>com.flexisaf.safhrms.client.config.ApplicationConfig</servlet-name>
    
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>com.flexisaf.safhrms.client.config.ApplicationConfig</servlet-name>
            <url-pattern>/app/*</url-pattern>
        </servlet-mapping>
    
        <welcome-file-list>
            <welcome-file>safhrms.jsp</welcome-file>
        </welcome-file-list>
    
    </web-app>

    Dies meine Probleme löst..Danke

Kostenlose Online-Tests