Webservicezugriff Coldfusion <-> SAP
Wenn man in Coldfusion ein Webservice aufrufen möchte funktioniert das normalerweise so:
<cfinvoke webservice="http://webserviceurl?wsdl" method="MeineMethode" username="xxx" password="yyy" returnvariable="aTemp">
<cfinvokeargument name="mtUsername" value="USER1">
</cfinvokeargument>
</cfinvoke>
Coldfusion macht dann aus den Webservice Methoden JAVA Stub Objekte. Wenn es funktioniert! Hat das WSDL Fehler oder kann es aus irgendeinem anderen Grund das WSLD nlicht laden oder keine Objekte erzeugen ist der einzige Response den man erhält:
"Could not generate stub objects for web service invocation."
Eine sehr sinnvolle Fehlermeldung die keinerlei Hinweise enthält warum. Es könnte das wsdl fehlerhaft sein, die Verbindung generell nicht funktionieren oder sonst irgendwein Fehler aufgetreten sein. Dynamisch erzeugte Webservices können einem in diesem Fall in den Wahnsinn treiben.
Es gibt aber auch noch einen andern Weg um mit Coldfusion Webservices aufzurufen und damit zu arbeiten: via a cfhttp post! Als zusätzlicher Benefit ist es auch noch schneller als per <cfinvoke>
Beispiel für CF Webservice mit cfhttp post:
<cfset wsurl="http://webserviceurl?wsdl">
<cfset mymethod="MeineMethode">
<cfsavecontent variable="localscope.soapRequest">
<cfoutput>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:idm="http://xyz.at/x.integration.solman">
<soapenv:Header/>
<soapenv:Body>
<idm:mtUsername>
<bname>USER1</bname>
</idm:mtUsername>
</soapenv:Body>
</soapenv:Envelope>
</cfoutput>
</cfsavecontent>
<cfhttp url="#WSURL#" username="xxx" password="yyy" method="POST" resolveurl="NO" useragent="Axis/1.1">
<cfhttpparam type="header" name="SOAPAction" value="#WSURL##MyMethod#">
<cfhttpparam type="xml" name="body" value="#localscope.soapRequest#">
</cfhttp>
<cfset soapresponse="XMLParse(cfhttp.FileContent)">
<cfdump var="#localscope.soapresponse#">
Mit dem Open Source Tool SOAP UI kann man schnell aus dem WSDL das XML Request erzeugen lassen.





