2016-01-20 10 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