[\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);
}
}