2016-01-20 9 views
0

我需要從Servlet輸出JSONP。我正在使用javax.json的JsonStreamer將JSON輸出到輸出流。爲了生成JSONP,我需要用回調函數名稱和形成回調調用表達式所需的括號來包圍JSON(回調(json)。javax.json.stream.JsonGenerator:使用生成器後輸出流不可用

問題在於,在關閉JsonGenerator之後打印到流中的內容會丟失。所以我不能使用右括號來完成JSONP。沒有例外產生,代碼運行正常。

下面是(命令行java上下文中的演示代碼,以方便測試)。

這是一個錯誤還是我忽略了一些東西?

package mvu.test.jsonstreamer; 

import java.io.OutputStream; 
import java.io.PrintStream; 

import javax.json.Json; 
import javax.servlet.ServletOutputStream; 

public class JsonGeneratorTest { 
    public static void main(String[] args) { 
     PrintStream outstream = System.out; 

     outstream.print("callbackFunc("); // shown 

     Json.createGenerator(outstream) 
      .writeStartArray() 
      .write("a string in an array") 
      .writeEnd() 
      .close(); 

     outstream.println(");");  // THIS IS LOST 
    } 
} 

回答

0

作爲每JsonGenerator.close()documentation,調用close()方法關閉底層輸出源,或者,在這種情況下,outstream

+0

謝謝CptBartender!我閱讀了文檔,但錯過了這一點。也許是因爲我沒有將「output ** source **」與輸出流相關聯,這對我來說更像是一個接收器或目標......我想知道爲什麼generator要關閉其他地方打開的流的責任? – mvuot