我正在尝试使用服务器端的nusoap为动态站点开发业务逻辑(因为我需要wsdls,PHP SOAP扩展不能生成wsdls),以及客户端的PHP SOAP扩展。
然而,我甚至无法获得登录和getRole功能。当我尝试调用客户端时,我收到以下消息
Uncaught SoapFault exception: [Client] looks like we got no XML document in [some paths]...
Wsdl确实存在于服务器端,而客户端确实读取它(当我为wsdl输入错误的url时,我收到错误)。
任何人都可以帮忙吗?
答案 0 :(得分:21)
看起来您的客户端收到一些无效的XML - 无论是WSDL本身还是服务器返回的响应。尝试在trace
选项设置为TRUE的情况下调用客户端,并通过__getLastRequest()
和__getLastResponse()
方法检查实际发送/接收的XML。
答案 1 :(得分:8)
我遇到了类似的问题;事实证明我的服务是echo
一些调试数据。我删除了所有echo
行并且工作正常。
答案 2 :(得分:4)
我有同样的问题,我解决了这个问题:
php中的服务器SOAP文件使用BOM编码utf8,导致apache在xml响应之前发回BOM标记(3个字节)。
使用utf8 WITH OUT BOM标记对您的php文件soap服务器进行编码。
Ignacio Gutierrez Torrero
答案 3 :(得分:2)
有可能在SOAPServer类的末尾有一些尾随空格。有关详细信息,请查看以下blog post:http://arnekroeger.blogspot.com/2011/02/php-soap-error-looks-like-we-got-no-xml.html
答案 4 :(得分:2)
请为你使用trim()args。
$objectRequette = trim($_POST['Requette']) ;
$client = new SoapClient(null, array(
'location' => 'http://your.php',
'uri'=>'your option',
));
$result = $client->__soapCall('Misyka', array("$objectRequettea"));
答案 5 :(得分:2)
在我的情况下,当我在“?>”之后包含带有空行的脚本时出现此错误标签。
删除这些行解决了问题
答案 6 :(得分:2)
不要忘记使用try / catch块:
try {
var_dump($client->foo());
} catch (Exception $e) {
echo($client->__getLastResponse());
echo PHP_EOL;
echo($client->__getLastRequest());
}
答案 7 :(得分:1)
有时,BOM会生成一些额外的字符,从而产生此类问题。
要检测是否有任何UTF BOM,请参阅此link。
答案 8 :(得分:1)
我有办法解决这个问题。这不是一个很好的解决方案,但它有效......
我如何在我的螳螂服务器上做任何更改,我决定这样做......
首先我要沉默SoapFault:
try {
$client = new SoapClient('http://www.mymantisaddress.com/api/soap/mantisconnect.php?wsdl', array('trace'=> 1, 'exceptions' => 0));
$result = $client->__soapCall($function_name, $args);
} catch (SoapFault $e) {
//$result = array(
// 'erro' => $e->faultstring
//);
}
其次,我已经注意到在我的字符串开头有三个尾随控件字符,所以我已将其删除:
$str = substr($client->__getLastResponse(), 3) . "pe>";
print $str;
第三,我要把" pe>"在我的字符串的末尾,因为它不完整。
答案 9 :(得分:1)
我有同样的问题。我的问题通过在php.ini上设置always_populate_raw_post_data
到-1
来解决。
我通过在选项中添加" trace" => 1,"例外" => 1来找到这一点并使用try catch
并获取__getLastRequest()
和__getLastResponse()
答案 10 :(得分:0)
以下可能是某些用户的问题。因为我经历过它。
对于最新的nuSoap版本,以下内容将解决您的问题:
在nusoap.php中找到以下代码
$this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");
在第6132行或其他任何地方。
并评论它
// $this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");
因为它仅用于调试目的。所以不要担心任何功能问题。