It all depends, the best way, is to use a 2 call method, where you
query the WSDL, and then, build the soap request from its contents,
and many times this is required. This is VERY easy, when you work in
a dev environment, that has a class, that will parse the WSDL, and do
most of the work for you. But witango doesn't do any of this for you.
So if your requirements, are to hit a wsdl, first, then build the the
soap request, based on its specs, it can be very complicated.
Sometimes, you query the wsdl, and the only thing that may change
from time to time, is the url, you are actually supposed to make the
request to, but sometimes, the wsdl will describe a slightly
different schema, or something of that nature.
My suggestion is this, don't do it in witango. Do it in JAVA, as a
bean, or VB, or RB, and write an external object, where you can use a
nice easy class built for you that does the work.
Here is a quick example of what I mean, here is an extremely simple
soap method, to get the current temperature for a zip code:
<?xml version="1.0"?>
<definitions name="TemperatureService" targetNamespace="http://
www.xmethods.net/sd/TemperatureService.wsdl" xmlns:tns="http://
www.xmethods.net/sd/TemperatureService.wsdl" xmlns:xsd="http://
www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/
wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/">
<message name="getTempRequest">
<part name="zipcode" type="xsd:string"/>
</message>
<message name="getTempResponse">
<part name="return" type="xsd:float"/>
</message>
<portType name="TemperaturePortType">
<operation name="getTemp">
<input message="tns:getTempRequest"/>
<output message="tns:getTempResponse"/>
</operation>
</portType>
<binding name="TemperatureBinding" type="tns:TemperaturePortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/
soap/http"/>
<operation name="getTemp">
<soap:operation soapAction=""/>
<input>
<soap:body use="encoded" namespace="urn:xmethods-Temperature"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace="urn:xmethods-Temperature"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="TemperatureService">
<documentation>Returns current temperature in a given U.S. zipcode
</documentation>
<port name="TemperaturePort" binding="tns:TemperatureBinding">
<soap:address location="http://services.xmethods.net:80/soap/
servlet/rpcrouter"/>
</port>
</service>
</definitions>
now, you could build a soap request, based on this wsdl, by hand, and
use <@url to get the result, but what if the requirements, were to
parse this wsdl, on each call, for whatever reason? Well, take a
look, at how you would do it, in RealBasic 5.5 or above:
dim sm as SOAPMethod
// create new method and load WSDL document from URL
sm = new SOAPMethod("http://www.xmethods.net/sd/2001/
TemperatureService.wsdl")
// call the getTemp method and display the result
msgBox sm.getTemp(zipcodeFld.text)
Its like 3 lines of code, the class parses the wsdl, and you just
call the method, with the one parameter. It builds the entire soap
request for you, based on the wsdl. I am sure there are similar
classes in .NET, and I know there are in JAVA also. So a tool like
this, could be used to write a simple external action in witango.
Witango can do SOAP, but it can be painful, and many times, you run
into an encoding issue, or an xml issue, that makes the whole effort
for naught, because you hit something that witango can't do. Witango
5.5009 just doesn't have enough of the necessary tools, and such to
do this stuff reliably and easy. It can be done, but the more you do
it, you hit a brick wall.
Here is a post, from witango customer support, on how to build a soap
request, using <@url may be helpful:
Rick,
It is as easy as this.
<@ASSIGN request$WebService "http://www.witango.com/AddService.wws">
<@ASSIGN request$SoapPayload '<SOAP-ENV:Envelope xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://
127.0.0.1/webservice/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<SOAP-ENV:Body>
<Add_In_Request>
<Value1>10</Value1>
<Value2>20</Value2>
</Add_In_Request>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>'>
<@URL LOCATION='@@request$WebService' USERAGENT='Witango <@VERSION>
<@PLATFORM><@CRLF>Content-Type: text/xml<@CRLF>SOAPAction: "http://
www.witango.com/AddService.wws"' POSTARGS='<?xml version="1.0"
encoding="ISO-8859-1" ?><@CRLF><@VAR request$SoapPayload
ENCODING="NONE">'>
This is will call a tcf that is exposed as a web service on the
witango web site.
Calling a SOAP service on any platform from Witango Server 5.5 is
just as easy. The SOAPAction is also exposed via @HTTPATTRIBUTE.
All you need to do with the result is put it into a DOM variable
and grab the components you need using their element names with
XPATH expressions.
Witango Support
--
Robert Garcia
President - BigHead Technology
VP Application Development - eventpix.com
13653 West Park Dr
Magalia, Ca 95954
ph: 530.645.4040 x222 fax: 530.645.4040
[EMAIL PROTECTED] - [EMAIL PROTECTED]
http://bighead.net/ - http://eventpix.com/
On Aug 31, 2006, at 11:52 AM, Roland Dumas wrote:
Procedurally, is SOAP a 1 hit process or a 2?
Does the client send a properly packaged payload and wait for a
response? or does it ask for something and use that to create the
query?
I don't really want to know all about it, just enough to push the
query and interpret the response in this one case.
On Aug 31, 2006, at 11:48 AM, Scott Cadillac wrote:
Hi Roland,
they say
it's not so
simple. More moving parts because it's SOAP.
There is a bit to SOAP, but it still boils down to just HTTP and
posting and read text formatted as XML.
I think I slept through
the discussion of SOAP in San Diego.
T'sk, T'sk. I'll have to put a little black mark in my book ;-)
I have files called .wsdl and various test and debug docs.
Where to I go to decrypt this SOAP stuff?
Version 5.5 comes with some built-in SOAP features. I would
suggest starting there. Please note, I have not used or tried the
SOAP features of Witango - I primarily use .NET these days.
Best of luck Roland.
Scott Cadillac,
Email: [EMAIL PROTECTED]
http://scott.cadillac.bz
_____________________________________________________________________
___
TO UNSUBSCRIBE: Go to http://www.witango.com/developer/maillist.taf
______________________________________________________________________
__
TO UNSUBSCRIBE: Go to http://www.witango.com/developer/maillist.taf
________________________________________________________________________
TO UNSUBSCRIBE: Go to http://www.witango.com/developer/maillist.taf