1

を使用して石鹸の Web サービスを開発していzend_soap_serverます。Zend_Soap_AutoDiscoverWeb サービスの 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"?>

これを取得するにはどうすればよいですか?

事前にt​​hx。

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' ?>

このコードを実行しただけで、望ましい結果が得られました。そして、フレームワークのコードを変更しなければならないことについて、私はあまり気にしません。私は、ZF1 の約 1.7 以来、私が同意しなかったいくつかの奇妙な点を修正するために、ZF1 上で実行している標準的なパッチのセットを持っています。これがオープン ソースの利点です。1 行の変更を行うのに、一部の会社に数千ドルを支払う必要はありません。ZF1 の次のメンテナンス リリースにアップグレードする場合は、パッチを再実行することを忘れないでください (リリースがあると仮定します)。

于 2013-09-05T05:15:30.060 に答える