Yes but that's the limitation we need to fix! Its not too hard .. its
recursive application of the same rules :).

On Mon, Jun 11, 2012 at 9:04 AM, Ruchira Wageesha <ruch...@wso2.com> wrote:

> In the old model, it generates functions like [1] for operations. But when
> it is a service with complex types, most probably function signature would
> be [2]. In [2] userInfo is the whole soap body and we need to construct it
> manually. No help from the stub for soap body creation.
>
> [1] function saveUser(username, birthday, addressLine1, addressLine2,
> city, country)
> [2] function saveUser(userInfo)
>
> On Sun, Jun 10, 2012 at 10:48 AM, Sanjiva Weerawarana <sanj...@wso2.com>wrote:
>
>> Why do we need to re-invent a solution .. can the JAX-WS style binding
>> model not work? What we had was a similar model in the old mashup server.
>>
>> W.r.t. complex schemas- I don't understand why the old model doesn't
>> support complex types. Note that I'm talking about the model not the XSLT
>> based implementation.
>>
>> Sanjiva
>>
>> On Fri, Jun 1, 2012 at 3:40 PM, Ruchira Wageesha <ruch...@wso2.com>wrote:
>>
>>> Hi All,
>>>
>>> We are in the process of refactoring the SOAP web service JavaScript
>>> stub. Before going through that, I need to highlight few stuff and come up
>>> with a proper decision/architecture about the JS stub.
>>>
>>> Old Stub of MS
>>> =============
>>> Old stub was mainly writted thinking about services in MS and it
>>> generated methods for each operation in a service. This was absolutely
>>> simple to consume services in Mashup Server as MS didn't allow to write a
>>> service with complex schemas. i.e. In MS, we have only strings, numbers,
>>> dates etc. and anytype elements only.
>>>
>>> Following is a set of JS service method signatures that we can write in
>>> MS and relavent JS stub method signatures of them.
>>>
>>> *scenario1* - every parameter is a string
>>>
>>> Operation signature : function saveUser(username, birthday,
>>> addressLine1, addressLine2, city, country)
>>> Stub method signature : function saveUser(username, birthday,
>>> addressLine1, addressLine2, city, country)
>>>
>>> *scenario2* - address parameter is anytype and rest are strings
>>>
>>> Operation signature : function saveUser(username, birthday, address)
>>> Stub method signature : function saveUser(username, birthday, address)
>>>
>>> Here address is an anytype and we don't have any schema over that in the
>>> WSDL. i.e. We had to document about the address schema.
>>> <address>
>>> <addressLine1/>
>>>  <addressLine2/>
>>> <city/>
>>>  <country/>
>>> </address>
>>>
>>> *scenario3* - userInfo is an anytype
>>>
>>> Operation signature : function saveUser(userInfo)
>>> Stub method signature : function saveUser(userInfo)
>>>
>>> Here userInfo is an anytype and WSDL contain nothing about it. i.e. We
>>> had to document about userInfo schema.
>>> <userInfo>
>>>  <username/>
>>>  <birthday/>
>>> <address>
>>>  <addressLine1/>
>>> <addressLine2/>
>>>  <city/>
>>> <country/>
>>>  </address>
>>> </userInfo>
>>>
>>> But when it comes to non-MS services, *scenario3* would be the common
>>> case and with the old stub, it won't do much as we have to manually
>>> contruct the userInfo payload string and pass it to the method.
>>>
>>>
>>> The current stub
>>> =============
>>>
>>> op = operations["saveUser"];
>>> op(userInfo);
>>>
>>> A Modified version of the old stub, which allows you to pass either the
>>> payload XML(as in the case of old stub) or payload JSON in Badgerfish
>>> notation. This doesn't matter how complex the payload is.
>>>
>>> Only practical use of this stub is in it's Badgerfish mode. i.e. There
>>> is a method to get a sample BF JSON of the payload. Then, user only need to
>>> replace the relevant values of the BF JSON. After that, BF JSON will be
>>> converted back to an XML string using a util function and send to the
>>> endpoint.
>>>
>>> Further, instead of generating top level JS methods as in the old stub,
>>> those functions are accessed using operation name from the operations
>>> object. The reason behind that is, we can't have exact same WS operation
>>> name as the JS method name. i.e. "-" are valid in WS operation names, but
>>> invalid for JS variable names.
>>>
>>>
>>> When the we consider a Java stub, it makes easier to consume the WS.
>>> But, in JS case, we need to carefuly design the JS stub. i.e. As JavaScript
>>> is a dynamically typed langague, we don't have much choices.
>>>
>>> In Java stub, it might generate a UserInfo bean, Address bean etc. But
>>> in JS case, we won't need to have seperate objects as we can pass whole
>>> UserInfo element as a JSON. Again mapping a JSON to a highly styped schema
>>> is very difficult and we will have to find a way to preserve original
>>> details of the XML payload such as namespaces, sequences etc.
>>>
>>> So without addressing those issues, JS stubs will be useless. I am not
>>> sure whether there will be a perfect solution. But sometimes, we might have
>>> the old stub for simple services such as MS, and none for services with
>>> complex schemas.
>>>
>>> Anyway, we need to come up with a proper design/decision.
>>>
>>> _______________________________________________
>>> Dev mailing list
>>> Dev@wso2.org
>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>
>>>
>>
>>
>> --
>> Sanjiva Weerawarana, Ph.D.
>> Founder, Chairman & CEO; WSO2, Inc.;  http://wso2.com/
>> email: sanj...@wso2.com; phone: +94 11 763 9614; cell: +94 77 787 6880 | +1
>> 650 265 8311
>> blog: http://sanjiva.weerawarana.org/
>>
>> Lean . Enterprise . Middleware
>>
>
>
>
> --
> *Ruchira Wageesha
> Senior Software Engineer & Member, Management Committee, Development
> Technologies*
> *WSO2 Inc. - lean . enterprise . middleware |  wso2.com*
> *
> email: ruch...@wso2.com,   blog: ruchirawageesha.blogspot.com,   mobile: +94
> 77 5493444*
>
>


-- 
Sanjiva Weerawarana, Ph.D.
Founder, Chairman & CEO; WSO2, Inc.;  http://wso2.com/
email: sanj...@wso2.com; phone: +94 11 763 9614; cell: +94 77 787 6880 | +1
650 265 8311
blog: http://sanjiva.weerawarana.org/

Lean . Enterprise . Middleware
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to