Sven,

that use case was one reason to implement mustache. I use it to generate SOAP 
calls from templates. As Mustache can have nested objects in processing you 
could even have more complex SOAP calls. Although complex/nested SOAP calls are 
far from being a good idea.

Norbert


> Am 03.03.2015 um 00:12 schrieb Sven Van Caekenberghe <[email protected]>:
> 
> We have no SOAP implementation in Pharo (yet). But that does not mean we 
> cannot do simple SOAP calls. Here is a practical example: checking the 
> validity of a EU VAT number. 
> 
> This is a public service offered by the EU through a SOAP API. The WSDL can 
> be found here: http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
> 
> From this we know that the endpoint is 
> http://ec.europa.eu/taxation_customs/vies/services/checkVatService
> 
> When you paste the WSDL URL in http://wsdlbrowser.com you can explore the API 
> (this site parses the WSDL to reveal its contents). The call that we need is 
> called 'checkVat'. We can copy the call template and POST it to the endpoint, 
> manually. If we load the XML Parser, we can interpret the result.
> 
> Here is the complete code:
> 
> | xml result |
> xml := ZnEntity 
>    with: (
> '<?xml version="1.0" encoding="UTF-8"?>
> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"; 
> xmlns:ns1="urn:ec.europa.eu:taxud:vies:services:checkVat:types">
>  <SOAP-ENV:Body>
>    <ns1:checkVat>
>      <ns1:countryCode>{1}</ns1:countryCode>
>      <ns1:vatNumber>{2}</ns1:vatNumber>
>    </ns1:checkVat>
>  </SOAP-ENV:Body>
> </SOAP-ENV:Envelope>' format: #('LU' '20165772')) 
>    type: ZnMimeType applicationXml.
> result := ZnClient new 
>    url: 'http://ec.europa.eu/taxation_customs/vies/services/checkVatService'; 
>    entity: xml;
>    contentReader: [ :entity | XMLDOMParser parse: entity contents ]; 
>    post.
> ((result allElementsNamed: 'checkVatResponse') first 
>    elementsCollect: [ :each | each name -> each contentString ]) asDictionary.
> 
> =>
> 
> a Dictionary(
>  'address'->'31, RUE STE ZITHE L-2763  LUXEMBOURG' 
>  'countryCode'->'LU' 
>  'name'->'ITUNES S.A R.L.' 
>  'requestDate'->'2015-03-03+01:00' 
>  'valid'->'true' 
>  'vatNumber'->'20165772' )
> 
> Of course, this will only work with simple SOAP interfaces.
> 
> Sven
> 
> --
> Sven Van Caekenberghe
> Proudly supporting Pharo
> http://pharo.org
> http://association.pharo.org
> http://consortium.pharo.org
> 
> 
> 
> 
> 

Reply via email to