[Laszlo-dev] soap support

ono keiji keiji_ono at net8.co.jp
Thu Dec 11 23:48:14 PST 2008


I have been checking LPP-5172, and i found the cause that the getValue() of param class in rpc.lzx.
These 2 case code works fine( you can see this in the test/rpc/soap/soaptest3.lzx ).

    1.<remotecall funcname="whatString">
      	<param>
           <method name="getValue">
        	return canvas.soaptest.makedoc( parent.name, s.text );
       	   </method>    	
        </param>
      </remotecall>
		      :
      <button text="whatString" onclick="canvas.soaptest.whatString.invoke()"/>

    2.<remotecall funcname="whatString"/>
                      :
      <button text="whatString" onclick="canvas.soaptest.whatString.invoke( canvas.soaptest.makedoc( parent.name, s.text ), null )"/>

But this code dose not work.This is the popular style, as in dev-guide and api-ref.And this works in lps-3.3.3.

    3.<remotecall funcname="whatString">
          <param value="${canvas.soaptest.makedoc( parent.name, s.text )}"/>
      </remotecall>
		      :
      <button text="whatString" onclick="canvas.soaptest.whatString.invoke()"/>


>From these, i guess it is bad to implement the getValue() at param class in rpc.lzx.
So i suspicious the type of value attribute in param class. It is 'expression' now.

Any advices?

ono keiji


