2014-03-08 2 views
4

Мой PHP-код пытается связаться с веб-службой.PHP soapCall создает нежелательные htmlEntities

Я хочу отправить: <ns1:in0><![CDATA[<node>

Но PHP посылает: <ns1:in0>&lt;![CDATA[&lt;node&gt;

Если я отправить запрос в <-version SoapUI, он отлично работает.

Если я отправляю запрос &lt;-version в SoapUI, он возвращает ошибку.

Мой код (без частной информации):

<?php 
    $wsdl_path='https://....wsdl'; 
    $ws_path='https://...'; 
    $var='<![CDATA[<node> 
      <subnode1> 
      ... 
      </subnoden>    
      </node>]]>'; 
    $methodName='methodName'; 

    $soapClient = new SoapClient($wsdl_path,array('location'=>$ws_path,'trace'=>true,'exceptions'=>false)); 
    $result = $soapClient->__soapCall($methodName,array(array("in0"=>($var)))); 

    echo "RESULT:\n"; 
    var_dump($result); 
    echo "\n************************\n"; 
    echo "REQUEST:\n" . $soapClient->__getLastRequest(); 
    echo "\n************************\n"; 
    echo "REQUEST HEADERS:\n" . $soapClient->__getLastRequestHeaders(); 
    echo "\n************************\n"; 
    echo "RESPONSE:\n" . $soapClient->__getLastResponse(); 
    echo "\n************************\n"; 
    echo "RESPONSE HEADERS:\n" . $soapClient->__getLastResponseHeaders(); 
    echo "\n************************\n"; 
    ?> 

Мой код работает:

RESULT: 
object(stdClass)#2 (1) { 
    ["out"]=> 
    NULL 
} 

************************ 
REQUEST: 
<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://..."><SOAP-ENV:Body><ns1:methodName><ns1:in0>&lt;![CDATA[&lt;node&gt; 
     &lt;subnode1&gt; 
     ... 
     &lt;/subnoden&gt;    
     &lt;/node&gt;]]&gt;</ns1:in0></ns1:methodName></SOAP-ENV:Body></SOAP-ENV:Envelope> 

************************ 
REQUEST HEADERS: 
POST ... HTTP/1.1 
Host: ... 
Connection: Keep-Alive 
User-Agent: PHP-SOAP/5.4.25 
Content-Type: text/xml; charset=utf-8 
SOAPAction: "" 
Content-Length: 783 


************************ 
RESPONSE: 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><methodNameResponse xmlns="http://..."><out xmlns="http://..." xsi:nil="true"></out></methodNameResponse></soap:Body></soap:Envelope> 
************************ 
RESPONSE HEADERS: 
HTTP/1.1 200 OK 
Date: ... 
Server: Apache/2.2.15 HP-UX_Apache-based_Web_Server (Unix) DAV/2 mod_ssl/2.2.15 OpenSSL/0.9.8o 
X-Powered-By: Servlet/2.4 JSP/2.0 
Connection: close 
Transfer-Encoding: chunked 
Content-Type: text/xml; charset=UTF-8 

************************ 

Кто-то может сказать мне, как отправить запрос без HTML сущностями?

Благодаря

Больше информации:

Я не могу использовать NuSOAP

Я пробовал:

$soapClient = new SoapClient($wsdl_path,array('location'=>$ws_path,'trace'=>true,'use' => SOAP_LITERAL,'style' => SOAP_DOCUMENT,'exceptions'=>false)); 
$params = new SoapVar($var, XSD_ANYXML); 
$result = $soapClient->$methodName(array($params)); 

Но это не решение.

+0

Почему вы не можете отправить раздел CDATA в запрос, поскольку данные должны быть автоматически закодированы SoapClient и PHP? –

+0

Почему вы хотите отправить раздел CDATA в запросе, поскольку данные должны быть автоматически закодированы SoapClient и PHP? –

+0

Я удалил CDATA, это было решение. Большое спасибо, Mikaël –

ответ

2

Я отправляю запрос без CDATA (т. Е. <ns1:in0>&lt;node&gt;), и он отлично работает.

Смежные вопросы