Refresh WSDL van webservices in ColdFusion

06-09-2012 | Marcel van Langen | ColdFusion | webservices, verversen, opnieuw, definitie, stubs

Als programmeur zul je regelmatig te maken krijgen met webservices. De definitie van die webservice wordt vastgelegd in de zogenaamde WSDL (WebServices Definition Language). ColdFusion cachet deze WDSL, wat natuurlijk prettig is binnen een productie-omgeving. Maar vroeg of laat zul je een keer wijzigingen maken aan de remote webservice CFC. Hoe refresh je dan de WSDL definities, zodat alles goed blijft draaien?

Het probleem is evident: je hebt een remote CFC die als webservice fungeert. De consumerende CFC (ik ga er maar even vanuit dat je hiervoor een CFC gebruikt) benadert deze webservice. De WSDL van de remote CFC wordt aan de consumerende kant gecachet. Het grote nadeel moge duidelijk zijn: als er eens iets wijzigt aan de kant van de webservice, dan maakt de consumerende kant gebruikt van een verouderde WSDL. Met alle gevolgen van dien.

Om dat op te lossen moeten we er dus voor zorgen dat de WSDL opnieuw wordt opgehaald. Gelukkig biedt ColdFusion je een aantal mogelijkheden. Zo kun je dit handmatig doen via de ColdFusion Administrator. Vanaf ColdFusion 7 is er bovendien een set met CFC's vrijgegeven onder de noemer Admin API. Deze kun je ook gebruiken om de webservices te refreshen. Ikzelf gebruik eigenlijk altijd de Service Factory. Deze methode wordt hieronder dan ook verder toegelicht.

Refresh webservice via Service Factory

Deze manier spreekt me erg aan. Uitgangspunt is wel dat je via de ColdFusion code toegang hebt tot de Java objecten, maar dat zal vrijwel altijd het geval zijn (tenzij je in een strenge shared hosting omgeving ColdFusion hebt draaien). Via de volgende code kun je eenvoudig een webservice refreshen:

<cfobject type="JAVA" action="Create" name="factory" class="coldfusion.server.ServiceFactory">
<cfset RpcService = factory.XmlRpcService>
<cfset RpcService.refreshWebService("http://www.jouw_ws.nl/voorbeeld.cfc?wsdl") />

En mocht je alle webservices ineens willen refreshen, dan kan dat ook:

<cfobject action="CREATE" type="JAVA" class="coldfusion.server.ServiceFactory" name="factory">
<cfset xmlRpc = factory.getXMLRPCService() />
<cfset webServices = xmlRpc.mappings />
<cfloop item="webService" collection="#webServices#">
<cfset xmlRpc.refreshWebService(webService) />
</cfloop/>

Zo eenvoudig is het!

Over Morloff

Morloff ontwerpt en realiseert succesvolle webtoepassingen op het gebied van procesoptimalisatie, eCommerce en rapportage door de inzet van moderne webtechnieken, sociale media en zoekmachine optimalisatie.

over ons | diensten | portfolio | contact | route

naar website IJsmonster.nl naar website ICT intermediairs naar website marcelvanlangen.com

Twitter

Morloff

Cuneraweg 169a
3911 RH Rhenen

M +31 (0)6 - 515 96 189
W www.morloff.nl
E contactformulier

Morloff op Twitter Morloff op Facebook Morloff op LinkedIn Morloff via RSS