SoapServer now handles get WSDL requests

This commit is contained in:
Petr Bechyně 2016-11-09 13:43:18 +01:00
parent bd1fbf9cfc
commit c4d993585f
2 changed files with 37 additions and 19 deletions

View File

@ -142,26 +142,30 @@ class Parser
*/ */
private static function parseContentTypeHeader(PartHeader $part, $headerName, $headerValue) private static function parseContentTypeHeader(PartHeader $part, $headerName, $headerValue)
{ {
list($value, $remainder) = explode(';', $headerValue, 2); if (strpos($headerValue, ';')) {
$value = trim($value); list($value, $remainder) = explode(';', $headerValue, 2);
$part->setHeader($headerName, $value); $value = trim($value);
$remainder = trim($remainder); $part->setHeader($headerName, $value);
while (strlen($remainder) > 0) { $remainder = trim($remainder);
if (!preg_match('/^([a-zA-Z0-9_-]+)=(.{1})/', $remainder, $matches)) { while (strlen($remainder) > 0) {
break; if (!preg_match('/^([a-zA-Z0-9_-]+)=(.{1})/', $remainder, $matches)) {
break;
}
$name = $matches[1];
$delimiter = $matches[2];
$remainder = substr($remainder, strlen($name) + 1);
if (!preg_match('/([^;]+)(;)?(\s|$)?/', $remainder, $matches)) {
break;
}
$value = rtrim($matches[1], ';');
if ($delimiter == "'" || $delimiter == '"') {
$value = trim($value, $delimiter);
}
$part->setHeader($headerName, $name, $value);
$remainder = substr($remainder, strlen($matches[0]));
} }
$name = $matches[1]; } else {
$delimiter = $matches[2]; $part->setHeader($headerName, $headerValue);
$remainder = substr($remainder, strlen($name)+1);
if (!preg_match('/([^;]+)(;)?(\s|$)?/', $remainder, $matches)) {
break;
}
$value = rtrim($matches[1], ';');
if ($delimiter == "'" || $delimiter == '"') {
$value = trim($value, $delimiter);
}
$part->setHeader($headerName, $name, $value);
$remainder = substr($remainder, strlen($matches[0]));
} }
} }

View File

@ -117,6 +117,20 @@ class SoapServer extends \SoapServer
} }
} }
public function handleWsdlRequest(SoapRequest $soapRequest)
{
ob_start();
parent::handle();
$nativeSoapServerResponse = ob_get_clean();
return SoapResponseFactory::create(
$nativeSoapServerResponse,
$soapRequest->getLocation(),
$soapRequest->getAction(),
$soapRequest->getVersion()
);
}
/** /**
* Runs the currently registered request filters on the request, calls the * Runs the currently registered request filters on the request, calls the
* necessary functions (through the parent's class handle()) and runs the * necessary functions (through the parent's class handle()) and runs the