[Laszlo-dev] soap support

ono keiji keiji_ono at net8.co.jp
Wed Dec 3 20:57:46 PST 2008


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