2012-04-03 49 views
0

我得到一個StreamCorruptedException,我不知道爲什麼或如何發生。 任何幫助將會很棒! 這裏是客戶端:StreamCorruptedException:無效的流頭:

ClientConfig config = new DefaultClientConfig(); 
Client client = Client.create(config); 
WebResource service = client.resource(getBaseURI()); 
Map params = new HashMap<String, Object>();  
Order[] orders = odao.getOpenOrdersByTenant(tenantID); 

JSONObject jObj = new JSONObject(); 
jObj.put("params", params); 
jObj.put("sourcePath", System.getProperty("user.dir") + "/reports/OpenOrders.jasper"); 
jObj.put("method", "html"); 
jObj.put("datasource", orders); 

ClientResponse response =  service.path("rest").path("jasper").path("getJasperReport").type(MediaType.APPLICATION_JSON).post(ClientResponse.class,jObj); 

服務器:

@POST 
@Path("/getJasperReport") 
@Produces(MediaType.TEXT_HTML) 
@Consumes(MediaType.APPLICATION_JSON) 
public void getJasperReport(@Context HttpServletRequest servletRequest, @Context HttpServletResponse servletResponse, @Context UriInfo uriInfo) 
       throws ServletException, IOException{ 

ObjectInputStream objInputStream = new ObjectInputStream(servletRequest.getInputStream()); 
JSONObject jobj = (JSONObject) objInputStream.readObject();   

倒數第二行拋出一個java.io.StreamCorruptedException:無效的流頭:7B227061

回答

1

ObjectInputStream的是閱讀Java序列數據,而不是JSON格式的數據。

您可能想要類似new JSONObject(new JSONTokener(servletRequest.getReader()))

+0

那麼如何抽象我的請求實體?或者有更好的方法去解決這個問題嗎? – Garvice 2012-04-03 03:41:08

+0

仍然有問題。現在我得到一個非法狀態異常,告訴我GetInputStream已經被調用。 – Garvice 2012-04-03 05:44:51

+0

@Garvice - 你現在的代碼是什麼樣的?你是否刪除了以前的getInputStream調用? – jtahlborn 2012-04-03 14:04:19

相關問題