我正在使用zend_soap_server
开发一个soap webservice。
我使用Zend_Soap_AutoDiscover
自动生成我的webservice的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"?>
我该怎么做才能得到这个?
提前谢谢。答案 0 :(得分:2)
我检查了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的下一个维护版本(假设有一个版本出现),请确保您记得重新运行补丁。