public interface ShowroomAPI {
String hello(QueryParams params);
ListResult<Product> getList(QueryParams params);
Product getProduct(QueryParams params);
}
第1个问题
因为php5.2.x版本后自带了DateTime类,和 HessianPHP 中的发生冲突
解决:改文件DateTime.php 为 HessianDateTime.php,类DateTime 为 HessianDateTime
第2个问题
PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for '8.0/no DST' instead in G:\\php\\HessianPHP\\dist\\Hessian.php on line 74
解决:将date() 方法都改为 date_default_timezone_set()
第3个问题
Exception: Hessian Parser, Malformed reply: expected r Code: 2 exception 'HessianError' with message 'Hessian Parser, Malformed reply: expected r' in E:\workspace\php-test\dist\Protocol.php:339 Stack trace:
#0 E:\workspace\php-test\dist\HessianClient.php(215): HessianParser->parseReply()
#1 E:\workspace\php-test\dist\Filter.php(159): HessianProxy->executeCall('getList', Array)
#2 E:\workspace\php-test\dist\Filter.php(73): ProxyFilter->execute(Object(HessianProxy), Object(FilterChain))
#3 E:\workspace\php-test\dist\Filter.php(191): FilterChain->doFilter(Object(HessianProxy))
#4 E:\workspace\php-test\dist\Filter.php(73): PHPErrorReportingFilter->execute(Object(HessianProxy), Object(FilterChain))
#5 E:\workspace\php-test\dist\HessianClient.php(182): FilterChain->doFilter(Object(HessianProxy))
#6 E:\workspace\php-test\dist\HessianClient5.php(94): HessianProxy->call('getList', Array)
#7 [internal function]: HessianClient->__call('getList', Array)
#8 E:\workspace\php-test\tests\test.php(23): HessianClient->getList(Object(QueryParams))
#9 {main}
Chunked http responses cause a protocol parse error
Http.php is written to perform an HTTP POST using HTTP/1.1 which means that
the Hessian client must support a HTTP header of "Transfer-Encoding:
chunked".
Protocol::parseReply() is written as follows:
if($this->read(1) != 'r') {
return new HessianError('Hessian Parser, Malformed reply: expected
r',HESSIAN_PARSER_ERROR,0,$this->stream);
}
which will fail because the first line of a chunked response will contain
the chunk length. Protocol::parseReply() needs to be written to support
chunking.
At the moment the workaround I have is to set HTTP/1.0 in Http::POST.