在PHP SOAP中将NULL字符串传递给WSDL

时间:2014-07-01 09:35:28

标签: php web-services soap wsdl

您好我正在编写一个PHP函数来与外部WSDL服务进行通信,目前我遇到了一个问题。有些dateTime元素要么需要有效的日期/时间,要么需要将NULL变量传递给它们。例如:

<s:element minOccurs="1" maxOccurs="1" name="dAppointment" type="s:dateTime"/>

PHP函数的简化版本如下:

$client = new SoapClient($this->SOAPURL, array("connection_timeout" => 20));

$params = new stdClass();
$params->dAppointment = NULL;
settype($params->dAppointment, "null");  // Trying to confirm

$client->AddJob($params)->AddJobResult;

当提交有效日期但是当通过以下错误尝试传递NULL变量时,该函数正常工作:

  

字符串&#39;&#39;不是有效的AllXsd值

建议在整个过程中将值转换为空字符串。变量是否需要以与使用SoapVar不同的方式设置为NULL,或者这可能是WSDL端的问题?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

因此,遇到此问题的每个人都可以找到解决方案:

  • 打开您的local.wsdl文件
  • 找到您的领域:

<s:element minOccurs="1" maxOccurs="1" name="dAppointment" type="s:dateTime"/>

  • 将其更改为:

<s:element minOccurs="1" maxOccurs="1" name="dAppointment" type="s:dateTime" nillable="true" />

  • 现在,当您将变量设置为NULL时,它将是NULL