On Sat, Apr 30, 2016 at 9:48 PM, Sohani Weerasinghe <soh...@wso2.com> wrote:

> Hi Viraj,
>
> Thanks for the input. Please find the comments inline
>
> Sohani Weerasinghe
> Software Engineer
> WSO2, Inc: http://wso2.com
>
> Mobile  : +94 716439774
> Blog     :http://christinetechtips.blogspot.com/
> Twitter  : https://twitter.com/sohanichristine
>
> On Sat, Apr 30, 2016 at 1:51 PM, Viraj Rajaguru <vi...@wso2.com> wrote:
>
>> Hi Sohani,
>>
>> Few suggestions,
>>
>> 1. Lets change value of "type" from "array" to "object" in "urn:sObjects,
>> xsi:type=urn1:Contact" and "urn:sObjects, xsi:type=urn1:Account" as we are
>> not considering this as an array of "urn:sObjects" but two different
>> elements.
>>
>> Eg:
>>
>> "urn:sObjects, xsi:type=urn1:Contact":{
>>        "id":"
>> http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects";,
>>         "type":"object",
>>         .......
>>
> Yes. This should represent as Objects.


> +1 Let's do like that. But if this is inside an array, then this should be
> serialized inside the properties block of the items block
>
 Yes. It should be represent as object elements of array of create elements.

@Sohani: How we are going to handle following kind of message?

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:urn="urn:enterprise.soap.sforce.com" xmlns:urn1="urn:
sobject.enterprise.soap.sforce.com" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance";>
   <soapenv:Header>
      <urn:SessionHeader>
         <urn:sessionId>QwWsHJyTPW.1pd0_jXlNKOSU</urn:sessionId>
      </urn:SessionHeader>
   </soapenv:Header>
   <soapenv:Body>
      <urn:create>
       *  <urn:sObjects xsi:type="urn1:Contact">*
*            <AccountId>001D000000HRzKD</AccountId>*
*            <FirstName>Jane</FirstName>*
*            <LastName>Doe</LastName>*

*         </urn:sObjects>**         <urn:sObjects xsi:type="urn1:Contact">*
*            <AccountId>001D000000HRzKDeeee</AccountId>*
*            <FirstName>Pattric</FirstName>*
*            <LastName>Warne</LastName>*
*         </urn:sObjects>*

        * <urn:sObjects xsi:type="urn1:Account">*
*            <Name>Acme Rockets, Inc.</Name>*
*         </urn:sObjects>*
      </urn:create>
   </soapenv:Body>
</soapenv:Envelope>

Do we consider *urn1:Contact elements* as an array of elements?


>
>>
>> 2. Remove the space in "urn:sObjects, xsi:type=urn1:Contact" field name.
>> Lets change it to "urn:sObjects,xsi:type=urn1:Contact"
>>
>
> A space has been added to clearly identify the name and the element
> identifier, but let's remove it and I also think it's better
>
>>
>> 3. Change "id" value from "id":"
>> http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects"; to "id":"
>> http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects,xsi:type=urn1:Contact";
>> and "id":"
>> http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects,xsi:type=urn1:Account";
>> accordingly as now "urn:sObjects,xsi:type=urn1:Contact" and
>> "urn:sObjects,xsi:type=urn1:Account" are the unique identifiers not the
>> "urn:sObjects"
>>
>> 4. In the graphical representation users are not suppose to map value of
>> xsi:type attribute to another. It's kind of a metadata. So that I think
>> it's better hide xsi:type attribute from input/output tree.
>>
>
> I have added this to the tree view as an attribute since as I remember we
> discussed that there can be use cases. @nuwan can you please confirm?  If
> we don't have such use cases we can simply remove this when generating the
> schema so that it will not represent in the tree
>
Yes, I think it may required to map the value of the xsi:type in some
cases.
I Agree that it is a constant value in this case. So user can also use a
constant operator instead of it. But there can be occasions like user may
need to get two representations of same kind of elements to one common
format as shown below.

Different representation of contact elements in US and UK
*<urn:sObjects xsi:type="urn1:USContact">*
*            <AccountId>001D000000HRzKD</AccountId>*
*            <FirstName>Jane</FirstName>*
*            <LastName>Doe</LastName>*
*</urn:sObjects>*


*<urn:sObjects xsi:type="urn1:UKContact">*
*            <AccountId>001D000000HRzKD</AccountId>*
*            <Name>Jane **Doe</Name>*
*</urn:sObjects>*

Need to convert to a common format
*<urn:sObjects xsi:type="urn1:USContact">*
*            <AccountId>001D000000HRzKD</AccountId>*
*            <FirstName>Jane</FirstName>*
*            <LastName>Doe</LastName>*
*</urn:sObjects>*



>> Thanks.
>> Viraj.
>>
>>
>>
>> On Thu, Apr 28, 2016 at 3:07 PM, Sohani Weerasinghe <soh...@wso2.com>
>> wrote:
>>
>>> Hi All,
>>>
>>> We are in a process of supporting the xsi:type in JSON Schema and please
>>> find the below implementation details.
>>>
>>> *Input*:
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <soapenv:Envelope xmlns:soapenv="
>>> http://schemas.xmlsoap.org/soap/envelope/"; xmlns:urn="urn:
>>> enterprise.soap.sforce.com" xmlns:urn1="urn:
>>> sobject.enterprise.soap.sforce.com" xmlns:xsi="
>>> http://www.w3.org/2001/XMLSchema-instance";>
>>>    <soapenv:Header>
>>>       <urn:SessionHeader>
>>>          <urn:sessionId>QwWsHJyTPW.1pd0_jXlNKOSU</urn:sessionId>
>>>       </urn:SessionHeader>
>>>    </soapenv:Header>
>>>    <soapenv:Body>
>>>       <urn:create>
>>>        *  <urn:sObjects xsi:type="urn1:Contact">*
>>> *            <!--Zero or more repetitions:-->*
>>> *            <!--You may enter ANY elements at this point-->*
>>> *            <AccountId>001D000000HRzKD</AccountId>*
>>> *            <FirstName>Jane</FirstName>*
>>> *            <LastName>Doe</LastName>*
>>> *         </urn:sObjects>*
>>>         * <urn:sObjects xsi:type="urn1:Account">*
>>> *            <Name>Acme Rockets, Inc.</Name>*
>>> *         </urn:sObjects>*
>>>       </urn:create>
>>>    </soapenv:Body>
>>> </soapenv:Envelope>
>>>
>>>
>>> *Generated JSON schema via the Data Mapper editor :*
>>>
>>> {
>>>    "$schema":"http://json-schema.org/draft-04/schema#";,
>>>    "id":"http://wso2jsonschema.org";,
>>>    "title":"soapenv:Envelope",
>>>    "type":"object",
>>>   * "elementIdentifiers":[  *
>>> *      {  *
>>> *         "type":"xsi:type"*
>>> *      }*
>>> *   ],*
>>>    "properties":{
>>>       "soapenv:Body":{
>>>          "id":"http://wso2jsonschema.org/soapenv:Body";,
>>>          "type":"object",
>>>          "properties":{
>>>             "urn:create":{
>>>                "id":"http://wso2jsonschema.org/soapenv:Body/urn:create";,
>>>                "type":"object",
>>>                "properties":{
>>>                  * "urn:sObjects, xsi:type=urn1:Contact":{  *
>>> *
>>>  "id":"http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects
>>> <http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects>",*
>>> *                     "type":"array",*
>>> *                     "items":[  *
>>> *                        {  *
>>> *                           "attributes":{  *
>>> *                              "xsi:type":{  *
>>> *
>>>  
>>> "id":"http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects/0/xsi:type
>>> <http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects/0/xsi:type>",*
>>> *                                 "type":"string"*
>>> *                              }*
>>> *                           },*
>>> *
>>>  "id":"http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects/0
>>> <http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects/0>",*
>>> *                           "type":"object",*
>>> *                           "value":{  *
>>> *                              "type":"string"*
>>> *                           },*
>>> *                           "properties":{  *
>>> *                              "AccountId":{  *
>>> *
>>>  
>>> "id":"http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects/0/AccountId
>>> <http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects/0/AccountId>",*
>>> *                                 "type":"string"*
>>> *                              },*
>>> *                              "FirstName":{  *
>>> *
>>>  
>>> "id":"http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects/0/FirstName
>>> <http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects/0/FirstName>",*
>>> *                                 "type":"string"*
>>> *                              },*
>>> *                              "LastName":{  *
>>> *
>>>  
>>> "id":"http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects/0/LastName
>>> <http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects/0/LastName>",*
>>> *                                 "type":"string"*
>>> *                              }*
>>> *                           }*
>>> *                        }*
>>> *                     ]*
>>> *                  },*
>>>                  * "urn:sObjects, xsi:type=urn1:Account":{  *
>>> *
>>>  "id":"http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects
>>> <http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects>",*
>>> *                     "type":"array",*
>>> *                     "items":[  *
>>> *                        {  *
>>> *                           "attributes":{  *
>>> *                              "xsi:type":{  *
>>> *
>>>  
>>> "id":"http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects/0/xsi:type
>>> <http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects/0/xsi:type>",*
>>> *                                 "type":"string"*
>>> *                              }*
>>> *                           },*
>>> *
>>>  "id":"http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects/0
>>> <http://wso2jsonschema.org/soapenv:Body/urn:create/urn:sObjects/0>",*
>>> *                           "type":"object",*
>>> *                           "value":{  *
>>> *                              "type":"string"*
>>> *                           }*
>>> *                        }*
>>> *                     ]*
>>> *                  }*
>>> *               }*
>>> *            }*
>>> *         }*
>>>       },
>>>       "soapenv:Header":{
>>>          "id":"http://wso2jsonschema.org/soapenv:Header";,
>>>          "type":"object",
>>>          "properties":{
>>>             "urn:SessionHeader":{
>>>                "id":"
>>> http://wso2jsonschema.org/soapenv:Header/urn:SessionHeader";,
>>>                "type":"object",
>>>                "properties":{
>>>                   "urn:sessionId":{
>>>                      "id":"
>>> http://wso2jsonschema.org/soapenv:Header/urn:SessionHeader/urn:sessionId
>>> ",
>>>                      "type":"string"
>>>                   }
>>>                }
>>>             }
>>>          }
>>>       }
>>>    },
>>>    "namespaces":[
>>>       {
>>>          "prefix":"soapenv",
>>>          "url":"http://schemas.xmlsoap.org/soap/envelope/";
>>>       },
>>>       {
>>>          "prefix":"urn",
>>>          "url":"urn:enterprise.soap.sforce.com"
>>>       },
>>>       {
>>>          "prefix":"xsi",
>>>          "url":"http://www.w3.org/2001/XMLSchema-instance";
>>>       },
>>>       {
>>>          "prefix":"urn1",
>>>          "url":"urn:sobject.enterprise.soap.sforce.com"
>>>       }
>>>    ]
>>> }
>>>
>>> *Created tree:*
>>>
>>> Please find more details on the implementation at [1]
>>>
>>> [1] Issues with JSON Schema in representing data types and in
>>> representing an array which contains non identical elements
>>>
>>> Thanks,
>>> Sohani
>>> *​*
>>>
>>>
>>> Sohani Weerasinghe
>>> Software Engineer
>>> WSO2, Inc: http://wso2.com
>>>
>>> Mobile  : +94 716439774
>>> Blog     :http://christinetechtips.blogspot.com/
>>> Twitter  : https://twitter.com/sohanichristine
>>>
>>
>>
>>
>> --
>> Viraj Rajaguru
>> Senior Software Engineer
>> WSO2 Inc. : http://wso2.com
>>
>> Mobile: +94 77 3683068
>>
>>
>>
>>
>


-- 
----------------------------------------------------------

*Nuwan Chamara Pallewela*


*Software Engineer*

*WSO2, Inc. *http://wso2.com
*lean . enterprise . middleware*

Email   *nuw...@wso2.com <nuw...@wso2.com>*
Mobile  *+94719079739@*
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to