Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
213
Добавлен:
17.04.2018
Размер:
2 Мб
Скачать

ИП. 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;

Соседние файлы в папке Интернет технологии