On 6/3/07, Geoff Crawford <[EMAIL PROTECTED]> wrote:
At 10:35 AM 6/2/2007, John Sundman wrote: >Second, as of 4.0.2 the XML-RPC APIs now work in both DHTML and SWF >runtimes in SOLO mode -- no LPS required. > Thanks for that! Sounds like you might be the right person to ask a couple of questions on RPC - particularly SOAP. Any chance the SOAP will also be available to SOLO any time soon?
Hi, I'm doing the most current work on the RPC libraries in the SWF and DHTML runtimes. There are a bunch of good issues you've raised, I'll try to address some of them and give an overview of what the plans are. I cc'd this discussion to Laszlo-Dev as well. I'm currently working on some SOAP calls, which unfortunately
the system is not following the WSDL and the name spacing is off. Ways I've thought of getting around it are: 1. just going to some plain XMLHttpRequest code - are you aware the DHTML version of XMLHttpRequest is broken? I'm playing in SWF and working code complains about using lz.XMLHttpRequest because it's duplicating the name?? I can give you details and file a bug report if need be.
Please file a bug report, thanks! The SWF implementation of XMLHTTPRequest was just a simple wrapper around the standard data loading API, to make AJAX programmers feel more at home. That was put in long before we started implementing the DHTML runtime. Now that we have DHTML, we need to figure out how to reconcile this. I'd like to leave the native DHTML XMLHTTPRequest, and rename the pseudo-XMLHTTPRequest class that is in SWF, or at least make people use the 'lz' prefix, so there is no warning or shadowing going on. 2. I have to do 3 calls instead of one to get my XML dataset,
otherwise I could fudge my own XML to the datatset's loading of the data. So I ruled that out. 3. I looked heavily at the dhtml (and SWF versions too) of rpc.js, namespace.js, and soap.js. I thought I saw some serialize routines that were creating the XML in namespace.js, but changing that code didn't affect the XML generated in the SOAP request. I can sort of see where some of the values used in the SOAP envelope are being created, but not the actual XML body. I'm thinking it builds some kind of prototypical XML at time of loading the WSDL. If you could direct me to where that code is, I'd be happy to make some corrections. 4. Because my issue is with name spacing, I was thinking I might also be able to just change the name space lookup table to make it work. Unfortunately I can't see to track down where it applies that table in order to know what changes in the table would produce the right name space. Basically the WSDL calls for each request to have a name space value on the body that is equal to the domain default plus ":" and the port name. The SOAP implementation ignores the WSDL's definition of the message it should build and uses a single value all the time that came from the WSDL:Definition section. (I can confirm that because I mess with my WSDL and see that changing in the SOAP request) 5. Maybe if I someone could also point me to where the XML is being sent out, I could do a quick transformation on the one attribute of the one node in question. How can I get access to what SOAP is sending out just before the actual XMLHttpRequest is invoked? OK so I'm going to push my luck here, and also ask if there isn't a way to share my WSDL between two different SOAP instances? What I'd really love to see is the WSDL= be able to be set to a dataset instead of always being a URL. I'm working on ERP systems - there are lots and lots of ports, and multiple operations in each of the ports. Have you noticed the WSDL load is actually quite a bit slower than loading the same document into a dataset? (not to mention the issues of async calls when you have 19 calls to the exact same WSDL document) I have ideas about what that code should look like, but don't know enough of where to start. Thanks for listening anyway. ;-)
I'll post a separate message to laszlo-dev which outlines how the current system works. Briefly, it does do some XML serialization on the client to format the SOAP request. Then the message is passed to the server, which relies on the apache axis library on the server to implement the SOAP transaction with the back-end, and then that response is encoded as SWF byte code (for Flash) or JSON (for DHTML) and sent back to the client. Some namespace issues may better be dealt with on the server end than on the client. What I'd really like to see is an implementation of the SOAP protocol entirely in Javascript, that could be ported to LZX. That would get the LPS server and Apache-axis out of the loop entirely. This would allow SOLO apps to be SOAP clients. (And I'd like to do that with XMLRPC as well, which should be an order of magnitude easier than the SOAP client implementation). I've been looking around to see if anyone has implemented an open source SOAP client in Javascript, but so far haven't found anything that is even close to compliant with the spec. I'd be interested if you know of anything that looks promising in that area? The LPS server is currently using a fairly old version of the apache axis and related utility libraries. There are some SOAP bugs that may be fixed by moving to a more recent apache axis and related utility libraries, but the apache APIs have drifted a lot, so this is not trivial. -- Henry Minsky Software Architect [EMAIL PROTECTED]
