Author: Tim Wagner (tw@appserver.io)
Inheritance: extends AppserverIo\Description\Api\Node\AbstractNode, implements AppserverIo\Appserver\Core\Api\Node\WebAppNodeInterface
 /**
  * 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());
     }
 }
 /**
  * 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->getAuthenticationContext()->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);
     // prepare and initialize the configuration node
     $webAppNode = new WebAppNode();
     $webAppNode->initFromFile($deploymentDescriptor);
     // query whether or not we've a login configuration
     /** @var \AppserverIo\Appserver\Core\Api\Node\LoginConfigNode $loginConfig */
     if ($loginConfig = $webAppNode->getLoginConfig()) {
         // create the authentication method instance
         $reflectionClass = new ReflectionClass($this->mapAuthenticator($loginConfig->getAuthMethod()->__toString()));
         $authenticator = $reflectionClass->newInstanceArgs(array($loginConfig, $this->getAuthenticationContext(), new Boolean(true)));
         // add the authentication method itself
         $this->getAuthenticationContext()->addAuthenticator($authenticator);
         // initialize the security roles, that are part of the new security subsystem
         /** @var \AppserverIo\Appserver\Core\Api\Node\SecurityRoleNode $securityRoleNode */
         foreach ($webAppNode->getSecurityRoles() as $securityRoleNode) {
             // do something here
         }
         // initialize the security roles, that are part of the new security subsystem
         /** @var \AppserverIo\Appserver\Core\Api\Node\SecurityConstraintNode $securityContstraintNode */
         foreach ($webAppNode->getSecurityConstraints() as $securityContstraintNode) {
             // prepare the array with the authentication constraint role names
             $roleNames = array();
             if ($authConstraint = $securityContstraintNode->getAuthConstraint()) {
                 $roleNames = $authConstraint->getRoleNamesAsArray();
             }
             /** @var \AppserverIo\Appserver\Core\Api\Node\WebResourceCollectionNode $webResourceCollectionNode */
             foreach ($securityContstraintNode->getWebResourceCollections() as $webResourceCollectionNode) {
                 // prepare the arrays for the HTTP methods and the method omissions
                 $httpMethods = $webResourceCollectionNode->getHttpMethodsAsArray();
                 $httpMethodOmissions = $webResourceCollectionNode->getHttpMethodOmissionsAsArray();
                 /** @var \AppserverIo\Appserver\Core\Api\Node\UrlPatternNode $urlPatternNode */
                 foreach ($webResourceCollectionNode->getUrlPatterns() as $urlPatternNode) {
                     // prepare the URL pattern to authenticator mapping with the necessary data
                     $mapping = new Mapping($urlPatternNode->__toString(), $authenticator->getSerial(), $roleNames, $httpMethods, $httpMethodOmissions);
                     // add the URL pattern to authenticator mapping
                     $this->getAuthenticationContext()->addMapping($mapping);
                 }
             }
         }
     }
 }