Jak handlovat SOAP vyjímky? Po změně exception handlerů v Nette?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
mcmatak
Člen | 490
+
0
-

Mám SoapServer, navazuji na toto téma

https://forum.nette.org/…-soap-server

tento presenter, není nijak začleněn zend_server narozdíl od předchozího tématu, jak z nette odeslat klientovi vyjímku?

<?php
final class DefaultPresenter extends BasePresenter
{

	public function actionDefault()
	{

		if (isset($_GET['wsdl'])) {
			$autodiscover = new \Zend_Soap_AutoDiscover();
			$autodiscover->setClass("ServicesModule_DefaultModel");
			$autodiscover->handle();

		}
		else {
			$server = new \SoapServer('http://' .$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . "?wsdl");
			$server->setObject(new \ServicesModule_DefaultModel($this->context));
			$server->handle();

		}

	}

}

?>

jak by mělo probíhat odeslání vyjímky??

Felix
Nette Core | 1183
+
0
-

A jak tu vyjimku chces odesilat? Pokud staci nejaky text tak muzes pouzit

final class DefaultPresenter extends BasePresenter
{

    public function actionDefault()
    {

	// ...
	$this->sendResponse(new \Nette\Application\Responses\TextResponse("Text vyjimky.."));

    }

}
Tomulin
Člen | 1
+
0
-

Taky jsem zaznamenal jisté potíže se Zend_Soap_Server. Jednak to bylo způsobeno aktualiuzací Zend knihoven, kdy se ukázal jako problémový přechod z verze 1.11.12 na novější a jednak samotným způsobem vyhazování výjimek, který je nativním PHP Soapu dosti prdelní.

Vyřešil jsem to tak, že jsem si rozšířil Zend_Soap_Server o metodu která vrací nativní SOAP server a taktéž metodu fault() pro vyhazování vyjímek.

Pro ty, kteří počítají s nějakou širší implementací SOAPu v PHP, rozhlédněte se raději po nějaké jiné knihovně. Ušetříte se spoustu problémů s kompatibilitou a implementací.