Hi Imesh, I'll check and update.
Thank you, *Dakshika Jayathilaka* Software Engineer WSO2, Inc. lean.enterprise.middleware 0771100911 On Sun, Dec 14, 2014 at 11:42 AM, Udara Liyanage <ud...@wso2.com> wrote: > > Hi Imesh, > > If we are switching to Jackson json provider(there is a discussion > previously) this may be already resolved. It supports java collections. > > > Touched, not typed. Erroneous words are a feature, not a typo. > On Dec 14, 2014 11:32 AM, "Imesh Gunaratne" <im...@apache.org> wrote: > >> Hi Devs, >> >> All the REST API methods which return collection types have included a >> wrapper object in their response messages. This is according to the CXF >> JSON provider configuration. >> >> Example: GET Cartridges: >> >> {"*cartridges*":[{"category":"framework","description":"Apache >> Tomcat","displayName":"tomcat","host":"tomcat.apache.org >> ","multiTenant":false,"provider":"apache","public":false,"type":"tomcat","version":7}]} >> >> This becomes a problem for the CLI or for any other client that try to >> deserialize the JSON string to its corresponding Java object. The >> convention we had used to resolve this issue was to define wrapper classes >> for collection type responses: >> >> private class CartridgeList { >> private ArrayList<Cartridge> cartridges; >> >> public ArrayList<Cartridge> getCartridges() { >> return cartridges; >> } >> >> public void setCartridge(ArrayList<Cartridge> cartridges) { >> this.cartridges = cartridges; >> } >> >> CartridgeList() { >> cartridges = new ArrayList<Cartridge>(); >> } >> } >> >> IMO this is an overhead when considering the amount of classes we have in >> the REST API domain model. >> >> As a solution to this problem I have now configured REST API to remove >> this element: >> >> <bean id="jsonProvider" >> class="org.apache.cxf.jaxrs.provider.json.JSONProvider"> >> >> ... >> <property name="dropCollectionWrapperElement" value="true"/> >> >> ... >> </bean> >> >> >> *New sample response:* >> >> [{"category":"framework","description":"Apache >> Tomcat","displayName":"tomcat","host":"tomcat.apache.org","multiTenant":false,"provider":"apache","public":false,"type":"tomcat","version":7}] >> >> *Sample code to de-serialize the object:* >> >> Type listType = new TypeToken<ArrayList<CartridgeDefinitionBean>>() >> {}.getType(); >> List<CartridgeDefinitionBean> cartridgeList = >> (List<CartridgeDefinitionBean>) >> restClient.listEntity(ENDPOINT_LIST_CARTRIDGES, >> listType, "cartridges"); >> >> >> Dakshika: We might need to update the UI with this modification. Really >> sorry for the inconvenience that may cause. >> >> Thanks >> >> >> >> -- >> Imesh Gunaratne >> >> Technical Lead, WSO2 >> Committer & PMC Member, Apache Stratos >> >