首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有JSON响应的WSO2DSS嵌套查询

带有JSON响应的WSO2DSS嵌套查询
EN

Stack Overflow用户
提问于 2017-06-30 10:47:30
回答 1查看 320关注 0票数 0

使用WSO2DSS 3.5.1,我们有嵌套的查询、返回、分页信息和项的子列表。

对于XML,它看起来都很简单:

代码语言:javascript
复制
    <result element="results" rowName="result" >
        <element column="pagecount"   name="pageCount"   xsdType="integer"/>
        <element column="resultcount" name="resultCount" xsdType="integer"/>
        <element column="currpage"    name="page"        xsdType="integer"/>
        <call-query href="positions_list">
            <with-param name="page" query-param="page"/>
        </call-query>
    </result>

如何在JSON响应中使用嵌套查询(查询-调用)?当请求"Accept: application/json“标头时,我们会收到StackOverflow错误

代码语言:javascript
复制
java.lang.StackOverflowError
    at javax.xml.namespace.QName.equals(Unknown Source)
    at java.util.HashMap.getNode(HashMap.java:571)
    at java.util.HashMap.get(HashMap.java:556)
    at org.apache.ws.commons.schema.XmlSchemaObjectTable.getItem(XmlSchemaObjectTable.java:50)
    at org.apache.ws.commons.schema.XmlSchema.getTypeByName(XmlSchema.java:296)
    at org.apache.ws.commons.schema.XmlSchema.getTypeByName(XmlSchema.java:346)
    at org.apache.axis2.json.gson.factory.XmlNodeGenerator.getSchemaTypeOfElement(XmlNodeGenerator.java:146)
    at org.apache.axis2.json.gson.factory.XmlNodeGenerator.processElement(XmlNodeGenerator.java:136)
    at org.apache.axis2.json.gson.factory.XmlNodeGenerator.processSchemaType(XmlNodeGenerator.java:166)
    at org.apache.axis2.json.gson.factory.XmlNodeGenerator.processElement(XmlNodeGenerator.java:112)
    at org.apache.axis2.json.gson.factory.XmlNodeGenerator.processSchemaType(XmlNodeGenerator.java:166)
    at org.apache.axis2.json.gson.factory.XmlNodeGenerator.processElement(XmlNodeGenerator.java:137)

到目前为止,我们发现它发生在使用嵌套查询请求JSON响应时。

返回JSON响应看起来很简单(转换为XML非常简单)

代码语言:javascript
复制
    <result outputType="json">
      {"UserPositionListPage": {
        { "pageCount": $pagecount,
          "resultCount": $resultcount,
          "page": $currpage       
        }   }          
    </result>

但是,我们看不到包含嵌套调用的响应的方法。有什么建议吗?

编辑:似乎我必须在可重复的情况下工作,因为我们已经有了一个带有嵌套调用的返回XML的服务,并且在请求json时它一直有效:/我不介意服务总是返回JSON或XML,而不管请求的内容类型如何(假设我们可以使用ESB或APIM进行转换)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-30 15:34:36

更新axis2.xml以使用org.apache.axis2.json包(而不是"gson")中的消息格式化程序和构建器,至少解决了StackOverflowError问题

代码语言:javascript
复制
    <messageFormatter contentType="application/json"
                      class="org.apache.axis2.json.JSONMessageFormatter"/>

    <messageBuilder contentType="application/json"
                    class="org.apache.axis2.json.JSONOMBuilder"/>

所以基本上使用不同的(旧的?)json格式化程序和生成器允许我们使用嵌套查询返回XML,并让DSS转换响应。

编辑:

嵌套的JSON查询在DOC:https://docs.wso2.com/display/DSS351/Exposing+Data+in+JSON+Format#ExposingDatainJSONFormat-NestedQueries中进行了描述

代码语言:javascript
复制
{
  "result": {
  "total": $total,
  "limit": $page_limit,
  "offset": $page_offset,
  "@positions_list": "$limit->limit,$offset->offset"
       }
}

将positions_list查询调用为嵌套查询

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

https://stackoverflow.com/questions/44844655

复制
相关文章

相似问题

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