我正在使用zend_soap_server
开发一个soap Web服务。我使用Zend_Soap_AutoDiscover
自动生成Web服务的wsdl。
这是代码
public function indexAction() { // my websrvice method $server = new Zend_Soap_Server("admin/webservice/wsdl"); $server->setEncoding('UTF-8'); $server->setClass('Webservice'); $server->handle(); } public function wsdlAction() { // my wsdl method $wsdl = new Zend_Soap_AutoDiscover(); $wsdl->setClass('Webservice'); $wsdl->setUri("/admin/webservice"); $wsdl->handle(); }
我的问题是,当我查看生成的wsdl的源时,第一行是:
<?xml version="1.0"?>
但是我想要xml标签中的编码:
<?xml version="1.0" encoding="UTF-8"?>
我该怎么办才能得到这个?
提前Thx。
我检查了Zend Framework代码,发现WSDL的第一行是硬编码的:
$wsdl = "<?xml version='1.0' ?>
<definitions name='$name' targetNamespace='$uri'
xmlns='http://schemas.xmlsoap.org/wsdl/'
xmlns:tns='$uri'
xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:soap-enc='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'></definitions>";
上面的代码片段来自Zend/Soap/Wsdl.php
的第91行。因此,解决问题的简单方法是修改上面代码的第一行,以包含编码:
$wsdl = "<?xml version='1.0' encoding='UTF-8' ?>
我只是运行了这个代码,它达到了预期的结果。而且我也不会因为必须修改框架代码而过于担心。我有一组标准的补丁,从大约1.7开始,我就一直在ZF1的顶部运行,以修复一些我不同意的小问题。这就是开源的美妙之处——你不必向某家公司支付数千美元来更改一行代码!如果您升级到ZF1的下一个维护版本(假设有一个版本),请确保记住重新运行您的补丁。