使用WSO2DSS 3.5.1,我们有嵌套的查询、返回、分页信息和项的子列表。
对于XML,它看起来都很简单:
<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错误
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非常简单)
<result outputType="json">
{"UserPositionListPage": {
{ "pageCount": $pagecount,
"resultCount": $resultcount,
"page": $currpage
} }
</result>但是,我们看不到包含嵌套调用的响应的方法。有什么建议吗?
编辑:似乎我必须在可重复的情况下工作,因为我们已经有了一个带有嵌套调用的返回XML的服务,并且在请求json时它一直有效:/我不介意服务总是返回JSON或XML,而不管请求的内容类型如何(假设我们可以使用ESB或APIM进行转换)
发布于 2017-06-30 15:34:36
更新axis2.xml以使用org.apache.axis2.json包(而不是"gson")中的消息格式化程序和构建器,至少解决了StackOverflowError问题
<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中进行了描述
{
"result": {
"total": $total,
"limit": $page_limit,
"offset": $page_offset,
"@positions_list": "$limit->limit,$offset->offset"
}
}将positions_list查询调用为嵌套查询
https://stackoverflow.com/questions/44844655
复制相似问题