On 22/12/06, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote:
Andrew Borley wrote: > Hi all, > > I was looking to put together another "real-world" sample for SCA C++, > using Sebastien's REST support to invoke the Yahoo REST services. > Unfortunately, this won't currently work due to how we support > arguments - currently they're indexed purely by number. > > The Yahoo REST services need an HTTP GET call like: > http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=Tuscany&results=2 > > > If we have the Yahoo service configured in a SCA reference using the > REST binding and then call webSearch("YahooDemo", "Tuscany", 2) on a > SCA reference object in some component code, the HTTP GET call > generated is: > http://search.yahooapis.com/WebSearchService/V1/webSearch?param1=YahooDemo¶m2=Tuscany¶m3=2 > > > In another example, if we want to use a SOAP service which has a > request schema containing a bunch of non-required elements like: > <xs:element name="myMethod"> > <xs:complexType> > <xs:sequence> > <xs:element name="anArgument" minOccurs="0" type="xs:string"/> > <xs:element name="anotherArgument" minOccurs="0" type="xs:string"/> > <xs:element name="lastArgument" minOccurs="0" type="xs:string"/> > </xs:sequence> > </xs:complexType> > </xs:element> > > And this is again configured as an SCA reference (using the WS > binding). A component calling this operation would have to call > myMethod("", "", "some data") - which would mean the first 2 elements > get sent in the SOAP message with empty data (rather than being left > out completely) and only the "lastArgument" element would contain > anything useful. Doing this may also cause errors at the server as > elements are received without any data to work on. > > I think we can fix these case pretty easily (in some circumstances) by > adding a parameter name index to the tuscany::sca::core::Operation > object - so parameters have a number and an optional name. For scagen > generated C++ proxy objects, the parameter names can be based on those > provided by the header and set inside the proxy. For Python you can > use named arguments when calling methods like myMethod( > lastArgument="someData" ) or webSearch(appid="YahooDemo", > query="Tuscany", results=2). I don't think Ruby supports named > arguments, but there may be ways of using a Ruby dictionary object to > do this. > > If the Operation object passed to the ws or rest bindings contains > named arguments we can use them in creating the right SOAP message or > HTTP call. > > Any thoughts on this? Is it worth doing? > > Cheers > Andy > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > Yes, you're right it's important to support named arguments specially with REST. Very good idea! -- Jean-Sebastien
+1 --
Pete