注册
登录
S公司
搜索
在中
包装
此网站(使用Yahoo!)
开发人员
开发人员邮件列表
普通邮件列表
SVN提交邮件列表
主要
支持
文档
包装
项目包建议书
开发人员
漏洞
搜索Bug
程序包错误统计信息
打包回家
|
报告新错误
|
新建搜索
|
发展路线图
状态:
正常开放
|
反馈
|
全部
|
自版本0.14.0起关闭
错误#1404
复杂类型中的xsd:dateTime成员被序列化为xsd:string
提交:
2004年5月14日02:47 UTC
发件人:
optimizer网站的clawrence
分配:
状态:
正常开放
包裹:
SOAP协议
(版本0.9.4)
PHP版本:
4.3.6
操作系统:
红帽7.2
路线图:
(未分配)
订阅
您的电子邮件:
评论
添加注释
添加修补程序
[2004-05-14 02:47 UTC]优化器网站
描述:
------------
当用作SOAP操作的输出时,复杂类型的DateTime成员被PEAR::SOAP(0.8RC3 beta)误报为字符串类型(有关详细信息,请参阅echoDate2())。
echoDate1()操作在其响应中正确报告了dateTime数据类型原语。
复制代码:
---------------
<?
php程序
set_magic_quotes_runtime(0);
ini_set(“magic_quotes_gpc”,0);
类SOAPDateWrap{
var$日期化;
函数SOAPDateWrap($datefied=NULL){
$this->datefied=$datefied;
}
}
require_once“SOAP/Value.php”;
类SOAPEchoDateService{
var$__dispatch_map=数组();
var$__typedef=数组();
函数SOAPEchoDateService(){
//定义SOAPDataWrap类型
$this->__typedef[]{
http://www.optimiser.com/soap(网址:http://www.optimiser.com/soap)
}SOAPDateWrap']
=数组(“datefied”=>“dateTime”);
//定义echoDate1操作
$this->__dispatch_map['echoDate1']=数组('in'=>数组('inDate'=>'dateTime'),'out'=>阵列('outDate'=>'dateTime');
//定义echoDate2操作
$this->__dispatch_map['echoDate2']=数组('in'=>数组('inDate'=>'dateTime'),'out'=>阵列('outDateWrap'=>'{
http://www.optimizer.com/soap
}SOAPDateWrap“
));
}
函数__dispatch($methodname){
if(isset($this->__dispatch_map[$methodname]))
返回$this->__dispatch_map[$methodname];
返回NULL;
}
函数echoDate1($inDate){
$outDate=$inDate;
返回新的SOAP_Value('outDate','dateTime',$outDate);
}
函数echoDate2($inDate){
$outDate=$inDate;
返回新的SOAP_Value('outDateWrap','{
http://www.optimizer.com/soap
}SOAPDateWrap',
新SOAPDateWrap($outDate));
}
}
require_once“Log.php”;
require_once“SOAP/Server.php”;
$log=&log::singleton('file','/tmp/echoDate.log','echoDate',array('mode'=>0666),log_INFO);
$server=新的SOAP_server;
$server->_auto_translation=true;
$soapclass=新的SOAPEchoDateService();
$server->addObjectMap($soapclass,'urn:SOAPEchoDate');
if(isset($_SERVER['REQUEST_METHOD'])&&
$_SERVER['REQUEST_METHOD']=='POST'){
$log->log(“[”.getmypid().“]请求:\n”$
HTTP_RAW_POST_DATA);
对象开始();
$服务器->服务($HTTP_RAW_POST_DATA);
$log->log(“[”.getmypid().“]响应:\n”.ob_get_contents());
ob_end_flush();
}其他{
require_one“SOAP/Disco.php”;
$disco=新SOAP_disco_Server($Server,'SOAPEchoDate');
标题(“内容类型:text/xml”);
if(isset($_SERVER['QUERY_STRING'])
&&strcasecmp($_SERVER['QUERY_STRING'],'wsdl')==0){
echo$disco->getWSDL();
}其他{
echo$disco->getDISCO();
}
出口;
}
?>
预期结果:
----------------
从echoDate2()操作返回的SOAPDateWrap复杂类型的日期化成员应为xsd:dateTime类型,如下所示:
<?
xml version=“1.0”encoding=“UTF-8”?>
<SOAP-ENV:信封xmlns:SOAP-ENV=“
网址:http://schemas.xmlsoap.org/soap/envelope/
"
xmlns:xsd=“
http://www.w3.org/2001/XMLSchema
"
xmlns:xsi=“
http://www.w3.org/2001/XMLSchema-instance
"
xmlns:SOAP-ENC=“
http://schemas.xmlsoap.org/soap/encoding/
"
xmlns:ns4=“
http://www.optimizer.com/soap
"
xmlns:ns5=“urn:SOAPEchoDate”
SOAP-ENV:encodingStyle=“
http://schemas.xmlsoap.org/soap/encoding/
"
>
<SOAP-ENV:车身>
<ns5:echoDate2响应>
<outDateWrap xsi:type=“ns4:SOAPDateWract”>
2004-05-14T10:21:18.6939682+08:00
</SOAP-ENV:车身>
</SOAP-ENV:信封>
实际结果:
--------------
从echoDate2()操作返回的SOAPDateWrap复杂类型的日期化成员为xsd:string类型,如下所示:
<?
xml version=“1.0”encoding=“UTF-8”?>
<SOAP-ENV:信封xmlns:SOAP-ENV=“
网址:http://schemas.xmlsoap.org/soap/envelope/
"
xmlns:xsd=“
http://www.w3.org/2001/XMLSchema
"
xmlns:xsi=“
http://www.w3.org/2001/XMLSchema-instance
"
xmlns:SOAP-ENC=“
http://schemas.xmlsoap.org/soap/encoding/
"
xmlns:ns4=“
http://www.optimizer.com/soap
"
xmlns:ns5=“urn:SOAPEchoDate”
SOAP-ENV:encodingStyle=“
http://schemas.xmlsoap.org/soap/encoding/
"
>
<SOAP-ENV:车身>
<ns5:echoDate2响应>
<outDateWrap xsi:type=“ns4:SOAPDateWract”>
2004-05-14T10:21:18.6939682+08:00
</SOAP-ENV:车身>
</SOAP-ENV:信封>
评论
elmerproductions网站上的错误1
(马腾岛)
我在dateTime上也有同样的问题(在另一种类型上也有),所以这在PEAR::SOAP 0.9.4版中显然仍然是一个问题。
然而,使用SOAP_Value类有一个解决方法。
我的类型是一个包含多个字段(a、b、c)的struct数组。
假设“b”是dateTime。
要正确返回此值,我使用以下方法定义要返回的数组的单个元素:
函数get_element($aval、$bval、$cval)
{
返回数组(
“a”=>$aval,//简单值自动工作
“b”=>新的SOAP_Value('b','dateTime',$bval),//更复杂的类型需要使用SOAP_Value类
“c”=>$cval//简单值自动工作
);
}
当这样的元素作为对SOAP请求的响应返回时,“b”正确地返回为dateTime而不是字符串。
[2008-03-10 12:38 UTC]
直到
(直到Klampaeckel)
13:32<wsdl-help>i did'registrationDate'=>new SOAP_Value('registationDate','dateTime',date('c')),
13:33<wsdl-help>所以基本上这两种方法都是相互关联的,并且都有效。
非常感谢你给了我一些提示,让我走上正轨
不确定这是否是一个修复,但我们基本上在IRC上找到了以下内容。
希望它有助于尽快解决这个问题。
[2008-07-12 18:41 UTC]
医生
(丹尼尔·奥康纳)
我想您不想用更新版本的包/php来尝试它
[2008-07-29 21:54 UTC]
尤诺什
(简·施奈德)
这似乎仍在发生。
错误号14421
对此进行了测试。