2015-01-02 33 views
34

Devo convertire JSON in pojo. Ho deciso di utilizzare jackson e ho aggiunto jackson-core-2.2.0.jar, jackson-databind-2.4.4.jar e jackson-annotations-2.1.2.jar al classpath del mio progettoEccezione nel thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering() Z

Ho creato la seguente classe Main :

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.List; 
import com.fasterxml.jackson.core.JsonGenerationException; 
import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.databind.JsonMappingException; 
import com.fasterxml.jackson.databind.JsonNode; 
import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.core.JsonGenerationException; 
import com.fasterxml.jackson.core.type.TypeReference; 
import com.fasterxml.jackson.databind.JsonMappingException; 
import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.databind.DeserializationFeature; 

public class Json { 
private static String SRC= ""; 

    public static void main(String[] args) { 

     AwardList awardList = null; 
     ObjectMapper mapper = new ObjectMapper(); 

     try{ 
      awardList = (AwardList) mapper.readValue(new URL(SRC), AwardList.class); 
     }catch (JsonGenerationException e){ 
      e.printStackTrace(); 
     } catch (JsonMappingException e){ 
      e.printStackTrace(); 
     } catch (IOException e){ 
      e.printStackTrace(); 
     } 
     System.out.println(awardList); 

    } 
} 

e seguendo AwardList classe:

public class AwardList { 

    private Flights[] flights; 
    private String[] connections; 

    private SaverEconomy saverEconomy; 
    private StandartEconomy standartEconomy; 
    private SaverBusiness saverBusiness; 
    private StandartFirst standartFirst; 
    private SaverFirst saverFirst; 


    public Flights[] getFlights() { 
     return flights; 
    } 

    public void setFlights(Flights[] flights) { 
     this.flights = flights; 
    } 

    public SaverEconomy getSaverEconomy() { 
     return saverEconomy; 
    } 

    public void setSaverEconomy(SaverEconomy saverEconomy) { 
     this.saverEconomy = saverEconomy; 
    } 

    public StandartEconomy getStandartEconomy() { 
     return standartEconomy; 
    } 

    public void setStandartEconomy(StandartEconomy standartEconomy) { 
     this.standartEconomy = standartEconomy; 
    } 

    public SaverBusiness getSaverBusiness() { 
     return saverBusiness; 
    } 

    public void setSaverBusiness(SaverBusiness saverBusiness) { 
     this.saverBusiness = saverBusiness; 
    } 

    public StandartFirst getStandartFirst() { 
     return standartFirst; 
    } 

    public void setStandartFirst(StandartFirst standartFirst) { 
     this.standartFirst = standartFirst; 
    } 

    public SaverFirst getSaverFirst() { 
     return saverFirst; 
    } 

    public void setSaverFirst(SaverFirst saverFirst) { 
     this.saverFirst = saverFirst; 
    } 

    public String[] getConnections() { 
     return connections; 
    } 

    public void setConnections(String[] connections) { 
     this.connections = connections; 
    } 
} 

voglio convertire jSON per POJO e salvarlo nel database. Continuo a ricevere l'errore seguente:

Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z 
    at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:457) 
    at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:379) 
    at Json.main(Json.java:72) 
+4

Perché stai utilizzando versioni diverse di contenitori Jackson? Hai jackson-core, jackson-databind, jackson-annotazioni ma tutti hanno versioni differenti? Come primo passo consiglierei di usare le stesse versioni di rilascio. Solo per la versione di informazioni 2.5 è stato rilasciato oggi. –

+2

Hai un'altra versione di jackson jars che vengono caricati prima di questi vasi. controlla l'altra versione e rimuovi quelli – NullPointerException

+0

Ha funzionato anche con me usando le stesse versioni: – Imeksbank

risposta

58

Mi stavo facendo esattamente lo stesso problema. Stavo usando Maven per la gestione delle dipendenze e avevo aggiunto la dipendenza per il modulo jackson-databind solo così

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 

e poi ho risolto che in questo modo .. ho aggiunto le sue dipendenze transitive esplicitamente con la stessa jackson.version menzionata per ciascuno di essi nel file pom.xml, come guidato here

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-annotations</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 
+0

Questo ha funzionato per me, ma nota che questo jar dovrebbe quindi verificarsi nel classpath prima dei jar con la versione precedente di jackson. –

+0

Questo ha funzionato per me..grazie .. ho aggiunto sopra entrambi con la mia dipendenza jackson-database Nilesh

4

ho avuto lo stesso problema. C'era qualche incompatibilità tra la versione 2.6.3 di jackson e un'altra dipendenza (graphaware-framework-embedded).

Potrei risolvere il problema semplicemente rimuovendo la dipendenza da jackson nel mio pom e lasciando che l'altra dipendenza carichi qualunque versione di jackson di cui avesse bisogno.

11

Sono venuto qui con un problema simile su Google App Engine. Ecco come l'ho risolto.

Per prima cosa ho corse:

mvn dependency:tree 

per trovare chi sta utilizzando la versione precedente. Ho poi escluso che dalla dipendenza offendere in questo modo:

<dependency> 
    <groupId>com.google.appengine.tools</groupId> 
    <artifactId>appengine-gcs-client</artifactId> 
    <version>0.6</version> 
    <exclusions> 
     <exclusion> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

successivo ho aggiunto la versione più recente della dipendenza nel mio pom.xml:

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

Spero che questo aiutare gli altri che inciampano qui.

Problemi correlati