2014-12-10 14 views
5

के अवैध स्तर की वजह से मुझे एक अजीब व्यवहार है जब जीसन के साथ एक जेसन पार्सिंग करते हैं। मैं इस कोड का उपयोग करता हूं:जीसन सिंटैक्स एक्सेप्शन जीएसन

private static Container parseContainer(String containerJson) { 

    try { 
     //TODO Remove try catch when Bug is done 
     return containerJson != null ? new Gson().fromJson(containerJson, Container.class) 
       : null; 

    } catch (JsonSyntaxException e) { 
     LOGGER.error("JsonSyntaxException ", e); 
     LOGGER.error("Json: " + containerJson); 

     //Sleep 3 minutes and try again. 
     try { 
      Thread.sleep(1000L * 60 * 3); 
     } catch (InterruptedException e1) { 
      LOGGER.error("Exception", e); 
     } 

     LOGGER.error("Try again to parse json: " + containerJson); 

     Container result = new Gson().fromJson(containerJson, Container.class); 

     LOGGER.error("Parsing successful on second try."); 

     return result; 
    } 

} 

जब मेरी परियोजना में विधि लागू की जाती है, तो यह आमतौर पर अपवाद फेंकने के बिना काम करता है। लेकिन कभी-कभी अपवाद फेंक दिया जाता है और कुछ समय इंतजार करने के बाद, पार्सिंग ठीक काम करती है।

मुझे पता नहीं चला है कि अपवाद फेंक दिया गया है और कब नहीं।

लॉग "दूसरे प्रयास पर सफल पार्सिंग" लॉग कैसे हो सकता है?

अपवाद

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException 
at  com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapt erFactory.java:176) 
at com.google.gson.Gson.fromJson(Gson.java:803) 
at com.google.gson.Gson.fromJson(Gson.java:768) 
at com.google.gson.Gson.fromJson(Gson.java:717) 
at com.google.gson.Gson.fromJson(Gson.java:689) 
+0

ऐसा लगता है कि "दूसरी कोशिश पर पार्सिंग सफल" लॉग प्रिंट से पहले जेसन कॉल से अपवाद को फेंक दिया जा रहा है। क्या आप यहां एक असफल JSON दिखा सकते हैं? –

+0

लॉगऑस पर JSON को लॉग इन करने से पहले लॉग इन करने के लिए लॉग इन करें और अपवाद से पहले पार्स करने का प्रयास करने वाले सटीक डेटा को ट्रैक करें - इस तरह आप डेटा सही होने पर डीबग कर सकते हैं। शायद आप जिस बैकएंड का उपयोग कर रहे हैं उसमें एक बग है। –

+0

क्या आपने अपना जेसन सत्यापित किया है? आप अपने जेसन –

उत्तर

0

आपका अपवाद पूर्ण नहीं है। IllegalStateException को यहां कुछ टिप्पणी करनी है। कुछ इस तरह।

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 
Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 

यह अधिक सहायक होगा आप इस तरह के प्रारूप तो, वैसे भी त्रुटि है कि आपके Container.class() को सही प्रकार अपने containerJson के लिए नहीं है में देख सकते हैं, तो यह की तरह कोड के साथ ठीक करने की कोशिश

Type collectionType = new TypeToken<Collection<Container>>(){}.getType(); 
Collection<Container> enums = gson.fromJson(containerJson, collectionType); 
संबंधित मुद्दे