powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Проблема с PEAR XML_RPC
1 сообщений из 1, страница 1 из 1
Проблема с PEAR XML_RPC
    #38827317
Vasiliy_Kashkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обнаружил неправильную на мой взгляд работу библиотеки PEAR XML_RPC:
1). аргументы любых скалярных типов поступают в функцию-обработчик как строки
2). не контролируется фактический тип данных аргументов процедуры

Чтобы продемонстрировать проблему создал простой XML-RPC сервис:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<?	require_once("XML/RPC/Server.php");
	require_once("XML/RPC.php");
	
	function proc($params)
	{
		$arg1=$params->getParam(0)->getval();//В любом случае будет присвоена строка			
		return new XML_RPC_Response(new XML_RPC_Value("Значение: [$arg1] Тип: [".gettype($arg1)."]",'string'));
	}
		
	$dispMap=Array("myproc"=>
					Array(
						"function" => "proc",					
						"signature"=>Array(
								Array('string','int'),								
								)		
					)					
			);	
	
	$srv=new XML_RPC_Server($dispMap,1,0); ?>



Далее обратился к нему вручную отправив запрос:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
  <methodName>myproc</methodName>
  <params>
    <param>
      <value><int>1</int></value>
    </param>    
  </params>
</methodCall>



И получил ответ:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
   <params>
      <param>
         <value><string>Значение: [1] Тип: [string]</string></value>
      </param>
   </params>
</methodResponse>



То есть почему-то аргумент типа int был принят как строка (string).

Другая проблема в том, что почему-то не контролируются типы данных аргументов сервиса. То есть контролируется соответствие типа данных, записанного в теге типу данных, объявленному в сигнатуре ($dispMap), но фактический тип не контролируется, то есть можно написать:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
  <methodName>myproc</methodName>
  <params>
    <param>
      <value><int>1.234567</int></value>
    </param>    
  </params>
</methodCall>


и это не вызовет ошибки. Вернётся ответ:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
   <params>
      <param>
         <value><string>Значение: [1.234567] Тип: [string]</string></value>
      </param>
   </params>
</methodResponse>


то есть удалось отправить double в теге int.

Объясните пожалуйста, в чём проблема. Это библиотека PEAR XML_RPC такая кривая, или я неправильно её использую (если так, то что конкретно делаю неправильно?)?

Заранее спасибо.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Проблема с PEAR XML_RPC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]