首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Xpages SBT <xe:restJsonData> & java.util.ArrayList与com.ibm.commons.util.io.json.JsonJavaObject不兼容

Xpages SBT <xe:restJsonData> & java.util.ArrayList与com.ibm.commons.util.io.json.JsonJavaObject不兼容
EN

Stack Overflow用户
提问于 2014-07-21 08:13:32
回答 1查看 300关注 0票数 0

我试图在XPages中使用SBT中的端点功能,并使用不同的rest服务(与示例中的服务不同)。认证工作经过几次调整(谢谢Serdar!)但我想模仿StackOverflow示例,并通过<xe:restJsonData>和repeat控件使用响应。

使用SO示例作为起点,如果我更改参数以匹配我的服务,则会得到以下错误.

Error while reading the JSON stream java.util.ArrayList incompatible with com.ibm.commons.util.io.json.JsonJavaObject

我猜这与拆分路径有关,因为由此产生的json没有相同的父级。看起来有点像这样(编辑).

[ { "user_id": 1688810, "space_id": null, "type": "user", "title": [ "Workflow Architect" ], "external_id": null, "last_seen_on": "2014-07-21 06:42:03", "name": "XXX XXX" }, { "user_id": 1998697, "name": "YYY YYY", "rights": [ "view" ], "external_id": null, "space_id": null, "title": [ "Owner" ], "org_id": null, "country": "United States", "type": "user", "last_seen_on": "2014-07-20 16:52:03", "location": [ "Amarillo" ] } ] --我尝试了一个空白或"/“的分割路径,但是得到了相同的错误。我知道数据正在返回,因为输入一个计算值的@Endpoint("podio").xhrGet("/contact/").getData();显示它是ok的(raw)

有什么想法吗?我怎样才能将这个结果分开来工作?或者,由于json是复杂的,所以从根本上说,这个对象是不可能的吗?谢谢!

全堆栈追踪..。

代码语言:javascript
复制
com.ibm.xsp.FacesExceptionEx: Error while reading the JSON stream
at com.ibm.xsp.extlib.sbt.generic.GenericRestJsonDataSource$JsonAccessor.loadBlock(GenericRestJsonDataSource.java:137)
at com.ibm.xsp.extlib.model.DataBlockAccessor.findBlockByIndex(DataBlockAccessor.java:344)
at com.ibm.xsp.extlib.model.DataBlockAccessor.prefetchData(DataBlockAccessor.java:292)
at com.ibm.xsp.extlib.model.DataAccessorModel.getRowCount(DataAccessorModel.java:93)
at com.ibm.xsp.model.TabularDataModel.isRowAvailable(TabularDataModel.java:96)
at com.ibm.xsp.extlib.model.DataAccessorModel.isRowAvailable(DataAccessorModel.java:69)
at com.ibm.xsp.component.UIDataIterator.isRowAvailable(UIDataIterator.java:523)
at com.ibm.xsp.component.UIDataIterator.pushVars(UIDataIterator.java:504)
at com.ibm.xsp.component.UIDataIterator.setRowIndex(UIDataIterator.java:469)
at com.ibm.xsp.renderkit.html_extended.IteratorRenderer.encodeRows(IteratorRenderer.java:62)
at com.ibm.xsp.renderkit.html_extended.IteratorRenderer.encodeChildren(IteratorRenderer.java:55)
at com.ibm.xsp.renderkit.ReadOnlyAdapterRenderer.encodeChildren(ReadOnlyAdapterRenderer.java:162)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:979)
at com.ibm.xsp.component.UIDataIterator.encodeChildren(UIDataIterator.java:725)
at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:844)
at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:853)
at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:853)
at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:853)
at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:853)
at com.ibm.xsp.component.UIViewRootEx._renderView(UIViewRootEx.java:1317)
at com.ibm.xsp.component.UIViewRootEx.renderView(UIViewRootEx.java:1255)
at com.ibm.xsp.application.ViewHandlerExImpl.doRender(ViewHandlerExImpl.java:651)
at com.ibm.xsp.application.ViewHandlerExImpl._renderView(ViewHandlerExImpl.java:321)
at com.ibm.xsp.application.ViewHandlerExImpl.renderView(ViewHandlerExImpl.java:336)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:103)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:120)
at com.ibm.xsp.controller.FacesControllerImpl.render(FacesControllerImpl.java:270)
at com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:261)
at com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:157)
at com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160)
at com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138)
at com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103)
at com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:576)
at com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1315)
at com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:853)
at com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:796)
at com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:565)
at com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1299)
at com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:662)
at com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:482)
at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:350)
at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:306)
at com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)
Caused by: java.lang.ClassCastException: java.util.ArrayList incompatible with com.ibm.commons.util.io.json.JsonJavaObject
at com.ibm.xsp.extlib.sbt.generic.GenericRestJsonDataSource$JsonAccessor.loadBlock(GenericRestJsonDataSource.java:121)
... 43 more'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-21 10:21:03

我以前也遇到过同样的问题。这是GenericRestJsonDataSource的无能。如果远程服务提供数组而不是对象,则来自客户端服务的数据返回ArrayList of JsonJavaObject's。

不过,该公司预计,JsonJavaObject将包含ArrayList of JsonJavaObject's。

这就是为什么在前面的BaseCamp示例中(在链接问题上),我设计了一个额外的Java来提取数据并维护它自己的列表结构。这对我的缓存也有很大帮助。

您的数据应该采用如下格式:

代码语言:javascript
复制
{
  items: [
     {
       prop: value, ....
     },
     {
       prop: value, ....
     }
  ]
}

就像在这个例子里。在这种情况下,splitPath应该是items

事实上,这在类中是一个简单的解决方法。应该修改GenericRestJsonDataSource中的访问器类,以检查返回的项是否为ArrayList。然而,在当时,它似乎是一种更方便的方法来设计我自己的服务bean。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24860431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档