- •Интернет-программирование
- •ИП. SOAP. Пример веб-сервиса. WSDL. definition
- •ИП. SOAP
- •ИП. SOAP. История.
- •ИП. SOAP. Идея
- •ИП. SOAP. Структура
- •ИП. SOAP. WSDL
- •ИП. SOAP. Структура WSDL
- •ИП. SOAP. Пример веб-сервиса
- •ИП. SOAP. Пример веб-сервиса. Архитектура
- •ИП. SOAP. Пример веб-сервиса. WSDL. types
- •ИП. SOAP. Пример веб-сервиса. WSDL. message
- •ИП. SOAP. Пример веб-сервиса. WSDL. Привязка метода
- •ИП. SOAP. Пример веб-сервиса. WSDL. binding
- •ИП. SOAP. Пример веб-сервиса. WSDL. service
- •ИП. SOAP. Пример веб-сервиса. Класс makeCalculateImpl
- •ИП. SOAP. Пример веб-сервиса. Сервер
- •ИП. SOAP. Пример веб-сервиса. Клиент
- •ИП. SOAP. Пример веб-сервиса. Результат работы
- •ИП. SOAP. Пример веб-сервиса. Клиент на Java
- •ИП. SOAP. Пример веб-сервиса. Клиент на Java
- •ИП. SOAP. Преимущества и недостатки
- •ИП. Java. Сборки
- •ИП. Java. Сборки
- •ИП. Java. Сборки
- •ИП. Java. Сборки. Пример файла сборки ant — build.xml
- •ИП. Java. Сборки. Пример файла сборки ant — build.xml
- •ИП. Java. Сборки. Ant. Тег ant.
- •ИП. Java. Сборки. Ant. Тег antcall.
- •ИП. Java. Сборки. Ant. Тег copy.
- •ИП. Java. Сборки. Ant. Коллекции ресурсов.
- •ИП. Java. Сборки. Ant. Тег fieldset.
- •ИП. Java. Сборки. Ant. Тег dirset.
- •ИП. Java. Сборки. Ant. Тег fiellist.
- •ИП. Java. Сборки. Ant. Тег delete.
- •ИП. Java. Сборки. Ant. Тег property.
- •ИП. Java. Сборки. Ant. Тег javac.
- •ИП. Java. Сборки. Ant. Тег jar.
- •ИП. Java. Сборки. Выполнение сборки из IDE
- •ИП. Java. Сборки. Выполнение сборки из IDE
- •ИП. Java. Сборки. Выполнение сборки из IDE
ИП. SOAP. Пример веб-сервиса. WSDL. types |
МИЭТ, 2017. |
<!-- Определение типов данных метода makeCalculate --> <types>
<xs:schema>
<xs:complexType name="Result"> <xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="Supremum" type="xs:int" /> </xs:sequence>
</xs:complexType> <xs:complexType name="BigData">
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="100" name="Item" type="xs:int" /> </xs:sequence>
</xs:complexType>
</xs:schema>
</types>
ИП. SOAP. Пример веб-сервиса. WSDL. message |
МИЭТ, 2017. |
<!-- Сообщения метода makeCalculate --> <wsdl:message name="makeCalculateRequest">
<wsdl:part name="parameters" element="tns:BigData" />
</wsdl:message>
<wsdl:message name="makeCalculateResponse"> <wsdl:part name="parameters" element="tns:Result" />
</wsdl:message>
ИП. SOAP. Пример веб-сервиса. WSDL. Привязка метода |
МИЭТ, 2017 |
<!-- Привязка метода к сообщениям --> <wsdl:portType name="makeCalculatePortType">
<wsdl:operation name="makeCalculate"> <wsdl:documentation>
Операция makeCalcultae вычисляет максимальное значение из массива BigData
</wsdl:documentation>
<wsdl:input message="tns:makeCalculateRequest" /> <wsdl:output message="tns:makeCalculateResponse" />
</wsdl:operation>
</wsdl:portType>
ИП. SOAP. Пример веб-сервиса. WSDL. binding |
МИЭТ, 2017. |
<!-- Привязка метода к протоколу веб-сервиса -->
<binding name="makeCalculateBinding" type="tns:makeCalculatePortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" /> <operation name="makeCalculate">
<soap:operation soapAction="" /> <input>
<soap:body use="literal" /> </input>
<output>
<soap:body use="literal" /> </output>
</operation>
</binding>
rpc: RPC предполагает, что <soap:Body> содержит элемент с именем вызываемого метода. Этот элемент, в свою очередь, содержит элемент для каждого параметра этого метода. <makeCalculate>
<BigData><Item>1</Item><Item>2</Item><Item>3</Item></BigData>
</makeCalculate>
document: <soap:Body> содержит один или более дочерних элементов, называемых частями. Для содержимого <soap:Body> нет правил форматирования SOAP.
literal: данные сериализуются в соответствии с XML схемой. В нашем случае - xmlns:xs="http://www.w3.org/2001/XMLSchema"
ИП. SOAP. Пример веб-сервиса. WSDL. service |
МИЭТ, 2017. |
<!-- Определение сервиса на сервере --> <service name="makeCalculateService">
<port name="makeCalculatePort" binding="tns:makeCalculateBinding"> <soap:address location="http://bitrixtest.ru/makecalculateservice.php" />
</port>
</service>
</definitions>
ИП. SOAP. Пример веб-сервиса. Класс makeCalculateImpl |
МИЭТ, 2017. |
<?
/**
* /classes/makeCalculateImpl.php */
class makeCalculateImpl {
public function makeCalculate($BigData){
$obj = serialize($BigData);
file_put_contents("log.txt",$obj); //Запишем содержимое в лог для отладки
$R = new Result();
$array = (array)($BigData->Item->int); //Получаем данные в массив из stdClass*
for($i=0; $i<count($array); $i++ ) { $R->Supremum+=$array[$i]; }
return $R;
}
}
//Класс результата class Result{
public $Supremum;
}
?>
* - если в PHP значение другого типа преобразуется в object, создается новый экземпляр встроенного класса stdClass.
ИП. SOAP. Пример веб-сервиса. Сервер |
МИЭТ, 2017. |
<?
//makecalculateservices.php header("Content-Type: text/xml; charset=utf-8"); header('Cache-Control: no-store, no-cache'); header('Expires: '.date('r'));
//Пути по-умолчанию для поиска файлов set_include_path(get_include_path()
.PATH_SEPARATOR.'classes'
.PATH_SEPARATOR.'objects');
//Путь к конфигурационному файлу, если он есть const CONF_NAME = "config.ini";
//Функция для автозагрузки необходимых классов function __autoload($class_name){
include $class_name.'.php';
}
ini_set("soap.wsdl_cache_enabled", "0"); // отключаем кеширование WSDL-файла для тестирования
//Создаем новый SOAP-сервер .PHP должен быть собран c опцией —enable-soap $server = new SoapServer("http://{$_SERVER['HTTP_HOST']}/wsdl/makeCalculateMiet.wsdl"); //Регистрируем класс обработчик
$server->setClass("makeCalculateImpl"); //Запускаем сервер
$server->handle();
ИП. SOAP. Пример веб-сервиса. Клиент |
МИЭТ, 2017. |
<?
...
ini_set('display_errors', 1); error_reporting(E_ALL & ~E_NOTICE);
// Классы class BigData {
public $Item;
}
class Result {
public $Supremum;
}
// создаем объект для отправки на сервер $bg = new BigData();
$bg->Item[]=1; $bg->Item[]=2; $bg->Item[]=3; var_dump($bg);
$uri = "http://bitrixtest.ru/wsdl/makeCalculateMiet.wsdl"; // создаем клиент
$client = new SoapClient($uri, array( 'soap_version' => SOAP_1_2)); //вызываем удаленный метод
$temp = $client->makeCalculate($bg); //выводим результат var_dump($temp);
ИП. SOAP. Пример веб-сервиса. Результат работы |
МИЭТ, 2017. |
ИП. SOAP. Пример веб-сервиса. Клиент на Java |
МИЭТ, 2017. |
package soap;
//импортируем пакеты для реализации SOAP import java.net.URL;
import java.net.MalformedURLException;
//импортируем классы для парсинга wsdl и блока service в нем import javax.xml.namespace.QName;
import javax.xml.ws.Service;
//интерфейс веб-сервиса и классы данных
//классы автоматически созданные NetBeance при импорте wsdl import client.BigData;
import client.Result;
import client.ObjectFactory;
//импортируем интерфейс метода makeCalculate
import soap.makeCalculateMIET;
//импортируем пакеты для заполнения BigData import java.util.ArrayList;
import java.util.List;
