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 >