Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    440

    Errore 404, RESTful Web Service in Java con Jersey...eppure ho seguito la vostra guida!

    Ciao,

    ho seguito la vostra guida https://www.html.it/pag/62521/restfu...est-e-oggetti/ ma qualcosa non funziona perché se vado su http://localhost:8080/api/test/eleonora mi ritorna 404.

    ATTENZIONE: giorni fa ero riuscito a farlo funzionare in seguito ad una modifica della riga di codice package(... in ExampleApplication.java ma ora non riesco più a farlo funzionare in seguito a delle modifiche.

    Ho provato con tutti i possibili package, ma niente: può essere che sbagli di nuovo qui?
    Uso Netbeans come IDE, come posso trovare il package sottoforma di stringa da inserire in quel metodo?

    Di seguito incollo il codice:

    pom.xml
    codice:
    <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.company</groupId>
        <artifactId>affittagram</artifactId>
        <packaging>war</packaging>
        <version>1.0-SNAPSHOT</version>
        <name>Affittagram</name>
        <url>http://maven.apache.org</url>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>3.8.1</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.containers</groupId>
                <artifactId>jersey-container-servlet</artifactId>
                <version>2.23.2</version>
            </dependency>
            <dependency>
                <groupId>javax.ws.rs</groupId>
                <artifactId>javax.ws.rs-api</artifactId>
                <version>2.0.1</version>
                <type>jar</type>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-agroal</artifactId>
                <version>5.3.15.Final</version>
                <type>pom</type>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.core</groupId>
                <artifactId>jersey-client</artifactId>
                <version>2.23.2</version>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jersey.media</groupId>
                <artifactId>jersey-media-json-jackson</artifactId>
                <version>2.23.2</version>
            </dependency>
        </dependencies>
        <build>
            <finalName>Affittagram</finalName>
            <plugins>
                <plugin>
                    <groupId>org.eclipse.jetty</groupId>
                    <artifactId>jetty-maven-plugin</artifactId>
                    <version>9.4.26.v20200117</version>
                    <configuration>
                        <scanIntervalSeconds>10</scanIntervalSeconds>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.3</version>
                    <configuration>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.5.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    ExampleApplication.java
    codice:
    import javax.ws.rs.ApplicationPath;
    import org.glassfish.jersey.server.ResourceConfig;
    
    
    @ApplicationPath("api")
    public class ExampleApplication extends ResourceConfig {
        public ExampleApplication() {
            packages("com.company.affittagram");
        }
    }
    Test.java
    codice:
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    
    
    @Path("test")
    public class Test {
    
    
        @GET
        @Path("{name}")
        public String test(@PathParam("name") String name) {
            return "Ciao " + name.toUpperCase();
        }
    
    
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Chiariamo subito una cosa. Se applichi la seguente struttura del progetto:
    codice:
    una_qualunque_directory\
        affittagram\
            pom.xml
            src\
                main\
                    java\
                        com\
                            company\
                                affittagram\
                                    ExampleApplication.java
                                    Test.java

    E nei due sorgenti Java metti all'inizio la dichiarazione

    package com.company.affittagram;

    Allora se da prompt da affittagram\ lanci (presupponendo che JDK e Maven siano ok):

    mvn jetty:run

    poi l'url http://localhost:8080/api/test/eleonora funziona correttamente (puoi provarlo da un qualunque browser).


    Detto questo, nel pom.xml ci sono comunque cose che mi paiono superflue. Ad esempio il hibernate-agroal a che serve nell'esempio? A niente mi pare. Nota: Agroal è un connection pool per i data-source in JDBC.

    E sappi che l'utilizzo di ResourceConfig è una cosa specifica di Jersey ed è non-standard rispetto alle specifiche JAX-RS.
    Ultima modifica di andbin; 29-01-2020 a 10:34
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    440
    A dire il vero nell'albero delle directory che hai disegnato tu mi mancano le cartelle com, company e affittagram; infatti nella classe ExampleApplication.java non ho "package com.company.affittagram" perché nel default package, classe figlia della cartella java. Significa che l'argomento del metodo "package("")" debba restare vuoto? Anche vuoto non funziona.

    (Hibernate l'ho agiunto per un prossimo utilizzo; l'ho tolto ma non funziona comunque non influiva)

    P.S. ho provato a ricreare la struttura delle tue cartelle, quindi da avere sulla prima riga della classe ExampleApplication.java e Test.java "package com.company.affittagram" ma ancora errore 404, non capisco cosa potrei sbagliare!
    Ultima modifica di andbaz; 29-01-2020 a 14:00

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da andbaz Visualizza il messaggio
    A dire il vero nell'albero delle directory che hai disegnato tu mi mancano le cartelle com, company e affittagram; infatti nella classe ExampleApplication.java non ho "package com.company.affittagram" perché nel default package, classe figlia della cartella java. Significa che l'argomento del metodo "package("")" debba restare vuoto? Anche vuoto non funziona.
    Primo: nelle web application Java generalmente è sempre bene usare i package.

    Secondo: da una mia prova veloce fatta ora, pare che packages(""); funziona, anche spostando le classi nel default package.

    Quote Originariamente inviata da andbaz Visualizza il messaggio
    P.S. ho provato a ricreare la struttura delle tue cartelle, quindi da avere sulla prima riga della classe ExampleApplication.java e Test.java "package com.company.affittagram" ma ancora errore 404, non capisco cosa potrei sbagliare!
    Non vedo/capisco quali difficoltà ci siano. Io, senza usare un IDE (quindi tutto "a mano"), ho preso esattamente il tuo pom.xml senza farci modifiche, ho preso i due sorgenti Java (solo aggiungendo la dichiarazione package) messi nella suddetta struttura e.... mvn jetty:run funziona perfettamente subito.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    440
    Anche a me funziona l server, cioè se vado su localhost:8080 mi ritorna Hello World, la jsp di default ma se vado su localhost:8080/api/test/andrea mi ritorna 404 anziché "Ciao ANDREA".

    Ho addirittura voluto ricreare tutto il progetto da zero ma niente: come potrei debuggare? Non vedo vie d'uscita, resto bloccato qui.

  6. #6
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    440
    TROVATO L'ERRORE, scusa per il tempo che ti ho fatto perdere...
    Alla fine era la versione di Java, che dalla 14 l'ho fatta scendere a quella di compilazione nel pom.xml versione 8 e adesso funziona.
    Quindi il problema era dovuto alla versione sbagliata di Java, ma perché con la 14 impostata di default su linux non potrebbe funzionare un Restful web service compilato alla versione 8? Vorrei capire meglio l'errore, grazie!!

  7. #7
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    440
    Inoltre con la versione del plugin jetty di maven 9.4.26.v20200117 (ultima) mi ritorna 404, invece quella 9.3.11.v20160721 della guida funziona perché? Non capisco davvero.

    P.S. credo sia proprio questo il problema, che non dipenda da Java ne dal mio codice ma dalla versione del plugin di Jetty per Maven.
    Ultima modifica di andbaz; 29-01-2020 a 17:03

  8. #8
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    440
    Sono passato a Tomcat come server embedded, però a differenza di Jetty non ricarica il server quano rileva modifiche nel codice e rchiede un file jar precompilato nella cartella target anziché un war.

    Alternative simili a Jetty? Tipo un plugin maven che compila un war e non appena rileva delle modifiche ricarica il server?

    Grazie!

  9. #9
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    440
    RISOLTO

    Dovevo cancellare il file web.xml, che nonostante non servisse al plugin di Jetty per via della configurazione tramite estensione della classe ResourceConfig non lo ingorava. Assurdo!

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.