IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

JSON 2.4 et JAVA (jdk 1.4)


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Points : 37
    Points
    37
    Par défaut JSON 2.4 et JAVA (jdk 1.4)
    Bonjour à tous,

    J'ai une servlet qui doit envoyer une variable sous cette forme-là :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    			[{
     
    				'id' : 'root_1',
    				'txt' : 'Racine 2',
    				'items' : [
    				{
    					'id' : 'branch_2',
    					'txt' : 'Branche 2'
    				}
    				]
    			}];

    Pour cela j'utilise JSON:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JSONObject json = JSONObject.fromObject("{\"id\":\"json\",\"txt\":\"adddd\",\"items\":[{\"id\" : \"branch_2\",\"txt\" : \"Branche 2\"}]}");
    J'ai le message d'erreur suivant :

    [Erreur de servlet]-[java.lang.ThreadLocal: method remove()V not found]: java.lang.NoSuchMethodError: java.lang.ThreadLocal: method remove()V not found
    Peut être que je formate mal l'argument:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "{\"id\":\"json\",\"txt\":\"adddd\",\"items\":[{\"id\" : \"branch_2\",\"txt\" : \"Branche 2\"}]}"
    ou peut être qu'il n'accepte pas les [.

    Avez vous une idée ?

  2. #2
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    je pense que ce serait mieux que tu postes sur le forum java ou développement web java.

    A part ça, t'as essayé sans les backslash ? (suggestion, je n'y connais rien).

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    JSONObject json = JSONObject.fromObject("{'id' : 'root_1','txt' : 'Racine 2','items' : [{'id' : 'branch_2','txt' : 'Branche 2'}]}");

    ou

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    JSONObject json = JSONObject.fromObject("{id : 'root_1',txt : 'Racine 2',items : [{id : 'branch_2',txt : 'Branche 2'}]}");

    ?
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    java est relou avec les anti-slashe .... essaye de double anti-slasher, voire quadruple anti-slasher ...

  4. #4
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Citation Envoyé par kimjoa Voir le message
    java est relou avec les anti-slashe .... essaye de double anti-slasher, voire quadruple anti-slasher ...
    C'est surtout que quand tu les passes à du javascript ensuite, ils sont de nouveau interprété. Donc quand si tu veux afficher "salut", en Java il faut écrire "\"salut\"", si tu le passes à du javascript faut écrire "\\"salut\\"". Si en plus tu veux passer une expression régulière, c'est triplement parsé donc faut encore doubler les "\" (nota : faut doubler les caractères d'échappement à chaque appel donc c'est 1, 2, 4, 8, ...).

    Ca m'est déjà arrivé d'avoir à en mettre 8.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Points : 37
    Points
    37
    Par défaut
    J'ai essayé toutes vos solutions, ça ne marche pas


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    		String test5="{" +
    		"\"id\":\"root\"," +
    		"\"txt\":\"Racine\"," +
    		"\"items\":" +
    			"[{" +
    			"\"id\" : \"branch_2\"," +
    			"\"txt\" : \"Branche 2\"" +
    			"}]" +
    		"}";
    		JSONObject jsonObject5 = JSONObject.fromObject(test5);
    J'obtiens toujours la même erreur avec 1 ou 2 "\"

    Je pense que le souci est qu'il y a un tableau dans items, ça doit lui gêner.


    Une autre question aussi: quel est intérêt de passer ses données sous forme d'objet json alors que je pourrai très bien passer ça sous forme de String surtout que finalement je fais juste un eval au niveau javascript dans ma page jsp

  6. #6
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    As-tu essayé ce que propose Willpower ?

    Passer par des simple quotes au lieu des double quotes simplifie énormément la vie...

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Points : 37
    Points
    37
    Par défaut
    Oui j'ai essayé les 2 solutions, j'ai toujours la même erreur


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Erreur de servlet]-[java.lang.ThreadLocal: method remove()V not found]: java.lang.NoSuchMethodError: java.lang.ThreadLocal: method remove()V not found
    mais peut être ça vient de ma configuration car il n'arrive pas a trouver une méthode.

    Voici ma configuration :
    JDK 1.4 et JSON 2.4

    les jar que j'utilise:
    commons-beanutils-1.8.0.jar
    commons-collections-3.2.1.jar
    commons-lang-2.5.jar
    commons-logging-1.1.1.jar
    ezmorph-1.0.6.jar
    json-lib-2.4-jdk13.jar

  8. #8
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Il faudrait peut-être penser à lire le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.ThreadLocal: method remove()V not found
    La méthode ThreadLocal.remove() n'existe pas... Ce qui est logique puisqu'elle est apparut dans le JDK 1.5 !!!

    D'après la doc de JSON, il y a deux versions de la librairie, une pour le JDK 1.3 et + et l'autre pour le JDK5 et +.
    Tu ne dois surement pas utiliser la bonne...


    a++

    [edit] J'ai posté entre temps : vérifies bien la version de chacun de tes jars.
    Le stacktrace complet de l'exception pourrait être utile !

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Points : 37
    Points
    37
    Par défaut
    Oui cette méthode n'existe pas. Voici les exceptions levées:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SRVE0026E: [Erreur de servlet]-[java.lang.ThreadLocal: method remove()V not found]: java.lang.NoSuchMethodError: java.lang.ThreadLocal: method remove()V not found
    	at net.sf.json.AbstractJSON.removeInstance(AbstractJSON.java:221)
    	at net.sf.json.JSONObject._fromJSONObject(JSONObject.java:924)
    	at net.sf.json.JSONObject.fromObject(JSONObject.java:144)
    	at net.sf.json.JSONSerializer.toJSON(JSONSerializer.java:108)
    	at net.sf.json.AbstractJSON._processValue(AbstractJSON.java:238)
    Par rapport aux versions de mes packages, comme j'ai un jdk 1.4, je peux utiliser la version 2.4 de JSON (json-lib-2.4-jdk13.jar) que j'ai téléchargé sur le site http://json-lib.sourceforge.net/

    Par rapport aux versions de mes dependencies: J'ai bien récupéré les bonnes versions

    Json-lib requires (at least) the following dependencies in your classpath:

    * jakarta commons-lang 2.5
    * jakarta commons-beanutils 1.8.0
    * jakarta commons-collections 3.2.1
    * jakarta commons-logging 1.1.1
    * ezmorph 1.0.6


    Peut être que j'ai mal installé les jars, je les ai tout simplement mis dans le dossier \WebContent\WEB-INF\lib

    J'ai aussi associé les jar a leurs sources et javadoc

  10. #10
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    On dirait bien que le problème vient de la release 2.4 de JSON. D'ailleurs le bug est déjà signalé : http://sourceforge.net/tracker/?func...25&atid=857928


    Donc deux solutions pour toi :
    • Utiliser une version antérieur qui ne serait pas buggé.
    • Récupérer le code source et le recompiler pour avoir l'origine de l'erreur (et la corriger).


    a++

  11. #11
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Points : 37
    Points
    37
    Par défaut
    j'ai mis la version antérieur et ça marche !!!! Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Installation JAVA JDK JRE
    Par sybil dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 08/01/2010, 14h54
  2. communiquer entre 2 applications java jdk diférent
    Par Goopa dans le forum Langage
    Réponses: 1
    Dernier message: 15/05/2009, 10h04
  3. faire un fichier conf ou properties en java (jdk 1.4)
    Par tarekphp dans le forum Général Java
    Réponses: 4
    Dernier message: 27/01/2009, 16h24
  4. [Iseries] [java] Jdk 1.5
    Par seddik_saber dans le forum AS/400
    Réponses: 1
    Dernier message: 03/06/2007, 00h06
  5. [Installation][windows] Outils java (JDK)
    Par Ali26 dans le forum Général Java
    Réponses: 20
    Dernier message: 07/09/2005, 19h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo