[\s]{1,}<)/', '', $xmlstring); return $xmlstring; } function testSetClass() { $scriptUri = 'http://localhost/my_script.php'; $server = new Zend_Soap_AutoDiscover(); $server->setClass('Zend_Soap_AutoDiscover_Test'); $dom = new DOMDocument(); ob_start(); $server->handle(); $dom->loadXML(ob_get_clean()); $wsdl = '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . ''; $dom->save(dirname(__FILE__).'/_files/setclass.wsdl'); $this->assertEquals($wsdl, $this->sanatizeWsdlXmlOutputForOsCompability($dom->saveXML())); $this->assertTrue($dom->schemaValidate(dirname(__FILE__) .'/schemas/wsdl.xsd'), "WSDL Did not validate"); unlink(dirname(__FILE__).'/_files/setclass.wsdl'); } function testSetClassWithDifferentStyles() { $scriptUri = 'http://localhost/my_script.php'; $server = new Zend_Soap_AutoDiscover(); $server->setBindingStyle(array('style' => 'document', 'transport' => 'http://framework.zend.com')); $server->setOperationBodyStyle(array('use' => 'literal', 'namespace' => 'http://framework.zend.com')); $server->setClass('Zend_Soap_AutoDiscover_Test'); $dom = new DOMDocument(); ob_start(); $server->handle(); $dom->loadXML(ob_get_clean()); $wsdl = '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . ''; $dom->save(dirname(__FILE__).'/_files/setclass.wsdl'); $this->assertEquals($wsdl, $this->sanatizeWsdlXmlOutputForOsCompability($dom->saveXML())); $this->assertTrue($dom->schemaValidate(dirname(__FILE__) .'/schemas/wsdl.xsd'), "WSDL Did not validate"); unlink(dirname(__FILE__).'/_files/setclass.wsdl'); } /** * @group ZF-5072 */ function testSetClassWithResponseReturnPartCompabilityMode() { $scriptUri = 'http://localhost/my_script.php'; $server = new Zend_Soap_AutoDiscover(); $server->setClass('Zend_Soap_AutoDiscover_Test'); $dom = new DOMDocument(); ob_start(); $server->handle(); $dom->loadXML(ob_get_clean()); $dom->save(dirname(__FILE__).'/_files/setclass.wsdl'); $this->assertContains('sanatizeWsdlXmlOutputForOsCompability($dom->saveXML())); $this->assertContains('sanatizeWsdlXmlOutputForOsCompability($dom->saveXML())); $this->assertContains('sanatizeWsdlXmlOutputForOsCompability($dom->saveXML())); $this->assertContains('sanatizeWsdlXmlOutputForOsCompability($dom->saveXML())); unlink(dirname(__FILE__).'/_files/setclass.wsdl'); } function testAddFunctionSimple() { $scriptUri = 'http://localhost/my_script.php'; $server = new Zend_Soap_AutoDiscover(); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc'); $dom = new DOMDocument(); ob_start(); $server->handle(); $dom->loadXML(ob_get_contents()); $dom->save(dirname(__FILE__).'/_files/addfunction.wsdl'); ob_end_clean(); $parts = explode('.', basename($_SERVER['SCRIPT_NAME'])); $name = $parts[0]; $wsdl = ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''; $this->assertEquals($wsdl, $this->sanatizeWsdlXmlOutputForOsCompability($dom->saveXML()), "Bad WSDL generated"); $this->assertTrue($dom->schemaValidate(dirname(__FILE__) .'/schemas/wsdl.xsd'), "WSDL Did not validate"); unlink(dirname(__FILE__).'/_files/addfunction.wsdl'); } function testAddFunctionSimpleWithDifferentStyle() { $scriptUri = 'http://localhost/my_script.php'; $server = new Zend_Soap_AutoDiscover(); $server->setBindingStyle(array('style' => 'document', 'transport' => 'http://framework.zend.com')); $server->setOperationBodyStyle(array('use' => 'literal', 'namespace' => 'http://framework.zend.com')); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc'); $dom = new DOMDocument(); ob_start(); $server->handle(); $dom->loadXML(ob_get_contents()); $dom->save(dirname(__FILE__).'/_files/addfunction.wsdl'); ob_end_clean(); $parts = explode('.', basename($_SERVER['SCRIPT_NAME'])); $name = $parts[0]; $wsdl = ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''; $this->assertEquals($wsdl, $this->sanatizeWsdlXmlOutputForOsCompability($dom->saveXML()), "Bad WSDL generated"); $this->assertTrue($dom->schemaValidate(dirname(__FILE__) .'/schemas/wsdl.xsd'), "WSDL Did not validate"); unlink(dirname(__FILE__).'/_files/addfunction.wsdl'); } /** * @group ZF-5072 */ function testAddFunctionSimpleInReturnNameCompabilityMode() { $scriptUri = 'http://localhost/my_script.php'; $server = new Zend_Soap_AutoDiscover(); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc'); $dom = new DOMDocument(); ob_start(); $server->handle(); $dom->loadXML(ob_get_contents()); $dom->save(dirname(__FILE__).'/_files/addfunction.wsdl'); ob_end_clean(); $parts = explode('.', basename($_SERVER['SCRIPT_NAME'])); $name = $parts[0]; $wsdl = $this->sanatizeWsdlXmlOutputForOsCompability($dom->saveXML()); $this->assertContains('', $wsdl); $this->assertNotContains('assertTrue($dom->schemaValidate(dirname(__FILE__) .'/schemas/wsdl.xsd'), "WSDL Did not validate"); unlink(dirname(__FILE__).'/_files/addfunction.wsdl'); } function testAddFunctionMultiple() { $scriptUri = 'http://localhost/my_script.php'; $server = new Zend_Soap_AutoDiscover(); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc'); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc2'); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc3'); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc4'); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc5'); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc6'); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc7'); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc9'); $dom = new DOMDocument(); ob_start(); $server->handle(); $dom->loadXML(ob_get_contents()); $dom->save(dirname(__FILE__).'/_files/addfunction2.wsdl'); ob_end_clean(); $parts = explode('.', basename($_SERVER['SCRIPT_NAME'])); $name = $parts[0]; $wsdl = ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. ''; $this->assertEquals($wsdl, $this->sanatizeWsdlXmlOutputForOsCompability($dom->saveXML()), "Bad WSDL generated"); $this->assertTrue($dom->schemaValidate(dirname(__FILE__) .'/schemas/wsdl.xsd'), "WSDL Did not validate"); unlink(dirname(__FILE__).'/_files/addfunction2.wsdl'); } /** * @group ZF-4117 */ public function testUseHttpsSchemaIfAccessedThroughHttps() { $_SERVER['HTTPS'] = "on"; $httpsScriptUri = 'https://localhost/my_script.php'; $server = new Zend_Soap_AutoDiscover(); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc'); ob_start(); $server->handle(); $wsdlOutput = ob_get_contents(); ob_end_clean(); $this->assertContains($httpsScriptUri, $wsdlOutput); } /** * @group ZF-4117 */ public function testChangeWsdlUriInConstructor() { $scriptUri = 'http://localhost/my_script.php'; $server = new Zend_Soap_AutoDiscover(true, "http://example.com/service.php"); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc'); ob_start(); $server->handle(); $wsdlOutput = ob_get_contents(); ob_end_clean(); $this->assertNotContains($scriptUri, $wsdlOutput); $this->assertContains("http://example.com/service.php", $wsdlOutput); } /** * @group ZF-4117 */ public function testChangeWsdlUriViaSetUri() { $scriptUri = 'http://localhost/my_script.php'; $server = new Zend_Soap_AutoDiscover(true); $server->setUri("http://example.com/service.php"); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc'); ob_start(); $server->handle(); $wsdlOutput = ob_get_contents(); ob_end_clean(); $this->assertNotContains($scriptUri, $wsdlOutput); $this->assertContains("http://example.com/service.php", $wsdlOutput); } public function testSetNonStringNonZendUriUriThrowsException() { $server = new Zend_Soap_AutoDiscover(); try { $server->setUri(array("bogus")); $this->fail(); } catch(Zend_Soap_AutoDiscover_Exception $e) { } } /** * @group ZF-4117 */ public function testChangingWsdlUriAfterGenerationIsPossible() { $scriptUri = 'http://localhost/my_script.php'; $server = new Zend_Soap_AutoDiscover(true); $server->setUri("http://example.com/service.php"); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc'); ob_start(); $server->handle(); $wsdlOutput = ob_get_contents(); ob_end_clean(); $this->assertNotContains($scriptUri, $wsdlOutput); $this->assertContains("http://example.com/service.php", $wsdlOutput); $server->setUri("http://example2.com/service2.php"); ob_start(); $server->handle(); $wsdlOutput = ob_get_contents(); ob_end_clean(); $this->assertNotContains($scriptUri, $wsdlOutput); $this->assertNotContains("http://example.com/service.php", $wsdlOutput); $this->assertContains("http://example2.com/service2.php", $wsdlOutput); } /** * @group ZF-4688 * @group ZF-4125 * */ public function testUsingClassWithMultipleMethodPrototypesProducesValidWsdl() { $scriptUri = 'http://localhost/my_script.php'; $server = new Zend_Soap_AutoDiscover(); $server->setClass('Zend_Soap_AutoDiscover_TestFixingMultiplePrototypes'); ob_start(); $server->handle(); $wsdlOutput = ob_get_contents(); ob_end_clean(); $this->assertEquals(1, substr_count($wsdlOutput, '')); $this->assertEquals(1, substr_count($wsdlOutput, '')); } public function testUnusedFunctionsOfAutoDiscoverThrowException() { $server = new Zend_Soap_AutoDiscover(); try { $server->setPersistence("bogus"); $this->fail(); } catch(Zend_Soap_AutoDiscover_Exception $e) { } try { $server->fault(); $this->fail(); } catch(Zend_Soap_AutoDiscover_Exception $e) { } try { $server->loadFunctions("bogus"); $this->fail(); } catch(Zend_Soap_AutoDiscover_Exception $e) { } } public function testGetFunctions() { $server = new Zend_Soap_AutoDiscover(); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc'); $server->setClass('Zend_Soap_AutoDiscover_Test'); $functions = $server->getFunctions(); $this->assertEquals( array('Zend_Soap_AutoDiscover_TestFunc', 'testFunc1', 'testFunc2', 'testFunc3', 'testFunc4'), $functions ); } /** * @group ZF-4835 */ public function testUsingRequestUriWithoutParametersAsDefault() { // Apache $_SERVER = array('REQUEST_URI' => '/my_script.php?wsdl', 'HTTP_HOST' => 'localhost'); $server = new Zend_Soap_AutoDiscover(); $uri = $server->getUri()->getUri(); $this->assertNotContains("?wsdl", $uri); $this->assertEquals("http://localhost/my_script.php", $uri); // Apache plus SSL $_SERVER = array('REQUEST_URI' => '/my_script.php?wsdl', 'HTTP_HOST' => 'localhost', 'HTTPS' => 'on'); $server = new Zend_Soap_AutoDiscover(); $uri = $server->getUri()->getUri(); $this->assertNotContains("?wsdl", $uri); $this->assertEquals("https://localhost/my_script.php", $uri); // IIS 5 + PHP as FastCGI $_SERVER = array('ORIG_PATH_INFO' => '/my_script.php?wsdl', 'SERVER_NAME' => 'localhost'); $server = new Zend_Soap_AutoDiscover(); $uri = $server->getUri()->getUri(); $this->assertNotContains("?wsdl", $uri); $this->assertEquals("http://localhost/my_script.php", $uri); // IIS $_SERVER = array('HTTP_X_REWRITE_URL' => '/my_script.php?wsdl', 'SERVER_NAME' => 'localhost'); $server = new Zend_Soap_AutoDiscover(); $uri = $server->getUri()->getUri(); $this->assertNotContains("?wsdl", $uri); $this->assertEquals("http://localhost/my_script.php", $uri); } /** * @group ZF-4937 */ public function testComplexTypesThatAreUsedMultipleTimesAreRecoginzedOnce() { $server = new Zend_Soap_AutoDiscover('Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex'); $server->setClass('Zend_Soap_AutoDiscoverTestClass2'); ob_start(); $server->handle(); $wsdlOutput = ob_get_contents(); ob_end_clean(); $this->assertEquals(1, substr_count($wsdlOutput, 'wsdl:arrayType="tns:Zend_Soap_AutoDiscoverTestClass1[]"'), 'wsdl:arrayType definition of TestClass1 has to occour once.' ); $this->assertEquals(1, substr_count($wsdlOutput, ''), 'Zend_Soap_AutoDiscoverTestClass1 has to be defined once.' ); $this->assertEquals(1, substr_count($wsdlOutput, ''), 'ArrayOfZend_Soap_AutoDiscoverTestClass1 should be defined once.' ); $this->assertTrue( substr_count($wsdlOutput, '') >= 1, 'Zend_Soap_AutoDiscoverTestClass1 appears once or more than once in the message parts section.' ); } /** * @group ZF-5330 */ public function testDumpOrXmlOfAutoDiscover() { $server = new Zend_Soap_AutoDiscover(); $server->addFunction('Zend_Soap_AutoDiscover_TestFunc'); ob_start(); $server->handle(); $wsdlOutput = ob_get_contents(); ob_end_clean(); $this->assertEquals( $this->sanatizeWsdlXmlOutputForOsCompability($wsdlOutput), $this->sanatizeWsdlXmlOutputForOsCompability($server->toXml()) ); ob_start(); $server->dump(false); $wsdlOutput = ob_get_contents(); ob_end_clean(); $this->assertEquals( $this->sanatizeWsdlXmlOutputForOsCompability($wsdlOutput), $this->sanatizeWsdlXmlOutputForOsCompability($server->toXml()) ); } /** * @group ZF-5330 */ public function testDumpOrXmlOnlyAfterGeneratedAutoDiscoverWsdl() { $server = new Zend_Soap_AutoDiscover(); try { $server->dump(false); $this->fail(); } catch(Exception $e) { $this->assertTrue($e instanceof Zend_Soap_AutoDiscover_Exception); } try { $server->toXml(); $this->fail(); } catch(Exception $e) { $this->assertTrue($e instanceof Zend_Soap_AutoDiscover_Exception); } } /** * @group ZF-5604 */ public function testReturnSameArrayOfObjectsResponseOnDifferentMethodsWhenArrayComplex() { $autodiscover = new Zend_Soap_AutoDiscover('Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex'); $autodiscover->setClass('Zend_Soap_AutoDiscover_MyService'); $wsdl = $autodiscover->toXml(); $this->assertEquals(1, substr_count($wsdl, '')); $this->assertEquals(0, substr_count($wsdl, 'tns:My_Response[]')); } /** * @group ZF-5430 */ public function testReturnSameArrayOfObjectsResponseOnDifferentMethodsWhenArraySequence() { $autodiscover = new Zend_Soap_AutoDiscover('Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence'); $autodiscover->setClass('Zend_Soap_AutoDiscover_MyServiceSequence'); $wsdl = $autodiscover->toXml(); $this->assertEquals(1, substr_count($wsdl, '')); $this->assertEquals(1, substr_count($wsdl, '')); $this->assertEquals(1, substr_count($wsdl, '')); $this->assertEquals(0, substr_count($wsdl, 'tns:string[]')); } /** * @group ZF-5736 */ public function testAmpersandInUrlIsCorrectlyEncoded() { $autodiscover = new Zend_Soap_AutoDiscover(); $autodiscover->setUri("http://example.com/?a=b&b=c"); $autodiscover->setClass("Zend_Soap_AutoDiscover_Test"); $wsdl = $autodiscover->toXml(); $this->assertContains("http://example.com/?a=b&b=c", $wsdl); } }