非常简单。由于我的项目的要求,我必须在类定义中创建一个NuSOAP服务器。我无法让它发挥作用。我收到此错误消息的错误:“msg解析错误:xml为空,没有解析!”我需要做些什么工作?
这是两种方法共同的代码:
require_once('/xxx/nusoap/nusoap.php');
function SomeMethod(
$someParameter
) {
return "Success: $someParameter!";
}
function registerSomeMethod() {
$in = array();
$in['someParameter'] = 'xsd:string';
$out = array();
$out['return'] = 'xsd:string';
$this->_server->register("SomeMethod",$in,$out,$this->_namespace,"SomeMethod","rpc","encoded");
}
在全局级别添加此代码可生成功能正常的Web服务:
$namespace = 'uri:mycompany';
$server = new soap_server;
$server->configureWSDL('mycompany',$namespace);
registerSomeMethod();
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
将该代码包装在类定义中,如下所示产生一个Web服务,该服务将WSDL直接返回给浏览器,但响应带有SoapFault的客户端调用“msg解析错误:xml为空,没有解析!”
class MyService {
public function __construct() {
$namespace = 'uri:mycompany';
$server = new soap_server;
$server->configureWSDL('mycompany',$namespace);
registerSomeMethod();
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
}
} // class
$o = new MyService;
答案 0 :(得分:2)
我修正了这个改变:
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
为此:
$this->nusoap_server->service(file_get_contents("php://input"));
答案 1 :(得分:0)
解决方案:输入“global $ HTTP_RAW_POST_DATA;”在__construct()中。我是PHP的新手,完全忽略了这个细节。