ono keiji さんは書きました:
> Thank you Henry, i will try this issue, and LPP-5172 should be reopened.
> 
> 
> Henry Minsky さんは書きました:
>> Here is a very simplified description of the SOAP implementation.
>> Please ask me if you need any
>> further information or have any questions.
>>
>> You can watch some of the transactions by turning on debug logging on
>> the server in
>> WEB-INF/lps/config/lps.xml:
>>
>>         <logger name="org.openlaszlo" additivity="false">
>>             <priority value="debug" />
>>             <appender-ref ref="lps" />
>>         </logger>
>>
>>         <logger name="org.apache.axis" additivity="false">
>>             <priority value="info" />   <!-- ??? I;m not sure about
>> this one ???? -->
>>             <appender-ref ref="lps" />
>>         </logger>
>>
>> And also using Firebug or other debugger to watch the HTTP
>> transactions when you run examples.
>>
>> There are some test cases in test/rpc/soap/*.lzx. The dotnet-math.lzx
>> one works now.
>>
>>
>>
>> The SOAP package does two things:
>>
>>     Loading the SOAP WSDL and Creating Proxy Functions
>>
>> Initially, when a <soap> service is instantiated, it will send a
>> message to the LPS server, to get the WSDL description of the service.
>>
>> The Apache AXIS library encode the WSDL as a JSON expression which is
>> sent back to the Laszlo application.
>>
>>
>> In the lps/components/rpc/soap.lzx:
>>
>> The method soap.load() is called to load the SOAP WSDL, and build
>> proxy stub methods for each SOAP method that is listed.
>>
>> soap.load() ==>
>>    LzSOAPService.loadObject(<callback delegate>, <WSDL-location>)
>>
>>    LzSOAPService.loadObject makes a request to the LPS server, using a
>>    request object (LzSOAPDataRequest), with a type "load".
>>
>>    This is handled on the server side by the SOAP response handler:
>>
>>    The request has a URL starting with "soap://" which is handled by this code
>>    org/openlaszlo/servlets/responders/ResponderCache.java ==>
>>       org.openlaszlo.data.json.SOAPDataSource.getData()
>>
>>       The request has type of either "load", or "invoke". I will describe
>>       "invoke" later.
>>
>>       If the request is "load", then getData() calls
>>       org.openlaszlo.data.json.SOAPDataSource.getService() which
>>       returns an object of type
>>       org.openlaszlo.remote.json.soap.LZSOAPService.
>>
>>       This represents the WSDL list of methods, obtained through the
>>       use of the Apache AXIS library. This is then returned to the
>>       Laszlo client by returning a new SOAPData object. (The SOAPData
>>       class is defined in SOAPDataSource.java)
>>
>>    For example, for the test app
>> http://127.0.0.1:8080/trunk/test/rpc/soap/dotnet-math.lzx?lzr=dhtml
>>    The request would have these parameters
>>
>> lzt	xmldata
>> reqtype	GET
>> request	load
>> url	soap://soap
>> wsdl	http://www.dotnetjunkies.com/quickstart/aspplus/samples/services/mathservice/cs/mathservice.asmx?WSDL
>>
>>     The response is this JSON description of the SOAP service method
>> {"__LZstubload": true,
>>  "stubinfo": {"service":"MathService",
>>               "port": "MathServiceSoap",
>>               "wsdl":
>> "http:\/\/www.dotnetjunkies.com\/quickstart\/aspplus\/samples\/services\/mathservice\/cs\/mathservice.asmx?WSDL",
>>               "__LZctypes": {},
>>               "__LZnamespace": "http:\/\/tempuri.org\/"},
>>  "stub": {"Multiply": {"parts": [["tns:Multiply",
>>                                   null]],
>>                        "opstyle": "document",
>>                        "operation": "Multiply",
>>                        "port": "MathServiceSoap",
>>                        "service": "MathService",
>>                        "wsdl":
>> "http:\/\/www.dotnetjunkies.com\/quickstart\/aspplus\/samples\/services\/mathservice\/cs\/mathservice.asmx?WSDL"},
>>           "Divide": {"parts": [["tns:Divide",
>>                                 null]],
>>                      "opstyle": "document",
>>                      "operation": "Divide",
>>                      "port": "MathServiceSoap",
>>                      "service": "MathService",
>>                      "wsdl":
>> "http:\/\/www.dotnetjunkies.com\/quickstart\/aspplus\/samples\/services\/mathservice\/cs\/mathservice.asmx?WSDL"},
>>           "Subtract": {"parts": [["tns:Subtract",
>>                                   null]],
>>                        "opstyle": "document",
>>                        "operation": "Subtract",
>>                        "port": "MathServiceSoap",
>>                        "service": "MathService",
>>                        "wsdl":
>> "http:\/\/www.dotnetjunkies.com\/quickstart\/aspplus\/samples\/services\/mathservice\/cs\/mathservice.asmx?WSDL"},
>>           "Add": {"parts": [["tns:Add",
>>                              null]],
>>                   "opstyle": "document",
>>                   "operation": "Add",
>>                   "port": "MathServiceSoap",
>>                   "service": "MathService",
>>                   "wsdl":
>> "http:\/\/www.dotnetjunkies.com\/quickstart\/aspplus\/samples\/services\/mathservice\/cs\/mathservice.asmx?WSDL"}}}
>>
>>
>>    This is used in the client to build an object on the <soap> object
>>    named "this.proxy", which holds the remote APIs. This holds the proxy
>>    stub methods (Add, Multiply, Subtract, ... in this example). See the method
>>    soap.makeProxyStubFunction in lps/components/rpc/soap.lzx.
>>
>> ================================================================
>>
>> 		Invoking A Remote Method
>>
>>
>> You can invoke a method by calling the SOAP proxy functions directly,
>> or by using the <remotecall> mechanism. See the test/rpc/soap/dotnet-math.lzx
>> example. It shows the two different ways to invoke SOAP methods.
>>
>> The <soap> object has a 'proxy' property which contains proxy stub
>> functions that were created automatically. You can also call the soap
>> object's "invoke()" method with the name of the method you want to call.
>>
>> The things that  happen when you invoke a method are handled by the
>> LZSOAPService.invoke() (in lps/components/rpc/library/soap.js).
>>
>>
>> 1) A SOAP request is made by building a partial XML SOAP request on
>> the client, and sending it to the LPS server. It is not a full SOAP
>> request, just the parameters are encoded as XML. The other
>> information, such as the method name and SOAP URI are added as query
>> args:
>>
>>     params.request   = 'invoke';
>>     params.wsdl      = opts['wsdl'];
>>     params.service   = opts['service'];
>>     params.port      = opts['port'];
>>     params.operation = opts['operation'];
>>     params.opstyle   = opts['opstyle'];
>>
>> The parameters are encode by the method LZSOAPService.__LZencSerializeParams().
>>
>> 2) The SOAP request is handled on the server by the
>> org.openlaszlo.data.json.SOAPDataSource class.
>>
>> The SOAPDataSource.invoke() method gets the SOAP service using the
>> Apache AXIS library,
>> and invokes it, passing the parameters which were encoded as XML on the client.
>>
>>
>> 3) The response comes back to the AXIS library, and is serialized as a
>> JSON expression using the
>> org.openlaszlo.remote.json.soap.encoding.SOAPDataEncoder class, and is
>> sent back to the Laszlo client application.
>>
>> 4) The JSON response is converted to Javascript values and returned
>> by the callback
>>
>>
>>
>> On Tue, Dec 2, 2008 at 7:38 PM, ono keiji <keiji_ono at net8.co.jp> wrote:
>>> Ok, i am expecting your note. :^)
>>> This is a real OSS.
>>>
>>> Before that, could i ask you some questions?
>>>
>>>  1.Maybe this bug miss v4.2. What version can i target and repository ?
>>>  2.Which should i take the latest axis library or Adobe RPC library ?
>>>   And in the case of DHTML, can we run Adobe RPC in SOAP ?
>>>  3.The mean of 'converted it to send JSON' is OpenLaszlo dose not use XML-type in SOAP any more ?
>>>  4.Are you using any frameworks in org.openlazlo.*, something like spring ?
>>>  5.Someone guide me during this coding ? ,-)
>>>   Are you always discussing with other members on IRC ?
>>>
>>> The time is coming to contribute.
>>>
>>> Best,
>>>
>>> ono keiji
>>> ono at net8.co.jp
>>>
>>>
>>> Henry Minsky さんは書きました:
>>>> I will write up a description of what I know of how the system works.
>>>> It is unfortunately overly complex I think,
>>>> because it uses an older version of the apache axis soap library on
>>>> the server, which is particularly hard to understand code, and also
>>>> the format which is sent back and forth from the laszlo app to the
>>>> server is not well documented anyplace. At at least converted it to
>>>> send JSON instead of swf byte code, so it is easier to understand and
>>>> debug the wire protocol now.  Perhaps you can become the new expert!
>>>>
>>>>
>>>> On Tue, Dec 2, 2008 at 11:34 AM, ono keiji <keiji_ono at net8.co.jp> wrote:
>>>>> Hi Henry,
>>>>>
>>>>> Thank you for your direct mail. :-)
>>>>> But that so bad, you mean v4.2 won't contain the demo of Amazon-Soap too ?
>>>>> I believe there are a lot of soap user in OpenLaszlo.
>>>>> If i know where put my hand in, i will make it.
>>>>> Do you have some UML ?
>>>>>
>>>>> Best,
>>>>>
>>>>> ono keiji
>>>>> ono at net8.co.jp
>>>>>
>>>>>
>>>>>
>>>>> Henry Minsky さんは書きました:
>>>>>> Hi Keiji,
>>>>>>
>>>>>> Unfortunately, the support for SOAP has become a lower priority while
>>>>>> other swf9 features
>>>>>> are being worked on. I am not sure when I will have time to work more
>>>>>> on the SOAP
>>>>>> issues.
>>>>>>
>>>>>> One thing I have looked at is that in Flash 9, there is an adobe RPC
>>>>>> library which supports
>>>>>> SOAP and XMLRPC, I believe. There is a .swc library that needs to be
>>>>>> linked in at compile time
>>>>>> explicitly I think, I have not yet experimented with it, but it might
>>>>>> be a way to get SOAP
>>>>>> support in the future, and it does not rely on a server-side
>>>>>> transcoding process, so it
>>>>>> would possibly be suitable for SOLO apps.
>>>>>>
>>>>>>
> 



More information about the Laszlo-dev mailing list