Hi,

It works when I changed the Json provider to
org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider


<bean id="jsonProvider"
class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider">
    </bean>

If we are using the above provider we do not need to specify
serializeAsArray for any property as we have now.  In addition it
automatically remove the root element. I pasted the existing JsonProvider
configurations below.

    <bean id="jsonProvider"
class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
        <property name="supportUnwrapped" value="true"/>
        <property name="serializeAsArray" value="true"/>
        <property name="arrayKeys">
            <list>
                <value>partitions</value>
                <value>property</value>
                <value>hostNames</value>
                <value>memberMap</value>
                <value>portMap</value>
                <value>partitionGroup</value>
                <value>member</value>
                <value>hostNames</value>
                <value>portMappings</value>
                <value>volumes</value>
                <value>domains</value>
                <value>kubernetesHost</value>
                <value>cartridges</value>
            </list>
        </property>
    </bean>
-->


On Wed, Nov 5, 2014 at 7:53 PM, Nirmal Fernando <[email protected]>
wrote:

> May be we have to use element wrapper; @XmlElementWrapper(name=
> "cartridges")
>
> http://blog.bdoughan.com/2010/09/jaxb-collection-properties.html
>
> On Wed, Nov 5, 2014 at 3:11 PM, Udara Liyanage <[email protected]> wrote:
>
>> Hi,
>>
>> You can find it [1]. Please note that other bean classes have public
>> variables which are set when converting to a pojo. This bean as private
>> variables and public getters and setters.
>>
>> [1]
>> https://github.com/apache/stratos/blob/docker-grouping-merge/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/definitions/ServiceGroupDefinition.java
>>
>> On Wed, Nov 5, 2014 at 7:34 PM, Nirmal Fernando <[email protected]>
>> wrote:
>>
>>> Can you point to the relevant rest endpoint bean ?
>>>
>>> On Wed, Nov 5, 2014 at 2:52 PM, Udara Liyanage <[email protected]> wrote:
>>>
>>>> Hi Nirmal,
>>>>
>>>> But it works in get deployment policy endpoint, so it can not be a
>>>> limitation ?
>>>>
>>>> curl -X GET -H "Content-Type: application/json" -d @'app-php-only.json'
>>>> -k   -u admin:admin
>>>> https://localhost:9443/stratos/admin/policy/deployment/economyDeploymentPolicy
>>>> | python -m json.tool
>>>>   % Total    % Received % Xferd  Average Speed   Time    Time     Time
>>>>  Current
>>>>                                  Dload  Upload   Total   Spent    Left
>>>>  Speed
>>>> 100   908    0   353  100   555   5364   8434 --:--:-- --:--:--
>>>> --:--:--  8538
>>>> {
>>>>     "deploymentPolicy": {
>>>>         "id": "economyDeploymentPolicy",
>>>>         "partitionGroup": [
>>>>             {
>>>>                 "id": "ec2",
>>>>                 *"partition": [*
>>>> *                    {*
>>>> *                        "id": "AWSEC2AsiaPacificPartition1",*
>>>> *                        "isPublic": false,*
>>>> *                        "partitionMax": 3,*
>>>> *                        "partitionMin": 1,*
>>>> *                        "property": [*
>>>> *                            {*
>>>> *                                "name": "region",*
>>>> *                                "value": "ap-southeast-1"*
>>>> *                            },*
>>>> *                            {*
>>>> *                                "name": "zone",*
>>>> *                                "value": "ap-southeast-1a"*
>>>> *                            }*
>>>> *                        ],*
>>>> *                        "provider": "ec2"*
>>>> *                    }*
>>>> *                ],*
>>>>                 "partitionAlgo": "one-after-another"
>>>>             }
>>>>         ],
>>>>         "public": false
>>>>     }
>>>> }
>>>>
>>>>
>>>> On Wed, Nov 5, 2014 at 7:21 PM, Udara Liyanage <[email protected]> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> When I add the name of the variable to the cxf-servlet.xml as 
>>>>> serializeAsArray,
>>>>> now cartridges are shown as arrays.
>>>>> <value>cartridges</value>
>>>>>
>>>>> But we can't specify it for each variable.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Nov 5, 2014 at 6:35 PM, Udara Liyanage <[email protected]> wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> When I execute the GET serviceGroup Stratos endpoint I get the
>>>>>> folowing output in two different groups. Please note cartridges text  in
>>>>>> bold. When there are only one cartridge, it shows as a String (output1),
>>>>>> when there are multiple cartridges it is shown as an array (output2).
>>>>>>
>>>>>> But when I convert the object to a json text, it shows as arrays even
>>>>>> when there are single cartridge.
>>>>>>
>>>>>> The issue happens when the object is sent in response as below
>>>>>>
>>>>>> return Response.ok().entity(serviceGroupDefinition).build();
>>>>>>
>>>>>>
>>>>>> In the code carridges is set as a list.
>>>>>>
>>>>>>
>>>>>>    1. List<String> cartridgesDef = new ArrayList<String>(Arrays.
>>>>>>    asList(cartridges));
>>>>>>    2. servicegroupDef.setCartridges(cartridgesDef);
>>>>>>
>>>>>>
>>>>>> [1] suggested to set serializeAsArray as true in cxf-servlet.xml.xml,
>>>>>> I tried doing it too. But same result.
>>>>>>
>>>>>> What is the reason for this?
>>>>>>
>>>>>>
>>>>>> output [1]
>>>>>>
>>>>>> {
>>>>>>     "serviceGroup": [
>>>>>>         {
>>>>>>            * "cartridges": "tomcat",*
>>>>>>             "dependencies": {
>>>>>>                 "startupOrders": "group.group1,cartridge.tomcat",
>>>>>>                 "terminationBehaviour": "terminate-dependents"
>>>>>>             },
>>>>>>             "name": "group5",
>>>>>>             "subGroups": "group1"
>>>>>>         }
>>>>>>     ]
>>>>>> }
>>>>>>
>>>>>> output [2]
>>>>>>
>>>>>> {
>>>>>>     "serviceGroup": {
>>>>>>         "cartridges": *[*
>>>>>> *            "tomcat",*
>>>>>> *            "php"*
>>>>>> *        ],*
>>>>>>         "dependencies": {
>>>>>>             "startupOrders": "group.group1,cartridge.tomcat",
>>>>>>             "terminationBehaviour": "terminate-dependents"
>>>>>>         },
>>>>>>         "name": "group6",
>>>>>>         "subGroups": "group2"
>>>>>>     }
>>>>>> }
>>>>>>
>>>>>> [1]
>>>>>> http://stackoverflow.com/questions/18918091/when-a-list-has-only-one-element-cxf-return-the-object-instead-a-js-array
>>>>>> --
>>>>>>
>>>>>> Udara Liyanage
>>>>>> Software Engineer
>>>>>> WSO2, Inc.: http://wso2.com
>>>>>> lean. enterprise. middleware
>>>>>>
>>>>>> web: http://udaraliyanage.wordpress.com
>>>>>> phone: +94 71 443 6897
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>> Udara Liyanage
>>>>> Software Engineer
>>>>> WSO2, Inc.: http://wso2.com
>>>>> lean. enterprise. middleware
>>>>>
>>>>> web: http://udaraliyanage.wordpress.com
>>>>> phone: +94 71 443 6897
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> Udara Liyanage
>>>> Software Engineer
>>>> WSO2, Inc.: http://wso2.com
>>>> lean. enterprise. middleware
>>>>
>>>> web: http://udaraliyanage.wordpress.com
>>>> phone: +94 71 443 6897
>>>>
>>>
>>>
>>>
>>> --
>>> Best Regards,
>>> Nirmal
>>>
>>> Nirmal Fernando.
>>> PPMC Member & Committer of Apache Stratos,
>>> Senior Software Engineer, WSO2 Inc.
>>>
>>> Blog: http://nirmalfdo.blogspot.com/
>>>
>>
>>
>>
>> --
>>
>> Udara Liyanage
>> Software Engineer
>> WSO2, Inc.: http://wso2.com
>> lean. enterprise. middleware
>>
>> web: http://udaraliyanage.wordpress.com
>> phone: +94 71 443 6897
>>
>
>
>
> --
> Best Regards,
> Nirmal
>
> Nirmal Fernando.
> PPMC Member & Committer of Apache Stratos,
> Senior Software Engineer, WSO2 Inc.
>
> Blog: http://nirmalfdo.blogspot.com/
>



-- 

Udara Liyanage
Software Engineer
WSO2, Inc.: http://wso2.com
lean. enterprise. middleware

web: http://udaraliyanage.wordpress.com
phone: +94 71 443 6897

Reply via email to