it-swarm.com.de

NoClassDefFoundError JsonAutoDetect beim Analysieren des JSON-Objekts

Ich entwickle mit den Cloud-Services von Amazon eine Web-App und muss JSON-Objekte verwenden. Wie mein Projekt eingerichtet ist, ich habe ein HTML-Formular, in das der Benutzer seine Informationen eintragen und einreichen wird. Nach der Übermittlung werden die Daten in eine Online-Datenbank gestellt und eine Bestätigungs-E-Mail an sie gesendet. Bevor ich die Daten an die Datenbank übergeben kann, muss ich sie in ein JSON-Objekt einfügen. Mein in Java erstelltes Servlet sieht folgendermaßen aus:

public class FormHandling extends HttpServlet {
    //doGet function
    public void doGet (HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        // In this part of the code I take in the user data and build an HTML
        // page and return it to the user

        // Create String Mapping for User Data object
        Map<String,Object> userData = new HashMap<String,Object>();

        // Map the names into one struct. In the code below we are creating 
        // values for the nameStruct from the information the user has
        // submitted on the form.
        Map<String,String> nameStruct = new HashMap<String,String>();
        nameStruct.put("fName", request.getParameter("fname"));
        nameStruct.put("lName", request.getParameter("lname"));
        nameStruct.put("mInit", request.getParameter("minit"));

        // Map the three email's together (providing there are 3).
        // This is the same logic as the names.
        Map<String,String> emailStruct = new HashMap<String,String>();
        emailStruct.put("email", request.getParameter("email1"));
        emailStruct.put("email", request.getParameter("email2"));
        emailStruct.put("email", request.getParameter("email3"));

        // Put Name Hash Value Pair inside User Data Object
        userData.put("name", nameStruct);
        userData.put("emails", emailStruct);
        userData.put("age", 22);

        // Create the Json data from the userData
        createJson(userData);

        // Close writer
        out.close();
    }

    public File createJson(Map<String,Object> userData) 
        throws JsonGenerationException, JsonMappingException, IOException {
        File user = new File("user.json");

        // Create mapper object
        ObjectMapper mapper = new ObjectMapper();

        // Add the userData information to the json file
        mapper.writeValue(user, userData);
        return user;
    }
}

Wenn ich das Formular mit diesem Code absende, erhalte ich die folgende Fehlermeldung:

Java.lang.NoClassDefFoundError: de/schnellererxml/jackson/annotation/JsonAutoDetect com.fasterxml.jackson.databind.introspect.VisibilityChecker $ Std. (VisibilityChecker.Java:169) com.fasterxml.jackson.databind.ObjectMapper (ObjectMapper.Java:197) edu.tcnj.FormHandling.createJson (FormHandling.Java:115) edu.tcnj.FormHandling.doGet (FormHandling.Java:104) edu.tcnj.FormHandling.doPost (FormHandling.Java:131) javax.servlet.http.HttpServlet.service (HttpServlet.Java:641) javax.servlet.http.HttpServlet.service (HttpServlet.Java:722)

Jetzt weiß ich, dass ein Fehler bedeutet, dass die Jackson-Datenbank nicht gefunden wird. Ich entwickle in Eclipse, und ich weiß, dass der Buildpfad von Zeit zu Zeit durcheinander ist. Deshalb habe ich die Bibliotheken auch im Ordner WebContent\WEB-INF\lib abgelegt. Dies hat Probleme gelöst, die ich zuvor hatte. Dies scheint jedoch dieses Mal mein Problem nicht zu lösen. Ich habe sogar die JAR-Dateien geöffnet, um physisch zu überprüfen, ob die benötigte Bibliothek und Klasse vorhanden ist. Ich habe versucht, die gesamte Bibliothek zu durchsuchen und nach verschiedenen Möglichkeiten zu suchen, um die Bibliothek einzuschließen, aber nichts scheint zu funktionieren.

46
jhahn

Für diejenigen, die in Zukunft hierher kommen, lautet die Antwort:

Wenn Sie nur jackson core und jackson databind kopiert haben, benötigen Sie jackson annotations, um die ObjectMapper zu verwenden.

Stellen Sie beispielsweise sicher, dass Sie Folgendes haben:

[16:32:01]:/Android-project/libs     master]$ ls -lAF
total 2112
[email protected] 1 jeffamaphone  staff   33525 Jun 18 16:06 jackson-annotations-2.0.2.jar
[email protected] 1 jeffamaphone  staff  193693 Jun  7 16:42 jackson-core-2.0.2.jar
[email protected] 1 jeffamaphone  staff  847121 Jun 18 15:22 jackson-databind-2.0.2.jar
127
i_am_jorf

Um die hervorragende Antwort von @ jeffamaphone für Maven-Benutzer zu erweitern

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.7.3</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.7.3</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.7.3</version>
</dependency>
64
Johan Sjöberg

Oder die folgende Abstufungskonfiguration:

compile 'com.fasterxml.jackson.core:jackson-core:2.2.2'
compile 'com.fasterxml.jackson.core:jackson-databind:2.2.2'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.2.2'
7
userM1433372

Wenn Sie maven verwenden und alle Bibliotheken installiert haben, wurde in meinem Fall ein einfaches Problem mit mvn clean und mvn install behoben.

1
Vilen

Wenn Sie Tomcat während der Entwicklung in Eclipse verwenden und diesen Fehler erhalten haben (möglicherweise, weil Sie auf "Neu veröffentlichen" geklickt haben), 

rechtsklick auf das Projekt-> Maven-> Projekt aktualisieren ...

hat dieses Problem für mich gelöst.

Außerdem habe ich auch die Abhängigkeiten von Johan Sjöberg mit einbezogen

0
kaya