2011-12-04 14 views
13

मैं जैक्सन पुस्तकालय का उपयोग कर रहा JSON ऑब्जेक्ट बनाने के लिए, लेकिन जब मैं mapper.writeValue (System.out, responseData) समारोह का उपयोग करें, कार्यक्रम समाप्त हो जाता है।जावा प्रोग्राम समाप्त के बाद ObjectMapper.writeValue (System.out, responseData) - जैक्सन लाइब्रेरी

import java.io.IOException; 
import java.util.HashMap; 
import java.util.Map; 

import org.codehaus.jackson.JsonGenerationException; 
import org.codehaus.jackson.map.JsonMappingException; 
import org.codehaus.jackson.map.ObjectMapper; 

public class Test { 

    public static void main(String[] args){ 
     new Test().test(); 
    } 

    public void test() { 
     ObjectMapper mapper = new ObjectMapper(); 
     Map<String, Object> responseData = new HashMap<String, Object>(); 

     responseData.put("id", 1); 

     try { 
      mapper.writeValue(System.out, responseData); 
      System.out.println("done"); 
     } catch (JsonGenerationException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (JsonMappingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    }. 

} 

इस कार्यान्वित करने के बाद, कंसोल से पता चलता है { "id": 1}, लेकिन प्रदर्शित नहीं करता है "हो गया" यहाँ मेरी कोड है।

उत्तर

15

समस्या जैक्सन कार्यान्वयन के साथ है, क्योंकि ObjectMapper._configAndWriteValue UtfGenerator.close() को कॉल करता है, जो PrintStream.close() को कॉल करता है।

मैं https://jira.codehaus.org/browse/JACKSON

पर एक मुद्दा लॉग ऑन होता लक्ष्य के डिफ़ॉल्ट व्यवहार को बदलने के लिए बंद किया जा रहा आप कर सकते हैं निम्नलिखित:

mapper.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false); 
+3

यह एक बग, यह सुविधा नहीं है - डिफ़ॉल्ट OutputStream द्वारा वास्तव में समाप्त होती है जब उच्च स्तरीय ObjectMapper.writeValue() तरीकों का उपयोग कर। लेकिन वास्तविक मुद्दे की अच्छी व्याख्या। यदि आप वांछित नहीं हैं, तो आप ऑब्जेक्टमैपर पर उस सुविधा को अक्षम कर सकते हैं ('JsonGenerator.Feature.AUTO_CLOSE_TARGET'):' mapper.disable (JsonGenerator.Feature.AUTO_CLOSE_TARGET) ' – StaxMan

+0

ऐसा लगता है कि अक्षम विधि का एक और ओवरलोडेड संस्करण आसान होगा। वर्तमान में, ऐसा कोई नहीं है जो जेसन जेनरेटर लेता है। फीचर। –

+6

ठीक है। हाँ, वहाँ तो 'mapper.configure (JsonGenerator.Feature.AUTO_CLOSE_TARGET, झूठी)' लेकिन दी गई सुविधा के तरीकों भी अगर वे याद कर रहे हैं जोड़ने चाहिए होना चाहिए। – StaxMan

-3

अपने डेटा फ़ाइलें/गेटर फाइलों में चर नाम की घोषणा करते हैं, पहला अक्षर छोटा होना चाहिए।

+0

यह वास्तव में इस सवाल का जवाब नहीं होता। यदि आपके पास कोई अलग प्रश्न है, तो आप [प्रश्न पूछें] (http://stackoverflow.com/questions/ask) पर क्लिक करके पूछ सकते हैं। एक बार आपके पास पर्याप्त [प्रतिष्ठा] (http://stackoverflow.com/help/) हो जाने पर आप इस प्रश्न पर अधिक ध्यान आकर्षित करने के लिए [एक बक्षीस] (http://stackoverflow.com/help/privileges/set-bounties) भी जोड़ सकते हैं। क्या-प्रतिष्ठा)। –

+0

@JRichardSnape - मैं सहमत नहीं हैं। जबकि पहली वाक्य और हस्ताक्षर को जाने की आवश्यकता है, समग्र संदेश यह है कि समस्या केस-संवेदी होने वाले चर से उत्पन्न होती है। जवाब गलत हो सकता है, लेकिन यह अभी भी सवाल का जवाब देने का प्रयास करता है। – SomethingDark

+0

@ SomethingDark मेला पर्याप्त - मैं आपका संपादन देखता हूं। मुझे लगता है कि यहां जवाब देने का प्रयास है - शायद मैं समीक्षा कतार में थोड़ा तेज़ हो गया था। –

संबंधित मुद्दे