1

我正在使用zend_soap_server. 我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"?>

我应该怎么做才能得到这个?

提前谢谢。

4

1 回答 1

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>";

上面的代码片段来自第 91 行Zend/Soap/Wsdl.php。因此,解决问题的简单方法是修改上述代码的第一行以包含编码:

    $wsdl = "<?xml version='1.0' encoding='UTF-8' ?>

我刚刚运行了这段代码,它达到了预期的结果。而且我不会因为不得不修改框架代码而大惊小怪。我有一套标准的补丁,从大约 1.7 开始,我就一直在 ZF1 的顶部运行,以修复一些我不同意的小问题。这就是开源的美妙之处——您不必为某家公司支付数千美元来进行一行更改!如果您升级到 ZF1 的下一个维护版本(假设出现了一个),请确保您记得重新运行您的补丁。

于 2013-09-05T05:15:30.060 回答