Размещение сервисного компонента как веб-сервиса

SCA может генерировать WSDL из аннотаций сервисного компонента, для его легкого развертывания как веб-сервиса. Для указания SCA, что надо создавать WSDL, необходимо добавить аннотацию @binding.soap под аннотацией @service и указать параметры и возвращаемые значения методов, используя аннотации @param и @return. Эти аннотации будут считываться при создании WSDL, а порядок и типы параметров определяют содержимое раздела WSDL <schema>.

SCA всегда генерирует WSDL обернутый как документ/литерал для компонентов предоставляющим веб-сервис. Обратите внимание, что это не препятствует использованию сторонних веб-служб, с WSDL написанным в другом стиле.

В аннотации @param можно использовать 4 скалярных типа: boolean, integer, float и string. Они просто сопоставляются с типами XML-схемы с тем же именем в WSDL. Пример ниже представляет собой простую реализацию службы StockQuote, которую вызывает компонент ConvertedStockQuote и показывает использование типов string и float.

Пример #1 Сервис StockQuote

<?php

include "SCA/SCA.php";

/**
 * Фуфульная реализация веб-сервиса StockQuote.
 *
 * @service
 * @binding.soap
 *
 */
class StockQuote {

    
/**
     * Получение котировки акции по ее имени.
     *
     * @param string $ticker Имя акции.
     * @return float Биржевая котировка.
     */
    
function getQuote($ticker) {
        return 
80.9;
  }
}
?>

На базе данного сервиса будет создана примерно такая WSDL (хотя, возможно, с местоположением службы, отличным от «localhost»):

Пример #2 Созданная WSDL

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xsi:type="tDefinitions"
    xmlns:tns2="http://StockQuote" xmlns:tns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:tns3="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" targetNamespace="http://StockQuote">
  <types>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
      targetNamespace="http://StockQuote">
      <xs:element name="getQuote">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ticker" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="getQuoteResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="getQuoteReturn" type="xs:float"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>
  </types>

  <message name="getQuoteRequest">
    <part name="getQuoteRequest" element="tns2:getQuote"/>
  </message>
  <message name="getQuoteResponse">
    <part name="return" element="tns2:getQuoteResponse"/>
  </message>
  <portType name="StockQuotePortType">
    <operation name="getQuote">
      <input message="tns2:getQuoteRequest"/>
      <output message="tns2:getQuoteResponse"/>
    </operation>
  </portType>
  <binding name="StockQuoteBinding" type="tns2:StockQuotePortType">
    <operation name="getQuote">
      <input>
        <tns3:body xsi:type="tBody" use="literal"/>
      </input>
      <output>
        <tns3:body xsi:type="tBody" use="literal"/>
      </output>
      <tns3:operation xsi:type="tOperation" soapAction=""/>
    </operation>
    <tns3:binding xsi:type="tBinding" transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
  </binding>
  <service name="StockQuoteService">
    <port name="StockQuotePort" binding="tns2:StockQuoteBinding">
      <tns3:address xsi:type="tAddress" location="http://localhost/StockQuote/StockQuote.php"/>
    </port>
  </service>
</definitions>

<!-- this line identifies this file as WSDL generated by SCA for PHP. Do not remove -->