2017-06-30 52 views
0

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

对于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响应?当请求“接受:应用/ 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用于转化的)

回答

0

更新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"/> 

所以基本上使用不同的(olde ?r)的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查询作为嵌套查询