snichols I'm working on a Tcl client to integrate to a web service. I have an example of how the SOAP envelope should look it is using two complex data types. I'd prefer to use Tcl SOAP then have to code the XML using tDOM and HTTP. Here's my Tcl code that generates a SOAP request envelop that's close but not good enough for the web service:
package require SOAP package require rpcvar namespace import -force rpcvar::typedef typedef { Username DATA Password DATA Nonce DATA Created DATA RemoteUser DATA RemoteClient DATA RemoteAddress DATA EnvironmentalData DATA SessionID DATA } authentication typedef { Authentication authentication ApplicationType DATA RequestID DATA WebUserID DATA WebUserName DATA PlanID DATA EmployerID DATA MemberID DATA EntityType MEMBER EntityReferenceNumber DATA Password DATA EncryptionMethod PLAINTEXT InputMethodEditor TELEPHONE } webUser SOAP::create isWebUserAuthenticated -proxy "http://localhost/superSOAP/webcontrol.asmx" \ -action "http://www.atune.biz/web/services/WC/2006-01/isWebUserAuthenticated" \ -uri "http://www.atune.biz/web/services/WC/2006-01" \ -params {WebUser webUser}
When the soap method is called it generates this as the SOAP request :
<?xml version="1.0"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP- ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"> <SOAP-ENV:Body> <ns:isWebUserAuthenticated xmlns:ns="http://www.atune.biz/web/services/WC/2006-01"> <WebUser> <Authentication> <Username>IVRUSER</Username> <Password>newPassword</Password> <Nonce></Nonce> <Created></Created> <RemoteUser>TESTER</RemoteUser> <RemoteClient>Apropos</RemoteClient> <RemoteAddress>127.0.0.1</RemoteAddress> <EnvironmentalData></EnvironmentalData> <SessionID></SessionID> </Authentication> <ApplicationType>MOL</ApplicationType> <RequestID></RequestID> <WebUserID></WebUserID> <WebUserName>157014233</WebUserName> <PlanID>RS</PlanID> <EmployerID>-1</EmployerID> <MemberID>-1</MemberID> <EntityType>MEMBER</EntityType> <EntityReferenceNumber>0</EntityReferenceNumber> <Password>6149</Password> <EncryptionMethod>PLAINTEXT</EncryptionMethod> <InputMethodEditor>TELEPHONE</InputMethodEditor> </WebUser> </ns:isWebUserAuthenticated> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
I need the SOAP above envelope to look like this working version (both are very close):
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <isWebUserAuthenticated xmlns="http://www.atune.biz/web/services/WC/2006-01"> <WebUser> <Authentication Enabled="1"> <Username>IVRUSER</Username> <Password Type="PLAINTEXT" Token="*NONE*">newPassword</Password> <Nonce></Nonce> <Created>20060309T080101</Created> <RemoteUser>TESTER</RemoteUser> <RemoteClient>APROPOS</RemoteClient> <RemoteAddress>127.0.0.1</RemoteAddress> <EnvironmentData></EnvironmentData> <SessionID></SessionID> </Authentication> <ApplicationType>MOL</ApplicationType> <RequestID></RequestID> <WebUserID></WebUserID> <WebUserName>157014233</WebUserName> <PlanID>RS</PlanID> <EmployerID>-1</EmployerID> <MemberID>-1</MemberID> <EntityType>MEMBER</EntityType> <EntityReferenceNumber>0</EntityReferenceNumber> <Password>6149</Password> <EncryptionMethod>PLAINTEXT</EncryptionMethod> <InputMethodEditor>TELEPHONE</InputMethodEditor> </WebUser> </isWebUserAuthenticated> </soap:Body> </soap:Envelope>
Any ideas what I need to change in my TclSOAP command calls to make the SOAP envelope look like the latter XML above? Its currently generating the first XML. I notice a couple of things different. The latter has an Enabled="1" attribute and its not using the /ns: namespace. The latter envelop works.
Thanks in advance. snichols.