2010-07-21 5 views
1

Добрый день,Передача xml в nusoap

У меня возникли проблемы с передачей xml в nusoap.

образца: я передать этот XML

<test>123</test> 

Ответ NuSOAP вне

test123/test 

Чем больше и меньше, чем знак удаляется.

Это мой код для сервера:


require_once('nusoap/nusoap.php'); 
$server = new nusoap_server; // Create server instance 

$server->configureWSDL('demows','http://example.org/demo'); 

$server->register('myFunction', 
    array("param"=>"xsd:string"), // input 
    array("result"=>"xsd:string"), // output 
    'http://example.org/demo' 
); 

function myFunction($parameters) { 
    return $parameters; 
} 

// Use the request to try to invoke the service 
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA: ''; 
$server->service($HTTP_RAW_POST_DATA); 

Это мой код клиента:


require_once('nusoap/nusoap.php'); 

$client = new nusoap_client('http://localhost/nusoap/ws.php?wsdl', true); 

$clientparam = '<test>123</test>'; 

$result = $client->call('myFunction', 
    array('param'=>$clientparam) 
); 

print_r($result); 

* Обратите внимание, что приведенный выше код работает на PHP версии 5.3.0, но не на PHP версии 5.2.0-8 + etch13, которая используется в нашей продукции.

Я искал сеть по любым вопросам в версии 2, но не нашел. Любая помощь очень ценится. TIA

ответ

0

Я вообще не знаю nusoap, но похоже, что ваши сущности отбрасываются. Возможно, стоит контролировать объекты на обоих концах, например, путем изменения «>» для & gt ;, '<' для & lt; либо вручную, либо используя такую ​​функцию, как htmlentities()

+0

уже пробовал, но все амперсанды удаляются. > становится gt; < становится lt; Таким образом, у меня все еще нет правильного формата xml – roel

+0

Определенно кажется, что он удаляет объекты тогда.У вас есть какой-либо контроль с другой стороны, т. Е. Не могли бы вы использовать некоторые символы не-сущности (возможно, как [test] 123 [/ test]) и реконструировать с другой стороны ?. Есть несколько сообщений об аналогичных с libxml десорбирующих сущностях, таких как: http://bugs.php.net/bug.php?id=45996, который был исправлен в 5.2.9. – Woody

+0

звучит так, как будто вы видите: http://drupal.org/node/347298 – Woody

0

Не уверен, что вы используете другую версию nusoap, чем я, но я использую прокси-сервер, который, кажется, работает. Я также экземпляр клиента с SoapClient, а не nusoap_client (не видел, что раньше):

$client = new soapclient('http://localhost/nusoap/ws.php?wsdl', true); 
$proxy = $client->getProxy(); 
$response = $proxy->call("myfunction", array('test' => 123)); 
1

Модернизации Libxml2 и восстановить PHP.

+0

Я подтверждаю, что это ошибка, о которой сообщил Вуди. Просто понизите libxml2 (или обновите его еще лучше). Вам не нужно перестраивать PHP, хотя, если вы используете стандартные пакеты, просто не забудьте перезагрузить веб-сервер. – Yvan

0

Да и ответ в soapval класс.

Маленький грязный, но простой пример: here. В быстром - вам придется обернуть этим классом любой не общий тип, то есть i.e php array. Конечно, вложенность этих оберток может произойти, но это не против дизайна.

0

Если вы хотите передать значение xml в сообщении с мылом, и вы управляете как сервером, так и клиентом (или, по крайней мере, вы можете проинструктировать клиента), почему base64 не кодирует ваш xml. Затем синтаксический анализатор будет рассматривать его как обычную строку и не путать.