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

    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();
        }
    
    
    }
    I would love to change the world, but they won't give me the source code

  2. #2
    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 09:34
    AndreaSenior Java developerSCJP 5 (91%) – SCWCD 5 (94%)
    Il mio nuovo sito-blog italiano sulla programmazione: andbin.it

  3. #3
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    437
    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 13:00
    I would love to change the world, but they won't give me the source code

  4. #4
    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.
    AndreaSenior Java developerSCJP 5 (91%) – SCWCD 5 (94%)
    Il mio nuovo sito-blog italiano sulla programmazione: andbin.it

  5. #5
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    437
    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.
    I would love to change the world, but they won't give me the source code

  6. #6
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    437
    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!!
    I would love to change the world, but they won't give me the source code

  7. #7
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    437
    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 16:03
    I would love to change the world, but they won't give me the source code

  8. #8
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    437
    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!
    I would love to change the world, but they won't give me the source code

  9. #9
    Utente di HTML.it L'avatar di andbaz
    Registrato dal
    Jul 2011
    Messaggi
    437
    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!
    I would love to change the world, but they won't give me the source code

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 © 2020 vBulletin Solutions, Inc. All rights reserved.