public function getErrorPages() { return $this->errorPages; }
/** * Parses the servlet context's deployment descriptor file for servlets * that has to be registered in the object manager. * * @return void */ public function parse() { // load the web application base directory $webappPath = $this->getServletContext()->getWebappPath(); // prepare the deployment descriptor $deploymentDescriptor = $webappPath . DIRECTORY_SEPARATOR . 'WEB-INF' . DIRECTORY_SEPARATOR . 'web.xml'; // query whether we found epb.xml deployment descriptor file if (file_exists($deploymentDescriptor) === false) { return; } // validate the passed configuration file /** @var \AppserverIo\Appserver\Core\Api\ConfigurationService $configurationService */ $configurationService = $this->getApplication()->newService('AppserverIo\\Appserver\\Core\\Api\\ConfigurationService'); $configurationService->validateFile($deploymentDescriptor, null, true); // load the object manager instance /** @var \AppserverIo\Appserver\DependencyInjectionContainer\Interfaces\ObjectManagerInterface $objectManager */ $objectManager = $this->getApplication()->search('ObjectManagerInterface'); // prepare and initialize the configuration node $webAppNode = new WebAppNode(); $webAppNode->initFromFile($deploymentDescriptor); /** @var \AppserverIo\Appserver\Core\Api\Node\ServletNode $servletNode */ foreach ($webAppNode->getServlets() as $servletNode) { // iterate over all configured descriptors and try to load object description /** \AppserverIo\Appserver\Core\Api\Node\DescriptorNode $descriptor */ foreach ($objectManager->getConfiguredDescriptors() as $descriptor) { try { // load the descriptor class $descriptorClass = $descriptor->getNodeValue()->getValue(); // load the object descriptor, initialize the servlet mappings and add it to the object manager /** \AppserverIo\Psr\Deployment\DescriptorInterface $objectDescriptor */ if ($objectDescriptor = $descriptorClass::newDescriptorInstance()->fromConfiguration($servletNode)) { /** @var \AppserverIo\Appserver\Core\Api\Node\ServletMappingNode $servletMappingNode */ foreach ($webAppNode->getServletMappings() as $servletMappingNode) { // query whether or not we've to add the URL pattern for the servlet if ((string) $servletNode->getServletName() === (string) $servletMappingNode->getServletName()) { $objectDescriptor->addUrlPattern((string) $servletMappingNode->getUrlPattern()); } } // add the object descriptor for the servlet $objectManager->addObjectDescriptor($objectDescriptor, true); } // proceed with the next descriptor continue; // if class can not be reflected continue with next class } catch (\Exception $e) { // log an error message $this->getApplication()->getInitialContext()->getSystemLogger()->error($e->__toString()); // proceed with the next descriptor continue; } } } // initialize the session configuration if available /** @var \AppserverIo\Appserver\Core\Api\Node\SessionConfigNode $sessionConfig */ if ($sessionConfig = $webAppNode->getSessionConfig()) { foreach ($sessionConfig->toArray() as $key => $value) { $this->getServletContext()->addSessionParameter($key, $value); } } // initialize the error page configuration if available /** @var \AppserverIo\Appserver\Core\Api\Node\ErrorPageNode $errorPageNode */ foreach ($webAppNode->getErrorPages() as $errorPageNode) { $this->getServletContext()->addErrorPage((string) $errorPageNode->getErrorCodePattern(), (string) $errorPageNode->getErrorLocation()); } // initialize the context with the context parameters /** @var \AppserverIo\Appserver\Core\Api\Node\ContextParamNode $contextParamNode */ foreach ($webAppNode->getContextParams() as $contextParamNode) { $this->getServletContext()->addInitParameter((string) $contextParamNode->getParamName(), (string) $contextParamNode->getParamValue()); } }