soapClient方法__soapCall自动应用编码,服务不需要编码的数据,是否有任何解决方案或自定义实现?

穆罕默德·马纳扎(Muhammad Manazar)

我有自己的soap-client类实现,我的createRecord方法是:

public function createRecord($username, $password, $doctypeName, $parentDoctypeName, $sXmlAttributes, $attachment, $fileName)
  {
    return $this->__soapCall('createRecord', array($username, $password, $doctypeName, $parentDoctypeName, $sXmlAttributes, $attachment, $fileName));
  }

$sXmlAttributes包含封装在CDATA中的XML,HTML实体编码已自动应用于此参数,我想避免HTML实体编码,因为此参数包含XML,有人可以帮助我发送此请求,而无需将HTML实体编码应用于sXmlAttributes其值即为已经存在的参数封装在CDATA中。

萨吉德·阿里

如果要传递xml文档节点作为函数参数,则需要创建一个SoapVar对象,该对象具有xml节点的文本表示形式和XSD_ANYXML编码常数。但是,此常量不由扩展导出,并且由于某些未知原因而没有记录。

因此,要使其正常工作,您必须将XSD_ANYXML #define注册为PHP常量,或者在创建SoapVar时使用常量的整数值147。

$soapvar = new SoapVar($xml_text, 147);

$params = array("ItemXml" => $soapvar, "PropertyView" => "blah");
$result = $this->soapclient->__soapCall("SaveItem", array("parameters"=>$params), null, $this->soapheaders);

但是,这仍然不能给出正确的结果。出于某种原因,ItemXml参数节点未包装在soap请求中的关联xml参数周围,并且产生了以下肥皂(假定将'blah'用作$ xml_text):

<SOAP-ENV:Envelope xmlns:SOAP-ENV="..." xmlns:ns1="...">
<SOAP-ENV:Header>...</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:SaveItem>
<item>blah</item>
<ns1:PropertyView>blah</ns1:PropertyView>
</ns1:SaveItem>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

另外一个示例,如果函数(称为myFunc)期望使用名为xmlInput的参数,则应执行以下操作:

$soapvar = new SoapVar($query, XSD_STRING);
$result = $client->myFunc(array('xmlInput'=>$soapvar));

在此示例中,当定义变量soapVar时,我分配了XSD_STRING类型,而不是XSD_ANYXML类型。当调用该函数时,必须在关联数组中传递soapVar。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档