Perl: Interfaccia Soap


Lo script Perl utilizza l'interfaccia SOAP per dialogare con il Server Soap allo scopo di ottenere i dati presenti nel DB.

Ciascuno script quindi:

  • prepara la domanda, indicando il servizio richiesto e i relativi parametri
  • invia la domanda via TCP/P
  • riceve la risposta via TCP/IP (il Server SOAP risponde sempre in XML, anche quando deve comunicare delle anomalie, ad esempio nella validazione dei parametri della domanda; l'unico caso in cui non arriva alcuna risposta al Client SOAP si verifica quando il Server SOAP con cui cerca di stabilire la connessione non č pių attivo)

Esempio di domanda effettuata dal Soap Client in Perl


# Modulo AR di interfaccia SOAP
use ArSoap::SoapCaller;

...

# Interfaccia SOAP
$response = SoapCaller::Call ( 'http://ar3.ar-ent.net:90/',
                               'ArSoap/Inet/Rs/Valori/Divise.ars',
                               'http://www.ar-ent.net/CmbDiv',
                               $parameters
                             );

...

Parametri (in formato XML) associati alla domanda


$parameters = '
  <s:Envelope xmlns:s="urn:schemas-xmlsoap-org:soap.v1"
              xmlns:xsi="http://www.w3.org/1999/XMLSchema/instance"
             xmlns:n1="http://www.ar-ent.net/">
    <s:Body>
      <n1:CmbDiv>
        <ar:question xmlns:ar="http://www.ar-ent.net/">
          <ar:parms>
            <ar:dt_rif>30-06-2000</ar:dt_rif>
            <ar:c_div_importi>EUR</ar:c_div_importi>
            <ar:nummax>20</ar:nummax>
            <ar:c_div>CAD</ar:c_div>
            <!-- ar:c_div>XYZ</ar:c_div -->
            </ar:parms>
        </ar:question>
      </n1:CmbDiv>
    </s:Body>
  </s:Envelope>';

Risposta favorevole (in formato XML) del Server Soap


$response = '
  <s:Envelope xmlns:s="urn:schemas-xmlsoap-org:soap.v1"
              xmlns:xsi="http://www.w3.org/1999/XMLSchema/instance">
    <s:Body>
      <ar:answer>
        <ar:status>ok</ar:status>
        <ar:divisa>
          <ar:n_div>3</ar:n_div>
          <ar:c_div>CAD</ar:c_div>
          <ar:dsc_lun>Dollari Canadesi</ar:dsc_lun>
          <ar:c_div_importi>EUR</ar:c_div_importi>
          <ar:dt_rif>30-06-2000</ar:dt_rif>
          <ar:cambi>
            <ar:cambio>
              <ar:dt>30-06-2000</ar:dt>
              <ar:dtjul>36707</ar:dtjul>
              <ar:valore>1,41570</ar:valore>
            </ar:cambio>
            <ar:cambio>
              <ar:dt>29-06-2000</ar:dt>
              <ar:dtjul>36706</ar:dtjul>
              <ar:valore>1,40520</ar:valore>
            </ar:cambio>
            <ar:cambio>
              <ar:dt>28-06-2000</ar:dt>
              <ar:dtjul>36705</ar:dtjul>
              <ar:valore>1,39400</ar:valore>
            </ar:cambio>

            ...

            <ar:cambio>
              <ar:dt>05-06-2000</ar:dt>
              <ar:dtjul>36682</ar:dtjul>
              <ar:valore>1,39050</ar:valore>
            </ar:cambio>
          </ar:cambi>
        </ar:divisa>
      </ar:answer>
    </s:Body>
  </s:Envelope>';

Risposta con errore (in formato XML) del Server Soap


$error = '
  <s:Envelope xmlns:s="urn:schemas-xmlsoap-org:soap.v1"
              xmlns:xsi="http://www.w3.org/1999/XMLSchema/instance">
    <s:Body>
      <s:Fault>
        <faultcode>s:Server</faultcode>
        <faultstring>Server Error</faultstring>
        <detail>
          <actor>PRSWE110::impl_CmbDiv()</actor>
          <content>Divisa con codice='XYZ' non presente</content>
        </detail>
      </s:Fault>
    </s:Body>
  </s:Envelope>';
dst.3soup4r • LastModified: 14-9-2007 • Gabriella Bozzolo