Full Code of piranhacloud/piranha for AI

current 5c473674ea66 cached
1176 files
4.3 MB
1.2M tokens
5074 symbols
1 requests
Download .txt
Showing preview only (4,819K chars total). Download the full file or copy to clipboard to get everything.
Repository: piranhacloud/piranha
Branch: current
Commit: 5c473674ea66
Files: 1176
Total size: 4.3 MB

Directory structure:
gitextract_k7aup1uh/

├── .github/
│   ├── FUNDING.yml
│   ├── dependabot.yml
│   └── workflows/
│       ├── current.yml
│       ├── docs.yml
│       ├── experimental.yml
│       ├── pr.yml
│       ├── release.yml
│       ├── stale.yml
│       ├── tck-coreprofile.yml
│       └── trigger.yml
├── .gitignore
├── CODE_CONVENTIONS.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── RELEASE.md
├── SECURITY.md
├── arquillian/
│   ├── managed/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   ├── cloud/
│   │       │   │   │   └── piranha/
│   │       │   │   │       └── arquillian/
│   │       │   │   │           └── managed/
│   │       │   │   │               ├── ManagedPiranhaContainer.java
│   │       │   │   │               ├── ManagedPiranhaContainerConfiguration.java
│   │       │   │   │               └── ManagedPiranhaContainerExtension.java
│   │       │   │   └── module-info.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── org.jboss.arquillian.core.spi.LoadableExtension
│   │       └── test/
│   │           ├── java/
│   │           │   └── cloud/
│   │           │       └── piranha/
│   │           │           └── arquillian/
│   │           │               └── managed/
│   │           │                   ├── ManagedPiranhaContainerConfigurationTest.java
│   │           │                   ├── ManagedPiranhaContainerExtensionTest.java
│   │           │                   └── ManagedPiranhaContainerTest.java
│   │           └── webapp/
│   │               └── test/
│   │                   └── WEB-INF/
│   │                       └── web.xml
│   ├── pom.xml
│   └── server/
│       ├── pom.xml
│       └── src/
│           └── main/
│               ├── java/
│               │   ├── cloud/
│               │   │   └── piranha/
│               │   │       └── arquillian/
│               │   │           └── server/
│               │   │               ├── PiranhaServerDeployableContainer.java
│               │   │               └── PiranhaServerLoadableExtension.java
│               │   └── module-info.java
│               └── resources/
│                   └── META-INF/
│                       └── services/
│                           └── org.jboss.arquillian.core.spi.LoadableExtension
├── bom/
│   └── pom.xml
├── core/
│   ├── api/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── core/
│   │       │       │           └── api/
│   │       │       │               ├── AnnotationInfo.java
│   │       │       │               ├── AnnotationManager.java
│   │       │       │               ├── AsyncDispatcher.java
│   │       │       │               ├── AsyncManager.java
│   │       │       │               ├── AttributeManager.java
│   │       │       │               ├── AuthenticatedIdentity.java
│   │       │       │               ├── CurrentRequestHolder.java
│   │       │       │               ├── DispatcherManager.java
│   │       │       │               ├── ErrorPageManager.java
│   │       │       │               ├── FilterEnvironment.java
│   │       │       │               ├── FilterMapping.java
│   │       │       │               ├── FilterPriority.java
│   │       │       │               ├── HandlesTypesManager.java
│   │       │       │               ├── HttpHeader.java
│   │       │       │               ├── HttpHeaderManager.java
│   │       │       │               ├── HttpSessionManager.java
│   │       │       │               ├── JspManager.java
│   │       │       │               ├── LocaleEncodingManager.java
│   │       │       │               ├── ModuleLayerProcessor.java
│   │       │       │               ├── MultiPartManager.java
│   │       │       │               ├── ObjectInstanceManager.java
│   │       │       │               ├── Piranha.java
│   │       │       │               ├── PiranhaBuilder.java
│   │       │       │               ├── PiranhaConfiguration.java
│   │       │       │               ├── SecurityConstraint.java
│   │       │       │               ├── SecurityManager.java
│   │       │       │               ├── SecurityRoleReference.java
│   │       │       │               ├── SecurityWebResourceCollection.java
│   │       │       │               ├── ServletEnvironment.java
│   │       │       │               ├── ServletInvocation.java
│   │       │       │               ├── ServletRequestManager.java
│   │       │       │               ├── WebApplication.java
│   │       │       │               ├── WebApplicationClassLoader.java
│   │       │       │               ├── WebApplicationExtension.java
│   │       │       │               ├── WebApplicationExtensionContext.java
│   │       │       │               ├── WebApplicationInputStream.java
│   │       │       │               ├── WebApplicationManager.java
│   │       │       │               ├── WebApplicationOutputStream.java
│   │       │       │               ├── WebApplicationPrintWriter.java
│   │       │       │               ├── WebApplicationRequest.java
│   │       │       │               ├── WebApplicationRequestMapper.java
│   │       │       │               ├── WebApplicationRequestMapping.java
│   │       │       │               ├── WebApplicationResponse.java
│   │       │       │               ├── WebApplicationServer.java
│   │       │       │               ├── WebApplicationServerRequestMapper.java
│   │       │       │               └── WelcomeFileManager.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── core/
│   │                           └── api/
│   │                               └── AttributeManagerTest.java
│   ├── impl/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── core/
│   │       │       │           └── impl/
│   │       │       │               ├── AsyncHttpDispatchWrapper.java
│   │       │       │               ├── AsyncNonHttpDispatchWrapper.java
│   │       │       │               ├── CookieParser.java
│   │       │       │               ├── DefaultAnnotationManager.java
│   │       │       │               ├── DefaultAsyncContext.java
│   │       │       │               ├── DefaultAsyncDispatcher.java
│   │       │       │               ├── DefaultAsyncManager.java
│   │       │       │               ├── DefaultAttributeManager.java
│   │       │       │               ├── DefaultAuthenticatedIdentity.java
│   │       │       │               ├── DefaultCurrentRequestHolder.java
│   │       │       │               ├── DefaultDispatcherManager.java
│   │       │       │               ├── DefaultErrorPageManager.java
│   │       │       │               ├── DefaultFilterChain.java
│   │       │       │               ├── DefaultFilterEnvironment.java
│   │       │       │               ├── DefaultFilterMapping.java
│   │       │       │               ├── DefaultHttpHeader.java
│   │       │       │               ├── DefaultHttpHeaderManager.java
│   │       │       │               ├── DefaultHttpServletMapping.java
│   │       │       │               ├── DefaultHttpSession.java
│   │       │       │               ├── DefaultHttpSessionManager.java
│   │       │       │               ├── DefaultInvocationFinder.java
│   │       │       │               ├── DefaultJspConfigDescriptor.java
│   │       │       │               ├── DefaultJspManager.java
│   │       │       │               ├── DefaultLocaleEncodingManager.java
│   │       │       │               ├── DefaultModuleFinder.java
│   │       │       │               ├── DefaultModuleLayerProcessor.java
│   │       │       │               ├── DefaultModuleReader.java
│   │       │       │               ├── DefaultModuleReference.java
│   │       │       │               ├── DefaultMultiPartManager.java
│   │       │       │               ├── DefaultNamedRequestDispatcher.java
│   │       │       │               ├── DefaultObjectInstanceManager.java
│   │       │       │               ├── DefaultPiranha.java
│   │       │       │               ├── DefaultPiranhaBuilder.java
│   │       │       │               ├── DefaultPiranhaConfiguration.java
│   │       │       │               ├── DefaultPushBuilder.java
│   │       │       │               ├── DefaultSecurityManager.java
│   │       │       │               ├── DefaultServlet.java
│   │       │       │               ├── DefaultServletConnection.java
│   │       │       │               ├── DefaultServletEnvironment.java
│   │       │       │               ├── DefaultServletInvocation.java
│   │       │       │               ├── DefaultServletRequestDispatcher.java
│   │       │       │               ├── DefaultServletRequestManager.java
│   │       │       │               ├── DefaultTaglibDescriptor.java
│   │       │       │               ├── DefaultWebApplication.java
│   │       │       │               ├── DefaultWebApplicationBuilder.java
│   │       │       │               ├── DefaultWebApplicationClassLoader.java
│   │       │       │               ├── DefaultWebApplicationExtensionContext.java
│   │       │       │               ├── DefaultWebApplicationInputStream.java
│   │       │       │               ├── DefaultWebApplicationManager.java
│   │       │       │               ├── DefaultWebApplicationOutputStream.java
│   │       │       │               ├── DefaultWebApplicationPrintWriter.java
│   │       │       │               ├── DefaultWebApplicationRequest.java
│   │       │       │               ├── DefaultWebApplicationRequestBuilder.java
│   │       │       │               ├── DefaultWebApplicationRequestMapper.java
│   │       │       │               ├── DefaultWebApplicationRequestMapping.java
│   │       │       │               ├── DefaultWebApplicationResponse.java
│   │       │       │               ├── DefaultWebApplicationResponseBuilder.java
│   │       │       │               ├── DefaultWebConnection.java
│   │       │       │               └── WarFileExtractor.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           ├── java/
│   │           │   └── cloud/
│   │           │       └── piranha/
│   │           │           └── core/
│   │           │               └── impl/
│   │           │                   ├── AsyncContextTest.java
│   │           │                   ├── CookieParserTest.java
│   │           │                   ├── DefaultAnnotationManagerTest.java
│   │           │                   ├── DefaultErrorPageManagerTest.java
│   │           │                   ├── DefaultFilterEnvironmentTest.java
│   │           │                   ├── DefaultHttpHeaderManagerTest.java
│   │           │                   ├── DefaultPiranhaConfigurationTest.java
│   │           │                   ├── DefaultPushBuilderTest.java
│   │           │                   ├── DefaultSecurityManagerTest.java
│   │           │                   ├── DefaultServletEnvironmentTest.java
│   │           │                   ├── DefaultWebApplicationBuilderTest.java
│   │           │                   ├── DefaultWebApplicationClassLoaderTest.java
│   │           │                   ├── DefaultWebApplicationExtensionContextTest.java
│   │           │                   ├── DefaultWebApplicationManagerTest.java
│   │           │                   ├── DefaultWebApplicationOutputStreamTest.java
│   │           │                   ├── DefaultWebApplicationRequestMapperTest.java
│   │           │                   ├── DefaultWebApplicationRequestMappingTest.java
│   │           │                   ├── DefaultWebApplicationRequestTest.java
│   │           │                   ├── DefaultWebApplicationResponseTest.java
│   │           │                   ├── DefaultWebApplicationTest.java
│   │           │                   ├── DefaultWebConnectionTest.java
│   │           │                   ├── FilterTest.java
│   │           │                   ├── HttpSessionTest.java
│   │           │                   ├── ReadListenerTest.java
│   │           │                   ├── RequestDispatcherTest.java
│   │           │                   ├── ServletContextAttributeListenerTest.java
│   │           │                   ├── ServletInputStreamTest.java
│   │           │                   ├── ServletRegistrationTest.java
│   │           │                   ├── ServletRequestAttributeListenerTest.java
│   │           │                   ├── ServletTest.java
│   │           │                   ├── TestChat1Servlet.java
│   │           │                   ├── TestChat2Servlet.java
│   │           │                   ├── TestEcho1Servlet.java
│   │           │                   ├── TestEcho2Servlet.java
│   │           │                   ├── TestHttpServerRequest.java
│   │           │                   ├── TestHttpServerResponse.java
│   │           │                   ├── TestIOExceptionServlet.java
│   │           │                   ├── TestInclude2Servlet.java
│   │           │                   ├── TestInclude3Servlet.java
│   │           │                   ├── TestInclude4Servlet.java
│   │           │                   ├── TestIncludeServlet.java
│   │           │                   ├── TestRuntimeExceptionServlet.java
│   │           │                   ├── TestSnoopServlet.java
│   │           │                   ├── TestWebApplicationRequest.java
│   │           │                   ├── TestWebApplicationResponse.java
│   │           │                   └── WriteListenerTest.java
│   │           └── webapp/
│   │               └── resourcepaths/
│   │                   ├── catalog/
│   │                   │   ├── index.html
│   │                   │   ├── offers/
│   │                   │   │   ├── books.html
│   │                   │   │   └── music.html
│   │                   │   └── products.html
│   │                   ├── customer/
│   │                   │   └── login.jsp
│   │                   └── welcome.html
│   └── pom.xml
├── debug/
│   ├── modules.sh
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               ├── cloud/
│               │   └── piranha/
│               │       └── debug/
│               │           └── Debug.java
│               └── module-info.java
├── dist/
│   ├── coreprofile/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── dist/
│   │       │       │           └── coreprofile/
│   │       │       │               └── CoreProfilePiranhaMain.java
│   │       │       └── module-info.java
│   │       └── site/
│   │           ├── markdown/
│   │           │   ├── create_a_json_rest_service.md
│   │           │   ├── create_a_rest_service.md
│   │           │   ├── debugging_a_rest_service_with_netbeans.md
│   │           │   ├── debugging_a_rest_service_with_vscode.md
│   │           │   ├── index.md
│   │           │   ├── testing_with_junit5_and_arquillian.md
│   │           │   └── using_project_crac.md
│   │           └── site.xml
│   ├── isolated/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── assembly/
│   │       │   │   └── zip.xml
│   │       │   ├── docker/
│   │       │   │   └── Dockerfile
│   │       │   ├── java/
│   │       │   │   ├── cloud/
│   │       │   │   │   └── piranha/
│   │       │   │   │       └── dist/
│   │       │   │   │           └── isolated/
│   │       │   │   │               └── IsolatedPiranha.java
│   │       │   │   └── module-info.java
│   │       │   └── zip/
│   │       │       ├── etc/
│   │       │       │   ├── keystore.jks
│   │       │       │   └── logging.properties
│   │       │       ├── tmp/
│   │       │       │   └── README
│   │       │       └── webapps/
│   │       │           └── README
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── dist/
│   │                           └── isolated/
│   │                               └── IsolatedPiranhaIT.java
│   ├── micro/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── docker/
│   │       │   │   └── Dockerfile
│   │       │   ├── java/
│   │       │   │   ├── cloud/
│   │       │   │   │   └── piranha/
│   │       │   │   │       └── dist/
│   │       │   │   │           └── micro/
│   │       │   │   │               ├── MicroBootstrap.java
│   │       │   │   │               └── package-info.java
│   │       │   │   └── module-info.java
│   │       │   └── javadoc/
│   │       │       └── cloud.piranha.dist.micro/
│   │       │           └── cloud/
│   │       │               └── piranha/
│   │       │                   └── dist/
│   │       │                       └── micro/
│   │       │                           └── doc-files/
│   │       │                               └── request-response.pptx
│   │       ├── site/
│   │       │   ├── markdown/
│   │       │   │   ├── create_a_hello_world_web_application.md
│   │       │   │   └── index.md
│   │       │   └── site.xml
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── dist/
│   │                           └── micro/
│   │                               └── MicroPiranhaIT.java
│   ├── microprofile/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── docker/
│   │           │   └── Dockerfile
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── dist/
│   │               │           └── microprofile/
│   │               │               └── MicroProfilePiranhaMain.java
│   │               └── module-info.java
│   ├── platform/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── assembly/
│   │       │   │   └── zip.xml
│   │       │   ├── docker/
│   │       │   │   └── Dockerfile
│   │       │   ├── java/
│   │       │   │   ├── cloud/
│   │       │   │   │   └── piranha/
│   │       │   │   │       └── dist/
│   │       │   │   │           └── platform/
│   │       │   │   │               ├── PlatformPiranhaMain.java
│   │       │   │   │               └── PlatformWebApplication.java
│   │       │   │   └── module-info.java
│   │       │   └── zip/
│   │       │       ├── etc/
│   │       │       │   ├── keystore.jks
│   │       │       │   ├── logging.properties
│   │       │       │   └── truststore.jks
│   │       │       ├── tmp/
│   │       │       │   └── README
│   │       │       └── webapps/
│   │       │           └── README
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── dist/
│   │                           └── platform/
│   │                               ├── PlatformPiranhaBuilderTest.java
│   │                               └── PlatformPiranhaIT.java
│   ├── pom.xml
│   ├── server/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── assembly/
│   │       │   │   └── zip.xml
│   │       │   ├── docker/
│   │       │   │   └── Dockerfile
│   │       │   ├── java/
│   │       │   │   ├── cloud/
│   │       │   │   │   └── piranha/
│   │       │   │   │       └── dist/
│   │       │   │   │           └── server/
│   │       │   │   │               ├── ServerPiranhaMain.java
│   │       │   │   │               └── ServerWebApplication.java
│   │       │   │   └── module-info.java
│   │       │   └── zip/
│   │       │       ├── etc/
│   │       │       │   ├── keystore.jks
│   │       │       │   ├── logging.properties
│   │       │       │   └── truststore.jks
│   │       │       ├── tmp/
│   │       │       │   └── README
│   │       │       └── webapps/
│   │       │           └── README
│   │       ├── site/
│   │       │   ├── markdown/
│   │       │   │   ├── create_a_hello_world_web_application.md
│   │       │   │   └── index.md
│   │       │   └── site.xml
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── dist/
│   │                           └── server/
│   │                               ├── ServerPiranhaBuilderTest.java
│   │                               └── ServerPiranhaIT.java
│   ├── servlet/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── docker/
│   │       │   │   └── Dockerfile
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── dist/
│   │       │       │           └── servlet/
│   │       │       │               └── ServletPiranhaMain.java
│   │       │       └── module-info.java
│   │       └── site/
│   │           ├── markdown/
│   │           │   ├── create_a_hello_world_web_application.md
│   │           │   ├── create_a_jakarta_pages_application.md
│   │           │   ├── create_a_websocket_application.md
│   │           │   ├── index.md
│   │           │   └── run_a_web_application_on_crac.md
│   │           └── site.xml
│   └── webprofile/
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   ├── docker/
│           │   │   └── Dockerfile
│           │   └── java/
│           │       ├── cloud/
│           │       │   └── piranha/
│           │       │       └── dist/
│           │       │           └── webprofile/
│           │       │               └── WebProfilePiranhaMain.java
│           │       └── module-info.java
│           └── site/
│               ├── markdown/
│               │   ├── create_a_faces_application.md
│               │   ├── create_a_hello_world_application.md
│               │   ├── create_a_jakarta_rest_service.md
│               │   ├── create_a_pages_application.md
│               │   ├── index.md
│               │   ├── testing_with_junit5_and_playwright.md
│               │   └── testing_with_our_container_image.md
│               └── site.xml
├── docker/
│   ├── coreprofile/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── docker/
│   │       │       └── Dockerfile
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── docker/
│   │                           └── coreprofile/
│   │                               └── CoreProfileIT.java
│   └── pom.xml
├── embedded/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   ├── cloud/
│       │   │   │   └── piranha/
│       │   │   │       └── embedded/
│       │   │   │           ├── EmbeddedPiranha.java
│       │   │   │           ├── EmbeddedPiranhaBuilder.java
│       │   │   │           ├── EmbeddedRequest.java
│       │   │   │           ├── EmbeddedRequestBuilder.java
│       │   │   │           ├── EmbeddedResponse.java
│       │   │   │           ├── EmbeddedResponseBuilder.java
│       │   │   │           └── package-info.java
│       │   │   └── module-info.java
│       │   └── javadoc/
│       │       └── cloud.piranha.embedded/
│       │           └── cloud/
│       │               └── piranha/
│       │                   └── embedded/
│       │                       └── doc-files/
│       │                           └── request-response.pptx
│       ├── site/
│       │   ├── markdown/
│       │   │   ├── create_a_hello_world_web_application.md
│       │   │   ├── create_a_piranha_embedded_graalvm_application.md
│       │   │   ├── create_an_embedded_jlink_application.md
│       │   │   ├── index.md
│       │   │   └── running_piranha_embedded_with_spring_boot.md
│       │   └── site.xml
│       └── test/
│           └── java/
│               └── cloud/
│                   └── piranha/
│                       └── embedded/
│                           ├── EmbeddedPiranhaBuilderTest.java
│                           ├── EmbeddedPiranhaTest.java
│                           ├── EmbeddedRequestBuilderTest.java
│                           ├── EmbeddedRequestTest.java
│                           └── EmbeddedResponseBuilderTest.java
├── extension/
│   ├── angus/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── angus/
│   │               │               └── AngusExtension.java
│   │               └── module-info.java
│   ├── annotationscan/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── annotationscan/
│   │       │       │               ├── AnnotationScanExtension.java
│   │       │       │               ├── AnnotationScanInitializer.java
│   │       │       │               └── internal/
│   │       │       │                   ├── InternalAnnotationScanAnnotationInfo.java
│   │       │       │                   └── InternalAnnotationScanAnnotationManager.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── annotationscan/
│   │                               ├── AnnotationScanExtensionTest.java
│   │                               ├── TestAnnotation.java
│   │                               ├── TestServlet.java
│   │                               ├── TestWithHandlesTypesInitializer.java
│   │                               └── internal/
│   │                                   └── InternalAnnotationScanAnnotationManagerTest.java
│   ├── annotationscan-classfile/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── annotationscan/
│   │       │       │               └── classfile/
│   │       │       │                   ├── ClassfileAnnotationScanExtension.java
│   │       │       │                   ├── ClassfileAnnotationScanInitializer.java
│   │       │       │                   └── internal/
│   │       │       │                       ├── InternalAnnotationScanAnnotationInfo.java
│   │       │       │                       └── InternalAnnotationScanAnnotationManager.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── annotationscan/
│   │                               └── classfile/
│   │                                   ├── AnnotationScanExtensionTest.java
│   │                                   ├── TestAnnotation.java
│   │                                   ├── TestServlet.java
│   │                                   ├── TestWithHandlesTypesInitializer.java
│   │                                   └── internal/
│   │                                       └── InternalAnnotationScanAnnotationManagerTest.java
│   ├── bytesstreamhandler/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── bytesstreamhandler/
│   │       │       │               ├── BytesStreamHandlerExtension.java
│   │       │       │               ├── BytesStreamHandlerServletContextListener.java
│   │       │       │               └── BytesStreamHandlerServletRequestListener.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── bytesstreamhandler/
│   │                               └── BytesStreamHandlerExtensionTest.java
│   ├── concurro/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── concurro/
│   │               │               └── ConcurroExtension.java
│   │               └── module-info.java
│   ├── coreprofile/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── coreprofile/
│   │               │               └── CoreProfileExtension.java
│   │               └── module-info.java
│   ├── datasource/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── datasource/
│   │       │       │               ├── DataSourceWrapper.java
│   │       │       │               ├── DefaultDatasourceExtension.java
│   │       │       │               ├── DefaultDatasourceInitializer.java
│   │       │       │               ├── TxJoiningDataSource.java
│   │       │       │               └── XADataSourceWrapper.java
│   │       │       └── module-info.java
│   │       └── site/
│   │           ├── markdown/
│   │           │   └── index.md
│   │           └── site.xml
│   ├── declared/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── declared/
│   │       │       │               ├── DeclaredExtension.java
│   │       │       │               └── internal/
│   │       │       │                   └── InternalDeclaredInitializer.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           ├── declared/
│   │                           │   └── DeclaredExtensionTest.java
│   │                           └── handlestypes/
│   │                               └── internal/
│   │                                   └── InternalDeclaredInitializerTest.java
│   ├── eclipselink/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   ├── cloud/
│   │           │   │   └── piranha/
│   │           │   │       └── extension/
│   │           │   │           └── eclipselink/
│   │           │   │               ├── EclipseLinkCdiExtension.java
│   │           │   │               ├── EclipseLinkExtension.java
│   │           │   │               ├── EclipseLinkInitializer.java
│   │           │   │               ├── EntityManagerFactoryCreator.java
│   │           │   │               ├── EntityManagerProducer.java
│   │           │   │               ├── NonTxEntityManagerHolder.java
│   │           │   │               ├── PiranhaEntityManager.java
│   │           │   │               ├── TxEntityManagerHolder.java
│   │           │   │               └── wrappers/
│   │           │   │                   └── EntityManagerWrapper.java
│   │           │   └── module-info.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── jakarta.enterprise.inject.spi.Extension
│   ├── epicyro/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── epicyro/
│   │       │       │               ├── AuthenticationFilter.java
│   │       │       │               ├── AuthenticationInitializer.java
│   │       │       │               └── DoNothingServerAuthModule.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── epicyro/
│   │                               └── AuthenticationInitializerTest.java
│   ├── exousia/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── exousia/
│   │               │               ├── AuthorizationFilter.java
│   │               │               ├── AuthorizationInitializer.java
│   │               │               ├── AuthorizationPostInitializer.java
│   │               │               ├── AuthorizationPreFilter.java
│   │               │               ├── AuthorizationPreInitializer.java
│   │               │               ├── PiranhaPrincipalMapper.java
│   │               │               └── PiranhaToExousiaConverter.java
│   │               └── module-info.java
│   ├── expressly/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── expressly/
│   │               │               └── ExpresslyExtension.java
│   │               └── module-info.java
│   ├── fileupload/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── fileupload/
│   │       │       │               ├── FileUploadExtension.java
│   │       │       │               ├── FileUploadMultiPart.java
│   │       │       │               ├── FileUploadMultiPartInitializer.java
│   │       │       │               └── FileUploadMultiPartManager.java
│   │       │       └── module-info.java
│   │       ├── site/
│   │       │   ├── markdown/
│   │       │   │   └── index.md
│   │       │   └── site.xml
│   │       └── test/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── fileupload/
│   │               │               └── tests/
│   │               │                   └── FileUploadMultiPartManagerTest.java
│   │               └── module-info.java
│   ├── handlestypes/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── handlestypes/
│   │       │       │               ├── HandlesTypesExtension.java
│   │       │       │               └── internal/
│   │       │       │                   ├── InternalHandlesTypesInitializer.java
│   │       │       │                   └── InternalHandlesTypesManager.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── handlestypes/
│   │                               ├── HandlesTypesExtensionTest.java
│   │                               └── internal/
│   │                                   ├── InternalHandlesTypesInitializerTest.java
│   │                                   ├── InternalHandlesTypesManagerTest.java
│   │                                   ├── TestA.java
│   │                                   ├── TestB.java
│   │                                   ├── TestC.java
│   │                                   ├── TestD.java
│   │                                   └── TestServletContainerInitializer.java
│   ├── hazelcast/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   ├── cloud/
│   │       │   │   │   └── piranha/
│   │       │   │   │       └── extension/
│   │       │   │   │           └── hazelcast/
│   │       │   │   │               ├── HazelcastHttpSession.java
│   │       │   │   │               ├── HazelcastHttpSessionManager.java
│   │       │   │   │               └── HazelcastInitializer.java
│   │       │   │   └── module-info.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── jakarta.servlet.ServletContainerInitializer
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── hazelcast/
│   │                               └── HazelcastInitializerTest.java
│   ├── herring/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── herring/
│   │       │       │               ├── HerringExtension.java
│   │       │       │               ├── HerringInitialContextFactory.java
│   │       │       │               └── HerringServletRequestListener.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── herring/
│   │                               └── HerringExtensionTest.java
│   ├── hibernate-validator/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── hibernate/
│   │               │               └── validator/
│   │               │                   └── HibernateValidatorExtension.java
│   │               └── module-info.java
│   ├── jaxb/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── jaxb/
│   │               │               └── JAXBExtension.java
│   │               └── module-info.java
│   ├── jersey/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   ├── cloud/
│   │           │   │   └── piranha/
│   │           │   │       └── extension/
│   │           │   │           └── jersey/
│   │           │   │               ├── JerseyExtension.java
│   │           │   │               ├── JerseySourceBean.java
│   │           │   │               └── JerseyTargetBean.java
│   │           │   └── module-info.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── jakarta.enterprise.inject.spi.Extension
│   ├── jstl/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── jstl/
│   │               │               └── JSTLExtension.java
│   │               └── module-info.java
│   ├── micro/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   ├── cloud/
│   │           │   │   └── piranha/
│   │           │   │       └── extension/
│   │           │   │           └── micro/
│   │           │   │               └── MicroExtension.java
│   │           │   └── module-info.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── cloud.piranha.core.api.WebApplicationExtension
│   ├── microprofile/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── microprofile/
│   │               │               └── MicroProfileExtension.java
│   │               └── module-info.java
│   ├── mojarra/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── mojarra/
│   │               │               └── MojarraExtension.java
│   │               └── module-info.java
│   ├── naming-cdi/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── naming/
│   │       │       │               └── cdi/
│   │       │       │                   ├── DefaultInitialContextFactory.java
│   │       │       │                   ├── NamingExtension.java
│   │       │       │                   └── NamingServletRequestListener.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── naming/
│   │                               └── NamingExtensionTest.java
│   ├── omnifaces-config/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── omnifaces/
│   │               │               └── config/
│   │               │                   └── ConfigExtension.java
│   │               └── module-info.java
│   ├── omnifaces-microprofile-jwt-auth/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── omnifaces/
│   │               │               └── microprofile/
│   │               │                   └── jwt/
│   │               │                       └── auth/
│   │               │                           └── MicroProfileJWTAuthExtension.java
│   │               └── module-info.java
│   ├── omnifaces-omniservices/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── omniservices/
│   │               │               └── OmniServicesExtension.java
│   │               └── module-info.java
│   ├── omnifaces-omniutils/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── omniutils/
│   │               │               └── OmniUtilsExtension.java
│   │               └── module-info.java
│   ├── omnifish-omnibeans/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── omnibeans/
│   │               │               └── OmniBeansExtension.java
│   │               └── module-info.java
│   ├── omnifish-transact/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── transact/
│   │               │               ├── TransactExtension.java
│   │               │               ├── TransactFilter.java
│   │               │               └── TransactInitializer.java
│   │               └── module-info.java
│   ├── parsson/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── parsson/
│   │               │               └── ParssonExtension.java
│   │               └── module-info.java
│   ├── platform/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── platform/
│   │               │               └── PlatformExtension.java
│   │               └── module-info.java
│   ├── policy/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── policy/
│   │       │       │               ├── PolicyExtension.java
│   │       │       │               └── internal/
│   │       │       │                   ├── InternalPolicyServletContextListener.java
│   │       │       │                   ├── InternalPolicyServletRequestListener.java
│   │       │       │                   └── InternalPolicyThreadLocal.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── policy/
│   │                               └── PolicyExtensionTest.java
│   ├── pom.xml
│   ├── scinitializer/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── scinitializer/
│   │       │       │               └── ServletContainerInitializerExtension.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── scinitializer/
│   │                               └── ServletContainerInitializerExtensionTest.java
│   ├── security-jakarta/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── security/
│   │               │               └── jakarta/
│   │               │                   ├── JakartaSecurityAllInitializer.java
│   │               │                   └── JakartaSecurityExtension.java
│   │               └── module-info.java
│   ├── security-servlet/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── security/
│   │       │       │               └── servlet/
│   │       │       │                   ├── ServletSecurityAllInitializer.java
│   │       │       │                   ├── ServletSecurityExtension.java
│   │       │       │                   ├── ServletSecurityManager.java
│   │       │       │                   ├── ServletSecurityManagerExtension.java
│   │       │       │                   ├── ServletSecurityManagerInitializer.java
│   │       │       │                   └── ServletSecurityPrincipal.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── security/
│   │                               └── servlet/
│   │                                   ├── ServletSecurityManagerExtensionTest.java
│   │                                   ├── ServletSecurityManagerInitializerTest.java
│   │                                   └── ServletSecurityManagerTest.java
│   ├── servlet/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── servlet/
│   │               │               └── ServletExtension.java
│   │               └── module-info.java
│   ├── servletannotations/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── servletannotations/
│   │       │       │               ├── ServletAnnotationsExtension.java
│   │       │       │               └── ServletAnnotationsInitializer.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           ├── java/
│   │           │   └── cloud/
│   │           │       └── piranha/
│   │           │           └── extension/
│   │           │               └── servletannotations/
│   │           │                   ├── ServletAnnotationsExtensionTest.java
│   │           │                   ├── Test2Filter.java
│   │           │                   ├── Test2Servlet.java
│   │           │                   ├── Test3Filter.java
│   │           │                   ├── Test3Servlet.java
│   │           │                   ├── Test4Filter.java
│   │           │                   ├── Test4Servlet.java
│   │           │                   ├── Test5Servlet.java
│   │           │                   ├── TestFilter.java
│   │           │                   ├── TestListener.java
│   │           │                   ├── TestServlet.java
│   │           │                   └── WebServletTest.java
│   │           └── webapp/
│   │               └── webservlet/
│   │                   └── WEB-INF/
│   │                       └── web.xml
│   ├── soteria/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── soteria/
│   │       │       │               ├── IdentityStoreLoginHandler.java
│   │       │       │               ├── SoteriaInitializer.java
│   │       │       │               └── SoteriaPreCDIInitializer.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           ├── java/
│   │           │   └── cloud/
│   │           │       └── piranha/
│   │           │           └── extension/
│   │           │               └── soteria/
│   │           │                   ├── IdentityStoreLoginHandlerTest.java
│   │           │                   ├── SoteriaInitializerNoCdiTest.java
│   │           │                   ├── SoteriaInitializerTest.java
│   │           │                   ├── SoteriaPreCDIInitializerTest.java
│   │           │                   └── TestIdentityStore.java
│   │           └── webapp/
│   │               └── WEB-INF/
│   │                   └── beans.xml
│   ├── tempdir/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── tempdir/
│   │       │       │               ├── TempDirExtension.java
│   │       │       │               └── TempDirServletContainerInitializer.java
│   │       │       └── module-info.java
│   │       ├── site/
│   │       │   ├── markdown/
│   │       │   │   └── index.md
│   │       │   └── site.xml
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── tempdir/
│   │                               ├── TempDirExtensionTest.java
│   │                               └── TempDirServletContainerInitializerTest.java
│   ├── tyrus/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── tyrus/
│   │       │       │               └── TyrusExtension.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── tyrus/
│   │                               └── TyrusExtensionTest.java
│   ├── wasp/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── wasp/
│   │       │       │               ├── WaspExtension.java
│   │       │       │               ├── WaspInitializer.java
│   │       │       │               ├── WaspJspManager.java
│   │       │       │               ├── WaspJspManagerExtension.java
│   │       │       │               ├── WaspJspManagerInitializer.java
│   │       │       │               └── WaspServlet.java
│   │       │       └── module-info.java
│   │       ├── site/
│   │       │   └── site.xml
│   │       └── test/
│   │           ├── java/
│   │           │   └── cloud/
│   │           │       └── piranha/
│   │           │           └── extension/
│   │           │               └── wasp/
│   │           │                   ├── JspDescriptorTest.java
│   │           │                   ├── JspWriterTest.java
│   │           │                   ├── WaspExtensionTest.java
│   │           │                   ├── WaspInitializerTest.java
│   │           │                   └── WaspJspManagerExtensionTest.java
│   │           └── webapp/
│   │               ├── jspwriter/
│   │               │   ├── clearBuffer.jsp
│   │               │   ├── close.jsp
│   │               │   ├── close2.jsp
│   │               │   ├── close3.jsp
│   │               │   └── close4.jsp
│   │               └── waspinitializer/
│   │                   └── WEB-INF/
│   │                       ├── classes/
│   │                       │   └── KEEPME
│   │                       └── lib/
│   │                           └── KEEPME
│   ├── webprofile/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── webprofile/
│   │               │               └── WebProfileExtension.java
│   │               └── module-info.java
│   ├── webxml/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── webxml/
│   │       │       │               ├── WebXmlExtension.java
│   │       │       │               ├── WebXmlInitializer.java
│   │       │       │               └── internal/
│   │       │       │                   ├── WebXml.java
│   │       │       │                   ├── WebXmlContextParam.java
│   │       │       │                   ├── WebXmlDataSource.java
│   │       │       │                   ├── WebXmlErrorPage.java
│   │       │       │                   ├── WebXmlFilter.java
│   │       │       │                   ├── WebXmlFilterInitParam.java
│   │       │       │                   ├── WebXmlFilterMapping.java
│   │       │       │                   ├── WebXmlJspConfig.java
│   │       │       │                   ├── WebXmlJspConfigTaglib.java
│   │       │       │                   ├── WebXmlListener.java
│   │       │       │                   ├── WebXmlLoginConfig.java
│   │       │       │                   ├── WebXmlManager.java
│   │       │       │                   ├── WebXmlMimeMapping.java
│   │       │       │                   ├── WebXmlParser.java
│   │       │       │                   ├── WebXmlProcessor.java
│   │       │       │                   ├── WebXmlSecurityConstraint.java
│   │       │       │                   ├── WebXmlServlet.java
│   │       │       │                   ├── WebXmlServletInitParam.java
│   │       │       │                   ├── WebXmlServletMapping.java
│   │       │       │                   ├── WebXmlServletMultipartConfig.java
│   │       │       │                   ├── WebXmlServletSecurityRoleRef.java
│   │       │       │                   ├── WebXmlSessionConfig.java
│   │       │       │                   └── WebXmlSessionConfigCookieConfig.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           ├── java/
│   │           │   └── cloud/
│   │           │       └── piranha/
│   │           │           └── extension/
│   │           │               └── webxml/
│   │           │                   ├── TestFilter.java
│   │           │                   ├── TestServlet.java
│   │           │                   ├── WebXmlExtensionTest.java
│   │           │                   ├── WebXmlInitializerTest.java
│   │           │                   └── internal/
│   │           │                       ├── ContextParamTest.java
│   │           │                       ├── DataSourceTest.java
│   │           │                       ├── DefaultContextPathTest.java
│   │           │                       ├── DenyUncoveredMethodsTest.java
│   │           │                       ├── EffectiveMajorVersionTest.java
│   │           │                       ├── ErrorPageTest.java
│   │           │                       ├── FilterMappingTest.java
│   │           │                       ├── JspConfigTest.java
│   │           │                       ├── MetadataCompleteTest.java
│   │           │                       ├── MimeMappingTest.java
│   │           │                       ├── TestWithoutLeadingSlashServlet.java
│   │           │                       ├── WebXmlManagerTest.java
│   │           │                       ├── WebXmlParserTest.java
│   │           │                       ├── WebXmlProcessorTest.java
│   │           │                       ├── WelcomeFileTest.java
│   │           │                       └── WithoutLeadingSlashTest.java
│   │           └── webxml/
│   │               ├── contextParam/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── dataSource/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── defaultContextPath/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── denyUncoveredMethods/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── effectiveMajorVersion1/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── errorPage/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── filterMappings/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── init/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── init2/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── init3/
│   │               │   └── WEB-INF/
│   │               │       └── classes/
│   │               │           └── META-INF/
│   │               │               └── web-fragment.xml
│   │               ├── jspConfig/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── metadataComplete/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── mimeMapping/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── parse/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── parse2/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── parse3/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── parse4/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── welcomeFile/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               └── withoutLeadingSlash1/
│   │                   └── WEB-INF/
│   │                       └── web.xml
│   ├── welcomefile/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── welcomefile/
│   │       │       │               ├── WelcomeFileExtension.java
│   │       │       │               └── internal/
│   │       │       │                   └── InternalWelcomeFileManager.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           ├── java/
│   │           │   └── cloud/
│   │           │       └── piranha/
│   │           │           └── extension/
│   │           │               └── welcomefile/
│   │           │                   ├── WelcomeFileExtensionTest.java
│   │           │                   └── internal/
│   │           │                       └── InternalWelcomeFileManagerTest.java
│   │           └── webapp/
│   │               ├── welcomefile1/
│   │               │   └── index.html
│   │               └── welcomefile2/
│   │                   └── custom.html
│   ├── weld/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   ├── cloud/
│   │           │   │   └── piranha/
│   │           │   │       └── extension/
│   │           │   │           └── weld/
│   │           │   │               ├── RealtimeHttpServletRequestWrapper.java
│   │           │   │               ├── WeldCDI.java
│   │           │   │               ├── WeldContainer.java
│   │           │   │               ├── WeldExtension.java
│   │           │   │               ├── WeldHttpServletRequest.java
│   │           │   │               ├── WeldInitListener.java
│   │           │   │               ├── WeldInitializer.java
│   │           │   │               ├── WeldObjectInstanceManager.java
│   │           │   │               ├── WeldProvider.java
│   │           │   │               └── WeldSecurityService.java
│   │           │   └── module-info.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       ├── org.jboss.weld.bootstrap.api.Service
│   │                       └── org.jboss.weld.environment.servlet.Container
│   └── yasson/
│       ├── pom.xml
│       └── src/
│           └── main/
│               └── java/
│                   ├── cloud/
│                   │   └── piranha/
│                   │       └── extension/
│                   │           └── yasson/
│                   │               └── YassonExtension.java
│                   └── module-info.java
├── feature/
│   ├── api/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── feature/
│   │               │           └── api/
│   │               │               ├── Feature.java
│   │               │               └── FeatureManager.java
│   │               └── module-info.java
│   ├── crac/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── feature/
│   │       │       │           └── crac/
│   │       │       │               └── CracFeature.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── feature/
│   │                           └── crac/
│   │                               └── CracFeatureTest.java
│   ├── exitonstop/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── feature/
│   │       │       │           └── exitonstop/
│   │       │       │               └── ExitOnStopFeature.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── feature/
│   │                           └── exitonstop/
│   │                               └── ExitOnStopFeatureTest.java
│   ├── http/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── feature/
│   │       │       │           └── http/
│   │       │       │               └── HttpFeature.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── feature/
│   │                           └── http/
│   │                               └── HttpFeatureTest.java
│   ├── https/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── feature/
│   │       │       │           └── https/
│   │       │       │               └── HttpsFeature.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── feature/
│   │                           └── https/
│   │                               └── HttpsFeatureTest.java
│   ├── impl/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── feature/
│   │       │       │           └── impl/
│   │       │       │               ├── DefaultFeature.java
│   │       │       │               └── DefaultFeatureManager.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── feature/
│   │                           └── impl/
│   │                               ├── DefaultFeatureManagerTest.java
│   │                               └── DefaultFeatureTest.java
│   ├── isolatedwebapp/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── feature/
│   │               │           └── isolatedwebapp/
│   │               │               └── IsolatedWebAppFeature.java
│   │               └── module-info.java
│   ├── logging/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── feature/
│   │       │       │           └── logging/
│   │       │       │               ├── LoggingFeature.java
│   │       │       │               └── LoggingHandler.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── feature/
│   │                           └── logging/
│   │                               └── LoggingFeatureTest.java
│   ├── pid/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── feature/
│   │               │           └── pid/
│   │               │               └── PidFeature.java
│   │               └── module-info.java
│   ├── pom.xml
│   ├── trace/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── feature/
│   │       │       │           └── trace/
│   │       │       │               └── TraceFeature.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── feature/
│   │               │           └── trace/
│   │               │               └── tests/
│   │               │                   └── TraceFeatureTest.java
│   │               └── module-info.java
│   ├── webapp/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── feature/
│   │       │       │           └── webapp/
│   │       │       │               └── WebAppFeature.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── feature/
│   │                           └── webapp/
│   │                               └── WebAppFeatureTest.java
│   └── webapps/
│       ├── pom.xml
│       └── src/
│           └── main/
│               └── java/
│                   ├── cloud/
│                   │   └── piranha/
│                   │       └── feature/
│                   │           └── webapps/
│                   │               └── WebAppsFeature.java
│                   └── module-info.java
├── http/
│   ├── api/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── http/
│   │               │           └── api/
│   │               │               ├── HttpServer.java
│   │               │               ├── HttpServerProcessor.java
│   │               │               ├── HttpServerProcessorEndState.java
│   │               │               ├── HttpServerRequest.java
│   │               │               ├── HttpServerResponse.java
│   │               │               └── package-info.java
│   │               └── module-info.java
│   ├── crac/
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── http/
│   │               │           └── crac/
│   │               │               └── CracHttpServer.java
│   │               └── module-info.java
│   ├── grizzly/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── http/
│   │       │       │           └── grizzly/
│   │       │       │               ├── GrizzlyHttpServer.java
│   │       │       │               ├── GrizzlyHttpServerRequest.java
│   │       │       │               ├── GrizzlyHttpServerResponse.java
│   │       │       │               └── package-info.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── http/
│   │                           └── grizzly/
│   │                               ├── GrizzlyHttpServerRequestTest.java
│   │                               └── GrizzlyHttpServerTest.java
│   ├── impl/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── http/
│   │       │       │           └── impl/
│   │       │       │               ├── DefaultHttpServer.java
│   │       │       │               ├── DefaultHttpServerAcceptorThread.java
│   │       │       │               ├── DefaultHttpServerProcessingThread.java
│   │       │       │               ├── DefaultHttpServerProcessor.java
│   │       │       │               ├── DefaultHttpServerRequest.java
│   │       │       │               ├── DefaultHttpServerResponse.java
│   │       │       │               ├── DefaultHttpServerThreadFactory.java
│   │       │       │               └── package-info.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── http/
│   │                           └── impl/
│   │                               ├── DefaultHttpServerRequestTest.java
│   │                               └── DefaultHttpServerTest.java
│   ├── jdk/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── http/
│   │       │       │           └── jdk/
│   │       │       │               ├── JdkHttpHandler.java
│   │       │       │               ├── JdkHttpRequest.java
│   │       │       │               ├── JdkHttpResponse.java
│   │       │       │               ├── JdkHttpServer.java
│   │       │       │               └── package-info.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── http/
│   │                           └── jdk/
│   │                               └── JdkHttpServerTest.java
│   ├── netty/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── http/
│   │       │       │           └── netty/
│   │       │       │               ├── NettyHttpServer.java
│   │       │       │               ├── NettyHttpServerHandler.java
│   │       │       │               ├── NettyHttpServerInitializer.java
│   │       │       │               ├── NettyHttpServerRequest.java
│   │       │       │               ├── NettyHttpServerResponse.java
│   │       │       │               └── package-info.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── http/
│   │                           └── netty/
│   │                               └── NettyHttpServerTest.java
│   ├── pom.xml
│   ├── tests/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── http/
│   │               │           └── tests/
│   │               │               ├── HttpServerRequestTest.java
│   │               │               ├── HttpServerTest.java
│   │               │               └── TestHttpServerProcessor.java
│   │               └── module-info.java
│   ├── undertow/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── http/
│   │       │       │           └── undertow/
│   │       │       │               ├── UndertowHttpHandler.java
│   │       │       │               ├── UndertowHttpRequest.java
│   │       │       │               ├── UndertowHttpResponse.java
│   │       │       │               ├── UndertowHttpServer.java
│   │       │       │               └── package-info.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── http/
│   │                           └── undertow/
│   │                               └── UndertowHttpServerTest.java
│   ├── virtual/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── http/
│   │       │       │           └── virtual/
│   │       │       │               └── VirtualHttpServer.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── http/
│   │                           └── virtual/
│   │                               └── VirtualHttpServerTest.java
│   └── webapp/
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   └── java/
│           │       ├── cloud/
│           │       │   └── piranha/
│           │       │       └── http/
│           │       │           └── webapp/
│           │       │               ├── HttpWebApplicationOutputStream.java
│           │       │               ├── HttpWebApplicationRequest.java
│           │       │               ├── HttpWebApplicationResponse.java
│           │       │               ├── HttpWebApplicationServer.java
│           │       │               └── HttpWebApplicationServerRequestMapper.java
│           │       └── module-info.java
│           └── test/
│               └── java/
│                   └── cloud/
│                       └── piranha/
│                           └── http/
│                               └── webapp/
│                                   ├── HttpWebApplicationRequestTest.java
│                                   ├── HttpWebApplicationResponseTest.java
│                                   ├── HttpWebApplicationServerTest.java
│                                   └── TestSnoopServlet.java
├── maven/
│   ├── archetypes/
│   │   └── pom.xml
│   ├── plugin/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── maven/
│   │       │       │           └── plugin/
│   │       │       │               ├── BaseMojo.java
│   │       │       │               ├── RunMojo.java
│   │       │       │               ├── StartMojo.java
│   │       │       │               └── StopMojo.java
│   │       │       └── module-info.java
│   │       └── site/
│   │           └── site.xml
│   └── pom.xml
├── micro/
│   ├── builder/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── micro/
│   │               │           └── builder/
│   │               │               ├── MicroEmbeddedPiranha.java
│   │               │               ├── MicroEmbeddedPiranhaBuilder.java
│   │               │               ├── MicroWebApplication.java
│   │               │               └── package-info.java
│   │               └── module-info.java
│   ├── core/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   ├── cloud/
│   │           │   │   └── piranha/
│   │           │   │       └── micro/
│   │           │   │           └── core/
│   │           │   │               ├── CdiExtension.java
│   │           │   │               ├── DefaultAnnotationInfo.java
│   │           │   │               ├── InMemoryIdentityStore.java
│   │           │   │               ├── MicroInnerApplication.java
│   │           │   │               ├── MicroInnerDeployer.java
│   │           │   │               └── PiranhaBeanArchiveHandler.java
│   │           │   └── module-info.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       ├── jakarta.enterprise.inject.spi.Extension
│   │                       └── org.jboss.weld.environment.deployment.discovery.BeanArchiveHandler
│   ├── loader/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── micro/
│   │               │           └── loader/
│   │               │               ├── MicroConfiguration.java
│   │               │               ├── MicroDeployOutcome.java
│   │               │               ├── MicroInfo.java
│   │               │               ├── MicroOuterDeployer.java
│   │               │               ├── StaticStreamHandler.java
│   │               │               ├── StaticURLStreamHandlerFactory.java
│   │               │               └── package-info.java
│   │               └── module-info.java
│   └── pom.xml
├── multi/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── assembly/
│       │   │   └── zip.xml
│       │   ├── docker/
│       │   │   └── Dockerfile
│       │   ├── java/
│       │   │   ├── cloud/
│       │   │   │   └── piranha/
│       │   │   │       └── multi/
│       │   │   │           ├── MultiPiranha.java
│       │   │   │           ├── MultiPiranhaBuilder.java
│       │   │   │           ├── MultiPiranhaMain.java
│       │   │   │           └── MultiWebApplication.java
│       │   │   └── module-info.java
│       │   └── zip/
│       │       ├── etc/
│       │       │   ├── keystore.jks
│       │       │   ├── logging.properties
│       │       │   └── truststore.jks
│       │       ├── tmp/
│       │       │   └── README
│       │       └── webapps/
│       │           └── README
│       └── test/
│           └── java/
│               └── cloud/
│                   └── piranha/
│                       └── multi/
│                           ├── MultiPiranhaBuilderTest.java
│                           └── MultiPiranhaIT.java
├── pom.xml
├── resource/
│   ├── api/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── resource/
│   │               │           └── api/
│   │               │               ├── Resource.java
│   │               │               ├── ResourceManager.java
│   │               │               ├── ResourceManagerClassLoader.java
│   │               │               └── package-info.java
│   │               └── module-info.java
│   ├── impl/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   ├── cloud/
│   │       │   │   │   └── piranha/
│   │       │   │   │       └── resource/
│   │       │   │   │           └── impl/
│   │       │   │   │               ├── AliasedDirectoryResource.java
│   │       │   │   │               ├── AliasedNamedResource.java
│   │       │   │   │               ├── ByteArrayResource.java
│   │       │   │   │               ├── ByteArrayResourceStreamHandlerProvider.java
│   │       │   │   │               ├── ByteArrayResourceURLConnection.java
│   │       │   │   │               ├── ByteArrayResourceURLStreamHandler.java
│   │       │   │   │               ├── ClassResource.java
│   │       │   │   │               ├── DefaultResourceManager.java
│   │       │   │   │               ├── DefaultResourceManagerClassLoader.java
│   │       │   │   │               ├── DirectoryResource.java
│   │       │   │   │               ├── JarResource.java
│   │       │   │   │               ├── MultiReleaseResource.java
│   │       │   │   │               ├── PrefixJarResource.java
│   │       │   │   │               └── StringResource.java
│   │       │   │   └── module-info.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── java.net.spi.URLStreamHandlerProvider
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── resource/
│   │                           └── impl/
│   │                               ├── AliasedDirectoryResourceTest.java
│   │                               ├── AliasedNamedResourceTest.java
│   │                               ├── ByteArrayResourceTest.java
│   │                               ├── DefaultResourceManagerTest.java
│   │                               ├── DirectoryResourceTest.java
│   │                               ├── JarResourceTest.java
│   │                               ├── MultiReleaseResourceTest.java
│   │                               └── PrefixJarResourceTest.java
│   ├── pom.xml
│   └── shrinkwrap/
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   └── java/
│           │       ├── cloud/
│           │       │   └── piranha/
│           │       │       └── resource/
│           │       │           └── shrinkwrap/
│           │       │               ├── ArchiveURLStreamHandler.java
│           │       │               ├── GlobalArchiveStreamHandler.java
│           │       │               ├── IsolatingResourceManagerClassLoader.java
│           │       │               ├── NodeURLStreamHandler.java
│           │       │               ├── ShrinkWrapDirectoryInputStream.java
│           │       │               ├── ShrinkWrapResource.java
│           │       │               └── StreamConnection.java
│           │       └── module-info.java
│           └── test/
│               └── java/
│                   └── cloud/
│                       └── piranha/
│                           └── resource/
│                               └── shrinkwrap/
│                                   ├── DefaultResourceManagerTest.java
│                                   └── DefaultWebApplicationClassLoaderTest.java
├── single/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       ├── cloud/
│       │       │   └── piranha/
│       │       │       └── single/
│       │       │           ├── SingleMain.java
│       │       │           ├── SinglePiranha.java
│       │       │           └── SinglePiranhaBuilder.java
│       │       └── module-info.java
│       └── test/
│           └── java/
│               └── cloud/
│                   └── piranha/
│                       └── single/
│                           ├── SinglePiranhaBuilderTest.java
│                           └── SinglePiranhaTest.java
├── spring/
│   ├── pom.xml
│   └── spring-boot-starter-piranha-embedded/
│       ├── pom.xml
│       └── src/
│           └── main/
│               └── java/
│                   ├── cloud/
│                   │   └── piranha/
│                   │       └── spring/
│                   │           └── starter/
│                   │               └── embedded/
│                   │                   ├── EmbeddedPiranhaServletWebServerFactory.java
│                   │                   └── EmbeddedPiranhaWebServer.java
│                   └── module-info.java
├── src/
│   └── site/
│       ├── markdown/
│       │   └── index.md
│       └── site.xml
└── test/
    ├── common/
    │   ├── pom.xml
    │   └── src/
    │       └── main/
    │           └── java/
    │               ├── cloud/
    │               │   └── piranha/
    │               │       └── test/
    │               │           └── common/
    │               │               └── PiranhaStartup.java
    │               └── module-info.java
    ├── coreprofile/
    │   ├── arquillian/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   └── java/
    │   │       │       └── arquillian/
    │   │       │           ├── HelloArquillianApplication.java
    │   │       │           └── HelloArquillianBean.java
    │   │       └── test/
    │   │           └── java/
    │   │               └── helloarquillian/
    │   │                   └── HelloArquillianIT.java
    │   ├── integration/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── cloud/
    │   │       │   │       └── piranha/
    │   │       │   │           └── test/
    │   │       │   │               └── coreprofile/
    │   │       │   │                   └── distribution/
    │   │       │   │                       ├── AsyncBean.java
    │   │       │   │                       ├── BeanParamBean.java
    │   │       │   │                       ├── BeanParamInput.java
    │   │       │   │                       ├── ContainerRequestContextBean.java
    │   │       │   │                       ├── ContainerRequestContextFilter.java
    │   │       │   │                       ├── DependencyInjectionBean.java
    │   │       │   │                       ├── IntegrationApplication.java
    │   │       │   │                       ├── InterceptInterceptor.java
    │   │       │   │                       ├── InterceptedBean.java
    │   │       │   │                       ├── Jsonb.java
    │   │       │   │                       ├── ProducesBean.java
    │   │       │   │                       ├── RestBean.java
    │   │       │   │                       ├── SseBean.java
    │   │       │   │                       ├── SseBroadcastBean.java
    │   │       │   │                       └── TRACE.java
    │   │       │   └── webapp/
    │   │       │       └── WEB-INF/
    │   │       │           └── beans.xml
    │   │       └── test/
    │   │           └── java/
    │   │               └── cloud/
    │   │                   └── piranha/
    │   │                       └── test/
    │   │                           └── coreprofile/
    │   │                               └── distribution/
    │   │                                   ├── AsyncIT.java
    │   │                                   ├── BeanParamIT.java
    │   │                                   ├── ContainerRequestContextIT.java
    │   │                                   ├── DependencyInjectionIT.java
    │   │                                   ├── ITBase.java
    │   │                                   ├── InterceptorIT.java
    │   │                                   ├── JsonBindingIT.java
    │   │                                   ├── JsonProcessingIT.java
    │   │                                   ├── ProducesIT.java
    │   │                                   ├── RestIT.java
    │   │                                   └── SseIT.java
    │   ├── json/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   └── java/
    │   │       │       └── temperature/
    │   │       │           ├── Temperature.java
    │   │       │           ├── TemperatureApplication.java
    │   │       │           └── TemperatureBean.java
    │   │       └── test/
    │   │           └── java/
    │   │               └── temperature/
    │   │                   └── TemperatureIT.java
    │   ├── no_servlet_class/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── cloud/
    │   │       │   │       └── piranha/
    │   │       │   │           └── test/
    │   │       │   │               └── coreprofile/
    │   │       │   │                   └── no_servlet_class/
    │   │       │   │                       ├── EchoApplication.java
    │   │       │   │                       └── EchoBean.java
    │   │       │   └── webapp/
    │   │       │       └── WEB-INF/
    │   │       │           └── web.xml
    │   │       └── test/
    │   │           └── java/
    │   │               └── cloud/
    │   │                   └── piranha/
    │   │                       └── test/
    │   │                           └── coreprofile/
    │   │                               └── no_servlet_class/
    │   │                                   └── EchoIT.java
    │   ├── pom.xml
    │   └── rest/
    │       ├── pom.xml
    │       └── src/
    │           ├── main/
    │           │   ├── java/
    │           │   │   └── cloud/
    │           │   │       └── piranha/
    │           │   │           └── test/
    │           │   │               └── coreprofile/
    │           │   │                   └── rest/
    │           │   │                       ├── RestApplication.java
    │           │   │                       └── RestBean.java
    │           │   └── webapp/
    │           │       └── WEB-INF/
    │           │           └── web.xml
    │           └── test/
    │               └── java/
    │                   └── cloud/
    │                       └── piranha/
    │                           └── test/
    │                               └── coreprofile/
    │                                   └── rest/
    │                                       └── RestIT.java
    ├── embedded/
    │   ├── classloader/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── main/
    │   │           ├── java/
    │   │           │   └── classloader/
    │   │           │       └── ClassLoaderServlet.java
    │   │           └── webapp/
    │   │               └── META-INF/
    │   │                   └── context.xml
    │   ├── classloader2/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── test/
    │   │           └── java/
    │   │               └── classloader/
    │   │                   └── ClassLoaderIT.java
    │   ├── eclipselink/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── eclipselink/
    │   │       │   │       ├── EclipseLinkBean.java
    │   │       │   │       └── EclipseLinkTable.java
    │   │       │   ├── resources/
    │   │       │   │   └── META-INF/
    │   │       │   │       └── persistence.xml
    │   │       │   └── webapp/
    │   │       │       ├── WEB-INF/
    │   │       │       │   ├── beans.xml
    │   │       │       │   ├── faces-config.xml
    │   │       │       │   └── web.xml
    │   │       │       └── index.xhtml
    │   │       └── test/
    │   │           └── java/
    │   │               └── eclipselink/
    │   │                   └── EclipseLinkTest.java
    │   ├── exousia/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── test/
    │   │           └── java/
    │   │               └── exousia/
    │   │                   ├── ExousiaTest.java
    │   │                   └── PublicServlet.java
    │   ├── hazelcast/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── hazelcast/
    │   │       │   │       └── HazelcastBean.java
    │   │       │   └── webapp/
    │   │       │       ├── WEB-INF/
    │   │       │       │   ├── beans.xml
    │   │       │       │   └── web.xml
    │   │       │       └── index.xhtml
    │   │       └── test/
    │   │           └── java/
    │   │               └── hazelcast/
    │   │                   └── HazelcastTest.java
    │   ├── helloworld/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── helloworld/
    │   │       │   │       ├── HelloWorldApplication.java
    │   │       │   │       └── HelloWorldServlet.java
    │   │       │   └── webapp/
    │   │       │       └── WEB-INF/
    │   │       │           └── web.xml
    │   │       └── test/
    │   │           └── java/
    │   │               └── helloworld/
    │   │                   └── HelloWorldTest.java
    │   ├── pom.xml
    │   ├── soteria-basic/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── test/
    │   │           ├── java/
    │   │           │   └── basic/
    │   │           │       ├── BasicTest.java
    │   │           │       ├── DynamicInitialContextFactory.java
    │   │           │       ├── ProtectedServlet.java
    │   │           │       ├── PublicServlet.java
    │   │           │       └── TestIdentityStore.java
    │   │           └── resources/
    │   │               └── META-INF/
    │   │                   └── beans.xml
    │   ├── soteria-form/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── test/
    │   │           ├── java/
    │   │           │   └── form/
    │   │           │       ├── DynamicInitialContextFactory.java
    │   │           │       ├── ErrorPageServlet.java
    │   │           │       ├── FormTest.java
    │   │           │       ├── LoginPageServlet.java
    │   │           │       ├── ProtectedServlet.java
    │   │           │       └── TestIdentityStore.java
    │   │           └── resources/
    │   │               └── META-INF/
    │   │                   └── beans.xml
    │   ├── springboot/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── main/
    │   │           ├── java/
    │   │           │   └── test1/
    │   │           │       ├── Test1Application.java
    │   │           │       └── Test1Controller.java
    │   │           └── resources/
    │   │               └── application.properties
    │   ├── springboot-virtualthreads/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── main/
    │   │           └── java/
    │   │               └── test/
    │   │                   └── custom/
    │   │                       └── http/
    │   │                           ├── Main.java
    │   │                           └── MyController.java
    │   ├── web-fragment-in-jar/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── main/
    │   │           └── resources/
    │   │               └── META-INF/
    │   │                   └── web-fragment.xml
    │   ├── web-fragment-in-jar-test/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── test/
    │   │           └── java/
    │   │               └── webfragmentinjar/
    │   │                   └── WebFragmentInJar1IT.java
    │   ├── web-fragment-in-jar-webapp/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── main/
    │   │           └── webapp/
    │   │               ├── META-INF/
    │   │               │   └── context.xml
    │   │               └── index.html
    │   └── weld/
    │       ├── pom.xml
    │       └── src/
    │           ├── main/
    │           │   ├── java/
    │           │   │   └── weld/
    │           │   │       └── WeldRequestBean.java
    │           │   └── webapp/
    │           │       ├── WEB-INF/
    │           │       │   ├── beans.xml
    │           │       │   ├── faces-config.xml
    │           │       │   └── web.xml
    │           │       └── index.xhtml
    │           └── test/
    │               └── java/
    │                   └── weld/
    │                       └── WeldTest.java
    ├── jpms/
    │   ├── pom.xml
    │   └── src/
    │       └── test/
    │           └── java/
    │               ├── jpms/
    │               │   └── ModuleFinderTest.java
    │               ├── package1/
    │               │   ├── Library.java
    │               │   ├── Service.java
    │               │   ├── Servlet.java
    │               │   └── Utils.java
    │               ├── package2/
    │               │   ├── Library.java
    │               │   └── Listener.java
    │               └── package3/
    │                   ├── DefaultService.java
    │                   ├── Filter.java
    │                   └── Library.java
    ├── micro/
    │   ├── helloworld/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── helloworld/
    │   │       │   │       └── HelloWorldServlet.java
    │   │       │   └── webapp/
    │   │       │       └── WEB-INF/
    │   │       │           └── web.xml
    │   │       └── test/
    │   │           └── java/
    │   │               └── helloworld/
    │   │                   └── HelloWorldServletIT.java
    │   ├── microprofile-config/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── config/
    │   │       │   │       ├── ConfigApplicationBean.java
    │   │       │   │       └── ConfigServlet.java
    │   │       │   └── resources/
    │   │       │       └── META-INF/
    │   │       │           └── microprofile-config.properties
    │   │       └── test/
    │   │           └── java/
    │   │               └── config/
    │   │                   └── ConfigTest.java
    │   ├── pom.xml
    │   ├── protected-servlet/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── protectedservlet/
    │   │       │   │       ├── ProtectedBean.java
    │   │       │   │       └── ProtectedServlet.java
    │   │       │   └── webapp/
    │   │       │       └── WEB-INF/
    │   │       │           ├── beans.xml
    │   │       │           └── web.xml
    │   │       └── test/
    │   │           └── java/
    │   │               └── protectedservlet/
    │   │                   └── ProtectedServletIT.java
    │   └── snoop/
    │       ├── pom.xml
    │       └── src/
    │           ├── main/
    │           │   ├── java/
    │           │   │   └── snoop/
    │           │   │       └── SnoopServlet.java
    │           │   └── webapp/
    │           │       └── WEB-INF/
    │           │           ├── beans.xml
    │           │           └── web.xml
    │           └── test/
    │               └── java/
    │                   └── snoop/
    │                       └── SnoopIT.java
    ├── pom.xml
    ├── server/
    │   ├── helloworld/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   └── webapp/
    │   │       │       └── helloworld.html
    │   │       └── test/
    │   │           └── java/
    │   │               └── helloworld/
    │   │                   └── HelloWorldIT.java
    │   ├── pom.xml
    │   ├── programmatic/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── programmatic/
    │   │       │   │       └── ProgrammaticServlet.java
    │   │       │   └── webapp/
    │   │       │       └── WEB-INF/
    │   │       │           └── web.xml
    │   │       └── test/
    │   │           └── java/
    │   │               └── programmatic/
    │   │                   └── ProgrammaticIT.java
    │   ├── wasp/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── wasp/
    │   │       │   │       └── HelloTldTag.java
    │   │       │   └── webapp/
    │   │       │       ├── WEB-INF/
    │   │       │       │   ├── tags/
    │   │       │       │   │   └── hellotag.tag
    │   │       │       │   ├── tld/
    │   │       │       │   │   ├── hellotag.tld
    │   │       │       │   │   └── hellotld.tld
    │   │       │       │   └── web.xml
    │   │       │       ├── hellotag.jsp
    │   │       │       ├── hellotag2.jsp
    │   │       │       ├── hellotld.jsp
    │   │       │       ├── hellotld2.jsp
    │   │       │       └── index.jsp
    │   │       └── test/
    │   │           └── java/
    │   │               └── wasp/
    │   │                   ├── HelloTagJspIT.java
    │   │                   ├── HelloTld2JspIT.java
    │   │                   ├── HelloTldJspIT.java
    │   │                   └── IndexJspIT.java
    │   └── wasp2/
    │       ├── pom.xml
    │       └── src/
    │           └── main/
    │               └── resources/
    │                   └── META-INF/
    │                       ├── hellotag2.tag
    │                       └── hellotag2.tld
    ├── servlet/
    │   ├── crac/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── cloud/
    │   │       │   │       └── piranha/
    │   │       │   │           └── test/
    │   │       │   │               └── servlet/
    │   │       │   │                   └── crac/
    │   │       │   │                       └── CracBean.java
    │   │       │   └── webapp/
    │   │       │       ├── WEB-INF/
    │   │       │       │   ├── beans.xml
    │   │       │       │   └── web.xml
    │   │       │       └── crac.xhtml
    │   │       └── test/
    │   │           └── java/
    │   │               └── cloud/
    │   │                   └── piranha/
    │   │                       └── test/
    │   │                           └── servlet/
    │   │                               └── crac/
    │   │                                   └── CracIT.java
    │   ├── hello/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── hello/
    │   │       │   │       └── HelloServlet.java
    │   │       │   └── webapp/
    │   │       │       ├── WEB-INF/
    │   │       │       │   └── web.xml
    │   │       │       ├── helloel.jsp
    │   │       │       ├── hellojsp.jsp
    │   │       │       └── helloworld.html
    │   │       └── test/
    │   │           └── java/
    │   │               └── hello/
    │   │                   └── HelloIT.java
    │   ├── helloworld/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   └── webapp/
    │   │       │       └── helloworld.html
    │   │       └── test/
    │   │           └── java/
    │   │               └── helloworld/
    │   │                   └── HelloWorldIT.java
    │   ├── integration/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   └── java/
    │   │       │       └── cloud/
    │   │       │           └── piranha/
    │   │       │               └── test/
    │   │       │                   └── servlet/
    │   │       │                       └── integration/
    │   │       │                           └── IntegrationServlet.java
    │   │       └── test/
    │   │           └── java/
    │   │               └── cloud/
    │   │                   └── piranha/
    │   │                       └── test/
    │   │                           └── servlet/
    │   │                               └── integration/
    │   │                                   └── IntegrationtIT.java
    │   ├── pages/
    │   │   ├── README.md
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   └── webapp/
    │   │       │       └── hello.jsp
    │   │       └── test/
    │   │           └── java/
    │   │               └── hello/
    │   │                   └── HelloIT.java
    │   ├── pom.xml
    │   └── websocket/
    │       ├── pom.xml
    │       └── src/
    │           └── main/
    │               └── java/
    │                   └── chat/
    │                       └── ChatEndpoint.java
    ├── tck/
    │   ├── coreprofile/
    │   │   ├── annotations/
    │   │   │   ├── installer/
    │   │   │   │   └── pom.xml
    │   │   │   ├── pom.xml
    │   │   │   └── runner/
    │   │   │       └── pom.xml
    │   │   ├── cdi/
    │   │   │   ├── installer/
    │   │   │   │   └── pom.xml
    │   │   │   ├── pom.xml
    │   │   │   └── runner/
    │   │   │       ├── core/
    │   │   │       │   ├── pom.xml
    │   │   │       │   └── src/
    │   │   │       │       └── test/
    │   │   │       │           ├── java/
    │   │   │       │           │   └── org/
    │   │   │       │           │       └── jboss/
    │   │   │       │           │           └── weld/
    │   │   │       │           │               └── tck/
    │   │   │       │           │                   └── piranha/
    │   │   │       │           │                       ├── PiranhaDeploymentExceptionTransformer.java
    │   │   │       │           │                       ├── PiranhaExtension.java
    │   │   │       │           │                       ├── WeldBeansImpl.java
    │   │   │       │           │                       ├── WeldContextImpl.java
    │   │   │       │           │                       └── WeldELImpl.java
    │   │   │       │           └── resources/
    │   │   │       │               ├── META-INF/
    │   │   │       │               │   ├── cdi-tck.properties
    │   │   │       │               │   └── services/
    │   │   │       │               │       └── org.jboss.arquillian.core.spi.LoadableExtension
    │   │   │       │               └── arquillian.xml
    │   │   │       ├── model/
    │   │   │       │   ├── pom.xml
    │   │   │       │   └── src/
    │   │   │       │       └── test/
    │   │   │       │           └── java/
    │   │   │       │               └── org/
    │   │   │       │                   └── glassfish/
    │   │   │       │                       └── tck/
    │   │   │       │                           └── cdi/
    │   │   │       │                               └── lang/
    │   │   │       │                                   └── model/
    │   │   │       │                                       ├── CDILangModelTCKRunner.java
    │   │   │       │                                       └── LangModelVerifierBuildCompatibleExtension.java
    │   │   │       ├── pom.xml
    │   │   │       └── signature/
    │   │   │           └── pom.xml
    │   │   ├── coreprofile/
    │   │   │   ├── installer/
    │   │   │   │   └── pom.xml
    │   │   │   ├── pom.xml
    │   │   │   └── runner/
    │   │   │       ├── pom.xml
    │   │   │       └── src/
    │   │   │           └── test/
    │   │   │               ├── java/
    │   │   │               │   └── cloud/
    │   │   │               │       └── piranha/
    │   │   │               │           └── tck/
    │   │   │               │               └── core/
    │   │   │               │                   └── CustomJsonbSerializationITFix.java
    │   │   │               └── resources/
    │   │   │                   ├── META-INF/
    │   │   │                   │   └── services/
    │   │   │                   │       └── org.jboss.arquillian.core.spi.LoadableExtension
    │   │   │                   └── arquillian.xml
    │   │   ├── inject/
    │   │   │   ├── installer/
    │   │   │   │   └── pom.xml
    │   │   │   ├── pom.xml
    │   │   │   └── runner/
    │   │   │       └── pom.xml
    │   │   ├── jsonb/
    │   │   │   ├── installer/
    │   │   │   │   └── pom.xml
    │   │   │   ├── pom.xml
    │   │   │   └── runner/
    │   │   │       └── pom.xml
    │   │   ├── jsonp/
    │   │   │   ├── installer/
    │   │   │   │   └── pom.xml
    │   │   │   ├── pom.xml
    │   │   │   └── runner/
    │   │   │       └── pom.xml
    │   │   ├── pom.xml
    │   │   └── rest/
    │   │       ├── installer/
    │   │       │   └── pom.xml
    │   │       ├── pom.xml
    │   │       └── runner/
    │   │           ├── pom.xml
    │   │           └── src/
    │   │               └── test/
    │   │                   └── resources/
    │   │                       └── arquillian.xml
    │   └── pom.xml
    └── webprofile/
        ├── helloworld/
        │   ├── pom.xml
        │   └── src/
        │       ├── main/
        │       │   ├── java/
        │       │   │   └── helloworld/
        │       │   │       └── ApplicationBean.java
        │       │   └── webapp/
        │       │       ├── WEB-INF/
        │       │       │   └── beans.xml
        │       │       ├── helloworld.jsp
        │       │       └── index.html
        │       └── test/
        │           └── java/
        │               └── helloworld/
        │                   └── HelloWorldIT.java
        ├── integration/
        │   ├── pom.xml
        │   └── src/
        │       ├── main/
        │       │   ├── java/
        │       │   │   └── integration/
        │       │   │       ├── DependencyInjectionBean.java
        │       │   │       ├── ExpressionBean.java
        │       │   │       ├── FacesBean.java
        │       │   │       ├── IntegrationApplication.java
        │       │   │       ├── IntegrationBean.java
        │       │   │       ├── IntegrationServlet.java
        │       │   │       ├── InterceptBean.java
        │       │   │       ├── InterceptInterceptor.java
        │       │   │       └── Jsonb.java
        │       │   └── webapp/
        │       │       ├── WEB-INF/
        │       │       │   ├── beans.xml
        │       │       │   └── web.xml
        │       │       ├── expression.jsp
        │       │       ├── faces.xhtml
        │       │       ├── jstl.jsp
        │       │       └── pages.jsp
        │       └── test/
        │           └── java/
        │               └── integration/
        │                   └── IntegrationIT.java
        └── pom.xml

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/FUNDING.yml
================================================
github: mnriem


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  # Enable version updates for Maven
  - package-ecosystem: "maven"
    directory: "/"
    schedule:
      interval: "weekly"
    open-pull-requests-limit: 10

  # Enable version updates for GitHub Actions
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"
    open-pull-requests-limit: 10


================================================
FILE: .github/workflows/current.yml
================================================
name: current
on: 
  push:
    branches:
      - 'current'
    tags-ignore:
      - 'v*'
  workflow_dispatch:
jobs:
  build:
    if: github.repository == 'piranhacloud/piranha'
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        java: [ 21 ]
        os: [ubuntu-latest, windows-latest]
    steps:
    - name: Checkout Sources
      uses: actions/checkout@v6
    - name: Setup Java ${{ matrix.java }}
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: ${{ matrix.java }}
    - name: Build with Maven
      run: mvn -B -ntp -T 1 install
  docs:
    if: github.repository == 'piranhacloud/piranha'
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Piranha
      uses: actions/checkout@v6
    - name: Checkout Piranha Website
      uses: actions/checkout@v6
      with:
        repository: piranhacloud/piranha-website
        token: ${{ secrets.GIT_PASSWORD }}
        path: piranha-website
        ref: 'gh-pages'
    - name: Setup Java
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: 21
    - name: Build with Maven
      run: |
        mvn -B -DskipTests=true -DskipITs=true -DstagingDirectory=$PWD/target/staging -ntp -P '!test' -T 1 clean install site site:stage
        rm -rf piranha-website/snapshot || true
        mkdir -p piranha-website/snapshot || true
        cp -R target/staging/* piranha-website/snapshot/
        cd piranha-website
        git config --global user.email "noreply@piranha.cloud"
        git config --global user.name "Automated publish"
        git add .
        git commit -a -m "Publishing SNAPSHOT documentation" || true
        git push
  ghcr:
    if: github.repository == 'piranhacloud/piranha'
    runs-on: ubuntu-latest
    steps:
    - name: Checkout sources
      uses: actions/checkout@v6
    - name: Setup Java
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: 21
    - name: Build with Maven
      run: mvn -B -Dmaven.javadoc.skip=true -DskipTests=true -DskipITs=true -ntp -P '!test' verify
    - name: Login to GHCR
      uses: docker/login-action@v3
      with:
        registry: ghcr.io
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}
    - name: Set up QEMU
      uses: docker/setup-qemu-action@v3
    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v3
      with:
        version: v0.10.0
    - run: docker buildx inspect
    - name: Build Docker images
      run: |
        mvn -B -Dmaven.javadoc.skip=true -DskipTests=true -DskipITs=true -ntp -P '!test' install
        cd docker
        mvn -B -DskipTests=true -DskipITs=true -ntp deploy
    - name: Build Piranha Isolated image
      run: |
        mvn -B -Dmaven.javadoc.skip=true -DskipTests=true -DskipITs=true -ntp -P '!test' install
        cd dist/isolated
        mvn -B -DskipTests=true -DskipITs=true -ntp -P docker deploy
    - name: Build Piranha Micro image
      run: |
        mvn -B -Dmaven.javadoc.skip=true -DskipTests=true -DskipITs=true -ntp -P '!test' install
        cd dist/micro
        mvn -B -DskipTests=true -DskipITs=true -ntp -P docker deploy
    - name: Build Piranha MicroProfile image
      run: |
        mvn -B -Dmaven.javadoc.skip=true -DskipTests=true -DskipITs=true -ntp -P '!test' install
        cd dist/microprofile
        mvn -B -DskipTests=true -DskipITs=true -ntp -P docker deploy
    - name: Build Piranha Platform image
      run: |
        mvn -B -Dmaven.javadoc.skip=true -DskipTests=true -DskipITs=true -ntp -P '!test' install
        cd dist/platform
        mvn -B -DskipTests=true -DskipITs=true -ntp -P docker deploy
    - name: Build Piranha Server image
      run: |
        mvn -B -Dmaven.javadoc.skip=true -DskipTests=true -DskipITs=true -ntp -P '!test' install
        cd dist/server
        mvn -B -DskipTests=true -DskipITs=true -ntp -P docker deploy
    - name: Build Piranha Servlet image
      run: |
        mvn -B -Dmaven.javadoc.skip=true -DskipTests=true -DskipITs=true -ntp -P '!test' install
        cd dist/servlet
        mvn -B -DskipTests=true -DskipITs=true -ntp -P docker deploy
    - name: Build Piranha Web Profile image
      run: |
        mvn -B -Dmaven.javadoc.skip=true -DskipTests=true -DskipITs=true -ntp -P '!test' install
        cd dist/webprofile
        mvn -B -DskipTests=true -DskipITs=true -ntp -P docker deploy
  sonatype:
    if: false # github.repository == 'piranhacloud/piranha'
    runs-on: ubuntu-latest
    steps:
    - name: Checkout sources
      uses: actions/checkout@v6
    - name: Setup Java
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: 21
        server-id: ossrh
        server-username: MAVEN_USERNAME
        server-password: MAVEN_PASSWORD
    - name: Build with Maven
      run: mvn -B -DskipTests=true -P '!test' -ntp deploy
      env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}


================================================
FILE: .github/workflows/docs.yml
================================================
name: docs
on: 
  workflow_dispatch:
    inputs:
      version:
        description: 'Release version'
        required: true
jobs:
  docs:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Piranha
      uses: actions/checkout@v6
      with:
        ref: v${{ github.event.inputs.version }}
    - name: Checkout Piranha Website
      uses: actions/checkout@v6
      with:
        repository: piranhacloud/piranha-website
        token: ${{ secrets.GIT_PASSWORD }}
        path: piranha-website
        ref: 'gh-pages'
    - name: Setup Java
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: 21
    - name: Build with Maven
      run: |
        mvn -B -DskipTests -DskipITs -DstagingDirectory=$PWD/target/staging -ntp -P '!test' -T 1 install site site:stage
        rm -rf piranha-website/release || true
        mkdir -p piranha-website/release || true
        cp -R target/staging/* piranha-website/release/
        cd piranha-website
        git config --global user.email "noreply@piranha.cloud"
        git config --global user.name "Automated publish"
        git add .
        git commit -a -m "Publishing ${{ github.event.inputs.version }} documentation" || true
        git push
        

================================================
FILE: .github/workflows/experimental.yml
================================================
name: experimental
on: 
  schedule:
    - cron: "0 0 * * 0"
  workflow_dispatch:
jobs:
  build:
    if: github.repository == 'piranhacloud/piranha'
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        distribution: [ 'temurin' ]
        java: [ '23', '24-ea', '25-ea' ]
        os: [ubuntu-latest, macos-latest, windows-latest]
    steps:
    - name: Checkout Sources
      uses: actions/checkout@v6
    - name: Setup Java ${{ matrix.java }}
      uses: actions/setup-java@v4
      with:
        distribution: ${{ matrix.distribution }}
        java-version: ${{ matrix.java }}
    - name: Build with Maven
      run: mvn -B -ntp -T 1 install
  result:
    if: ${{ always() }} && github.repository == 'piranhacloud/piranha'
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Check build results
        run: |
          result="${{ needs.build.result }}"
          if [[ $result == "success" || $result == "skipped" ]]; then
            echo "All matrix jobs were successful or skipped."
            exit 0
          else
            echo "One or more matrix jobs failed."
            exit 0
          fi


================================================
FILE: .github/workflows/pr.yml
================================================
name: pr
on: 
  pull_request:
    branches:
      - '*'
jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        java: [ 21 ]
        os: [ubuntu-latest, macos-latest, windows-latest]
    steps:
    - name: Checkout Sources
      uses: actions/checkout@v6
    - name: Setup Java ${{ matrix.java }}
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: ${{ matrix.java }}
    - name: Build with Maven
      run: mvn -B -ntp -T 1 install
    - name: Build Docker images
      if: matrix.os == 'ubuntu-latest'
      run: |
        cd docker
        mvn -B -ntp install
  codeql:
    name: codeql
    runs-on: ubuntu-latest
    permissions:
      actions: read
      contents: read
      security-events: write
    steps:
    - name: Checkout sources
      uses: actions/checkout@v6
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v3
      with:
        languages: 'java'
    - name: Setup Java
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: '21'
    - name: Build with Maven
      run: mvn -B -DskipTests=true -DskipITs=true -ntp install
    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v3
  docs:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Piranha
      uses: actions/checkout@v6
    - name: Setup Java
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: 21
    - name: Build with Maven
      run: |
        mvn -B -DskipTests=true -DskipITs=true -ntp -T 1 install site


================================================
FILE: .github/workflows/release.yml
================================================
name: release
on:
  push:
    tags:        
      - v*
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout sources
      uses: actions/checkout@v6
    - name: Setup Java
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: 21
        server-id: ossrh
        server-username: MAVEN_USERNAME
        server-password: MAVEN_PASSWORD
        gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
        gpg-passphrase: MAVEN_GPG_PASSPHRASE
    - name: Build with Maven
      run: mvn --no-transfer-progress -B -DskipTests=true install
    - name: Login to GHCR
      uses: docker/login-action@v3
      with:
        registry: ghcr.io
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}
    - name: Set up QEMU
      uses: docker/setup-qemu-action@v3
    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v3
      with:
        version: v0.10.0
    - run: docker buildx inspect
#    - run: docker buildx inspect
#    - name: Build Docker images
#      run: |
#        mvn -B -Dmaven.javadoc.skip=true -DskipTests=true -DskipITs=true -ntp -P '!test' install
#        cd docker
#        mvn -B -DskipTests=true -DskipITs=true -ntp -P docker docker:deploy
    - name: Build Piranha Micro image
      run: |
        mvn -B -Dmaven.javadoc.skip=true -DskipTests=true -DskipITs=true -ntp -P '!test' install
        cd dist/micro
        mvn -B -DskipTests=true -DskipITs=true -ntp -P docker deploy
    - name: Build Piranha Micro Profile image
      run: |
        mvn -B -Dmaven.javadoc.skip=true -DskipTests=true -DskipITs=true -ntp -P '!test' install
        cd dist/microprofile
        mvn -B -DskipTests=true -DskipITs=true -ntp -P docker deploy
    - name: Build Piranha Platform image
      run: |
        mvn -B -Dmaven.javadoc.skip=true -DskipTests=true -DskipITs=true -ntp -P '!test' install
        cd dist/platform
        mvn -B -DskipTests=true -DskipITs=true -ntp -P docker deploy
    - name: Build Piranha Server image
      run: |
        mvn -B -Dmaven.javadoc.skip=true -DskipTests=true -DskipITs=true -ntp -P '!test' install
        cd dist/server
        mvn -B -DskipTests=true -DskipITs=true -ntp -P docker deploy
    - name: Build Piranha Servlet image
      run: |
        mvn -B -Dmaven.javadoc.skip=true -DskipTests=true -DskipITs=true -ntp -P '!test' install
        cd dist/servlet
        mvn -B -DskipTests=true -DskipITs=true -ntp -P docker deploy
    - name: Build Piranha Web Profile image
      run: |
        mvn -B -Dmaven.javadoc.skip=true -DskipTests=true -DskipITs=true -ntp -P '!test' install
        cd dist/webprofile
        mvn -B -DskipTests=true -DskipITs=true -ntp -P docker deploy
    - name: Build with Maven
      run: |
        export MAVEN_OPTS='--add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.desktop/java.awt.font=ALL-UNNAMED'
        mvn -B -DstagingProgressTimeoutMinutes=10 -DskipTests=true -P 'release,!test' -ntp clean deploy
      env:
        MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
        MAVEN_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
        MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}


================================================
FILE: .github/workflows/stale.yml
================================================
name: stale
on:
  schedule:
  - cron: "0 0 * * *"
  workflow_dispatch:
jobs:
  stale:
    if: github.repository == 'piranhacloud/piranha'
    runs-on: ubuntu-latest
    steps:
    - uses: actions/stale@v10
      with:
        repo-token: ${{ secrets.GITHUB_TOKEN }}
        stale-issue-message: 'This issue is stale because it has been open 170 days with no activity. Remove stale label or comment or this will be closed in 10 days'
        stale-pr-message: 'This PR is stale because it has been open 170 days with no activity. Remove stale label or comment or this will be closed in 10 days'
        days-before-stale: 170
        days-before-close: 10


================================================
FILE: .github/workflows/tck-coreprofile.yml
================================================
name: tck-coreprofile
on: 
  schedule:
  - cron: "0 0 * * *"
  workflow_dispatch:
    inputs:
      branch:
        description: 'Branch / Tag'
        required: true
        default: 'current'

jobs:
  annotations:
    if: github.repository == 'piranhacloud/piranha'
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        java: [ '21' ]
        os: [ubuntu-latest]
    steps:
    - name: Checkout Sources
      uses: actions/checkout@v6
    - name: Set up Java ${{ matrix.java }}
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: ${{ matrix.java }}
    - name: Run Annotations TCK
      run: |
        mvn -B -DskipTests=true -DskipITs=true -ntp install
        cd test/tck/coreprofile/annotations
        mvn -B -fae -ntp install
    - name: Annotation TCK Test Summary
      uses: test-summary/action@v2
      with:
        paths: "test/tck/coreprofile/annotations/runner/target/failsafe-reports/*IT.xml"
      if: always()
  cdi:
    if: github.repository == 'piranhacloud/piranha'
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        java: [ '21' ]
        os: [ubuntu-latest]
    steps:
    - name: Checkout Sources
      uses: actions/checkout@v6
    - name: Set up Java ${{ matrix.java }}
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: ${{ matrix.java }}
    - name: Run TCK
      run: |
        mvn -B -DskipTests=true -DskipITs=true -ntp install
        cd test/tck/coreprofile/cdi
        mvn -B -fae -ntp install
    - name: Test Summary
      uses: test-summary/action@v2
      with:
        paths: |
          cdi/runner/core/target/surefire-reports/junitreports/TEST-*.xml
          cdi/runner/model/target/surefire-reports/TEST-*.xml
      if: always()
  coreprofile:
    if: github.repository == 'piranhacloud/piranha'
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        java: [ '21' ]
        os: [ubuntu-latest]
    steps:
    - name: Checkout Sources
      uses: actions/checkout@v6
    - name: Set up Java ${{ matrix.java }}
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: ${{ matrix.java }}
    - name: Run TCK
      run: |
        mvn -B -DskipTests=true -DskipITs=true -ntp install
        cd test/tck/coreprofile/coreprofile
        mvn -B -fae -ntp install
    - name: Test Summary
      uses: test-summary/action@v2
      with:
        paths: "test/tck/coreprofile/coreprofile/runner/target/failsafe-reports/**/TEST-*.xml"
      if: always()
  inject:
    if: github.repository == 'piranhacloud/piranha'
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        java: [ '21' ]
        os: [ubuntu-latest]
    steps:
    - name: Checkout Sources
      uses: actions/checkout@v6
    - name: Set up Java ${{ matrix.java }}
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: ${{ matrix.java }}
    - name: Run Inject TCK
      run: |
        mvn -B -DskipTests=true -DskipITs=true -ntp install
        cd test/tck/coreprofile/inject
        mvn -B -fae -ntp install
    - name: Test Summary
      uses: test-summary/action@v2
      with:
        paths: "test/tck/coreprofile/inject/installer/target/tck/example/target/surefire-reports/TEST-*.xml"
      if: always()      
  jsonb:
    if: github.repository == 'piranhacloud/piranha'
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        java: [ '21' ]
        os: [ubuntu-latest]
    steps:
    - name: Checkout Sources
      uses: actions/checkout@v6
    - name: Set up Java ${{ matrix.java }}
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: ${{ matrix.java }}
    - name: Run JSON Binding TCK
      run: |
        mvn -B -DskipTests=true -DskipITs=true -ntp install
        cd test/tck/coreprofile/jsonb
        mvn -B -fae -ntp install
    - name: Test Summary
      uses: test-summary/action@v2
      with:
        paths: "test/tck/coreprofile/jsonb/installer/target/tck/bin/target/surefire-reports/TEST-*.xml"
      if: always()
  jsonp:
    if: github.repository == 'piranhacloud/piranha'
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        java: [ '21' ]
        os: [ubuntu-latest]
    steps:
    - name: Checkout Sources
      uses: actions/checkout@v6
    - name: Set up Java ${{ matrix.java }}
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: ${{ matrix.java }}
    - name: Run TCK
      run: |
        mvn -B -DskipTests=true -DskipITs=true -ntp install
        cd test/tck/coreprofile/jsonp
        mvn -B -fae -ntp install
    - name: Test Summary
      uses: test-summary/action@v2
      with:
        paths: |
          test/tck/coreprofile/jsonp/installer/target/tck/bin/tck-tests/target/surefire-reports/TEST-*.xml
          test/tck/coreprofile/jsonp/installer/target/tck/bin/tck-tests-pluggability/target/surefire-reports/TEST-*.xml
      if: always()
  rest:
    if: github.repository == 'piranhacloud/piranha'
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        java: [ '21' ]
        os: [ubuntu-latest]
    steps:
    - name: Checkout Sources
      uses: actions/checkout@v6
    - name: Set up Java ${{ matrix.java }}
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: ${{ matrix.java }}
    - name: Run TCK
      run: |
        mvn -B -DskipTests=true -DskipITs=true -ntp install
        cd test/tck/coreprofile/rest
        mvn -B -fae -ntp install
    - name: Test Summary
      uses: test-summary/action@v2
      id: test_summary
      with:
        paths: "test/tck/coreprofile/rest/runner/target/failsafe-reports/**/TEST-*.xml"
        output: test-summary.md
      if: always()
    - name: Job Summary
      run: |
        echo "${{ steps.test_summary.outputs.passed }} out of ${{ steps.test_summary.outputs.total }} tests passed" >> $GITHUB_STEP_SUMMARY
      if: always()
  result:
    if: github.repository == 'piranhacloud/piranha'
    runs-on: ubuntu-latest
    needs: [annotations, cdi, coreprofile, inject, jsonb, jsonp, rest]
    steps:
      - name: Check build results
        run: |
          result="${{ needs.build.result }}"
          if [[ $result == "success" || $result == "skipped" ]]; then
            echo "All TCK jobs were successful or skipped."
            exit 0
          else
            echo "One or more TCK jobs failed."
            exit 0
          fi


================================================
FILE: .github/workflows/trigger.yml
================================================
name: trigger
on: 
  workflow_dispatch:
    inputs:
      branch:
        description: 'Branch to release from'
        required: true
        default: 'current'
      version:
        description: 'Release version'
        required: true
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout sources
      uses: actions/checkout@v6
      with:
        token: ${{ secrets.GIT_PASSWORD }}
    - name: Release from given branch with given version
      run: |
        git fetch --no-tags --prune --depth=1 origin +refs/heads/*:refs/remotes/origin/*
        BRANCH=${{ github.event.inputs.branch }}
        TAG=${GITHUB_REF}
        VERSION=${{ github.event.inputs.version }}
        echo "Releasing $VERSION from $BRANCH branch"
        git checkout $BRANCH
        git checkout -b release
        mvn -B versions:set versions:commit -DnewVersion=$VERSION
        git config --global user.email "noreply@piranha.cloud"
        git config --global user.name "Automated release"
        git commit -a -m "Releasing version $VERSION from $BRANCH branch"
        git tag v$VERSION -f
        git push origin v$VERSION -f
        git checkout $BRANCH
        git branch -D release


================================================
FILE: .gitignore
================================================
.classpath
.factorypath
.DS_Store
.project
.settings/
.vscode
dependency-reduced-pom.xml
nb-configuration.xml
nbactions.xml
nbproject/
target/
.idea
*.iml
*.original~
dist/server/tmp/
dist/platform/tmp/
.flattened-pom.xml
bin/
piranha.pid


================================================
FILE: CODE_CONVENTIONS.md
================================================
Eclipse/Sun code conventions with
* Spaces only
* Indentation size 4 spaces
* Maximum line width 160
* Maximum width for comments 120
* No indent of Javadoc tags
* No newline after @param tags

## Javadoc

### Parameters

```
@param a The first parameter. For an optimum result, this should be an odd
number between 0 and 100.
```

## Variable naming style

Based on the advice from Uncle Bob's Clean Code, specifically:

* No cryptic abbreviations like c, ta, rx, ct, except for the well-established i and j in loops
* No variable names like ret, rvalue, result etc for variables that are returned from methods. Instead, they should be named after what they actually return.

For example:

Bad:

```java
public Permissions getCallerPermission(....) {
    Permissions rvalue;
    // ton of code

    return rvalue;
}
```

Good:

```java
public Permissions getCallerPermissions(....) {
    Permissions callerPermissions;
    // ton of code

    return callerPermissions;
}
```

* No Hungarian variations for collections like usrLst, usArray, arrUsers, UserCol, etc, and no such variation for elements of the collection like el, elm, usrEl, userElem, currentUsr, curUser, userCr, etc. Omit the Hungarian and use the element type name directly and the plural of that for the collection.  

For example:

Bad:

```java
for (User curUsr : colUser) {
     ...
}
```

Good:

```java
for (User user : users) {
     ...
}
```

## Conditional blocks

### Handle the short and fast error case for method parameters early instead of the happy path. 

For example:

Bad:

```java
public void foo(Bar bar) {
    if (bar != null) {
        // lots of code here
    } else {
        throw new IllegalStateException("Bar should not be null");
    }
}
```

Good:

```java
public void foo(Bar bar) {
    if (bar == null) {
        throw new IllegalStateException("Bar should not be null");
    }

    // lots of code here
}
```

### if/else blocks that return don't need to be if/else blocks. 

For example:

Bad:

```java
if (foo == something) {
   return somethingFoo;
} else if (foo == somethingElse) {
   return somethingElseFoo;
}
```
   
Good:

```java
if (foo == something) {
   return somethingFoo;
}

if (foo == somethingElse) {
   return somethingElseFoo;
}
```


## Defaults

### Omit initialisation of instance variables to their default values. 

For example:

Bad:

```java
public class SomeClass {
    private int someNumber = 0;
    private Foo someFoo = null;
    private boolean isFoo = false;
}
```

Good:

```java
public class SomeClass {
    private int someNumber;
    private Foo someFoo;
    private boolean isFoo;
}
```

### Omit using the public modifier for interface methods.

For example:

Bad:

```java
public interface MyInterface {
    public void MyMethod();
}
```

Good:

```java
public interface MyInterface {
    void MyMethod();
}
```

### Omit unnecessary final modifiers on local and method parameters

Bad:

```java
public void foo(final Bar bar) {
    // lots of code here 
}
```

Good:

```java
public void foo(Bar bar) {
    // lots of code here
}
```

### Omit unnecessary usage of `this`

Bad:

```java
public Foo getFoo() {
    return this.foo;
}
```

Good:

```java
public Foo getFoo() {
    return foo;
}
```

### Omit unnecessary braces. 

For example:

Bad

```java
return (1);
```

Good

```java
return 1;
```


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing

How can I contribute to Piranha? Well it all depends on the level of 
involvement you are aiming for. The following comes to mind:

1. Write blog entries with example applications
2. File issues for bugs you encounter.
3. Answer questions that people file at the issue tracker.
4. Fork the repository and issue pull requests.

Which ever level you pick we welcome you!

## Important notice

Note if you file issues, answer questions and/or issue pull requests you agree
that those contributions will be owned by Manorrock.com and that Manorrock.com 
can use those contributions in any manner Manorrock.com so desires.

## Building and testing Piranha locally

### Building Piranha and running the tests

```
mvn clean install
```

If you do not want the tests to run use:

```
mvn -DskipTests clean install 
```

### Running a singular test

To run a singular test pass in `-Dtest=expression`, see the `surefire` plugin
documentation for more information.

### Running our more complex tests

Our more complex tests are in the `test` profile which we do not release as part
of a release because these modules only test functionality.

You can run our more complex tests using:

```
mvn -P test clean install
```

### Run the external tests (including TCKs)

To run all the external tests use:

```
mvn -P external clean install
```

Or go into the directory of the external test you want to run and use:

```
mvn clean install
```

For the Servlet TCK if you want to run a singular test use 
`-Drun.test=expression`. See the example below.

```
mvn -Drun.test=com/sun/ts/tests/servlet/spec/errorpage/URLClient.java#servletToDifferentErrorPagesTest verify
```

## Problems

Support for Java modules has a feature gap in Eclipse and as such a workaround
needs to be employed to make it work properly (June 2021).


================================================
FILE: LICENSE
================================================

   Copyright (c) 2002-2021 Manorrock.com. All Rights Reserved.

   Redistribution and use in source and binary forms, with or without 
   modification, are permitted provided that the following conditions are met:

     1. Redistributions of source code must retain the above copyright notice, 
        this list of conditions and the following disclaimer.
     2. Redistributions in binary form must reproduce the above copyright
        notice, this list of conditions and the following disclaimer in the
        documentation and/or other materials provided with the distribution.
     3. Neither the name of the copyright holder nor the names of its 
        contributors may be used to endorse or promote products derived from
        this software without specific prior written permission.

   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 
   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   POSSIBILITY OF SUCH DAMAGE.


================================================
FILE: README.md
================================================
![#piranhacloud](piranha_cloud.svg)

# Piranha Project

![build status](https://github.com/piranhacloud/piranha/workflows/build/badge.svg)

The Piranha Project delivers you with Cloud ready containers and useful add-on / 
integration modules.

## Quickstart

Download a JAR based distribution from <a href="https://repo1.maven.org/maven2/cloud/piranha/dist/">Maven Central</a>.

And run your web application using:

```
java -jar piranha-dist-XXX.jar --war-file your-webapplication.war
```

## Getting Started

To get started with Piranha please go 
[here](https://piranha.cloud/release/index.html).

## How do I contribute?

See [Contributing](CONTRIBUTING.md)

## Our code of Conduct

See [Code of Conduct](CODE_OF_CONDUCT.md)

## Important notice

Note if you file issues or answer questions on the issue tracker and/or issue 
pull requests you agree that those contributions will be owned by Manorrock.com
and that Manorrock.com can use those contributions in any manner Manorrock.com
so desires.


================================================
FILE: RELEASE.md
================================================
# Release process

The release process described below uses the 'current' branch. For patch 
releases see the [Patch releases](#patch-releases) section below

## On the 11th of the month

1. Create release-X.Y.Z branch from current
1. Trigger the current workflow against the release-X.Y.Z branch
1. Wait for the build on the release-X.Y.Z branch to complete
1. If the build was not successful
    1. Checkout the release-X.Y.Z branch
    1. Apply whatever fixes are needed
    1. Commit and push them to release-X.Y.Z branch
    1. Redo steps #2 and #3
1. On the current branch update the POMs to point to the next SNAPSHOT version

## On the 13th of the month

1. Trigger release using release-X.Y.Z as branch to release from
1. If release build fails
    1. Remove the vX.Y.Z tag
    1. Checkout the release-X.Y.Z branch
    1. Apply whatever fixes are needed
    1. Commit and push them to release-X.Y.Z
    1. Retrigger the release
1. Trigger release docs workflow
1. Create release notes
1. Set correct tag for release notes
1. Make sure “Create a discussion for this release” is checked
1. Make sure Category is set to General 
1. Publish release notes
1. Wait for release bits to show up on Maven Central
1. On the piranha_cloud Twitter announce that Piranha X.Y.Z has been released and make sure to thank our contributors.
1. Apply fixes from release-X.Y.Z branch to the current branch with a corresponding issue (if any).
1. Delete the release-X.Y.Z branch
1. Close the milestone on GitHub

## Patch releases

If you are creating a patch release against a branch please follow all the
steps above skipping the release docs workflow and replace current with
the branch you are patching against where appropriate (without waiting a 
day in between).


================================================
FILE: SECURITY.md
================================================
# Security Policy

## Reporting a Vulnerability

Please email info@piranha.cloud describing the issue
(preferably with a reproducer and/or a fix)


================================================
FILE: arquillian/managed/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>

<project
    xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cloud.piranha.arquillian</groupId>
        <artifactId>project</artifactId>
        <version>25.4.0-SNAPSHOT</version>
    </parent>
    <artifactId>piranha-arquillian-managed</artifactId>
    <packaging>jar</packaging>
    <name>Piranha - Arquillian - Managed</name>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <useModulePath>false</useModulePath>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>me.alexpanov</groupId>
            <artifactId>free-port-finder</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian.container</groupId>
            <artifactId>arquillian-container-spi</artifactId>
            <scope>compile</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.jboss.shrinkwrap.descriptors</groupId>
                    <artifactId>shrinkwrap-descriptors-api-base</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian.container</groupId>
            <artifactId>arquillian-container-test-spi</artifactId>
            <scope>compile</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.jboss.shrinkwrap.descriptors</groupId>
                    <artifactId>shrinkwrap-descriptors-api-base</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian.protocol</groupId>
            <artifactId>arquillian-protocol-servlet-jakarta</artifactId>
            <scope>compile</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.jboss.shrinkwrap.descriptors</groupId>
                    <artifactId>shrinkwrap-descriptors-api-base</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian.testenricher</groupId>
            <artifactId>arquillian-testenricher-cdi-jakarta</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian.testenricher</groupId>
            <artifactId>arquillian-testenricher-ejb-jakarta</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian.testenricher</groupId>
            <artifactId>arquillian-testenricher-initialcontext</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian.testenricher</groupId>
            <artifactId>arquillian-testenricher-resource-jakarta</artifactId>
            <scope>compile</scope>
        </dependency>
        <!-- test -->
        <dependency>
            <groupId>org.jboss.shrinkwrap</groupId>
            <artifactId>shrinkwrap-impl-base</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.shrinkwrap.descriptors</groupId>
            <artifactId>shrinkwrap-descriptors-api-base</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>        
    </dependencies>
    <distributionManagement>
        <site>
            <id>default</id>
            <url>file:///tmp/piranha/arquillian/managed/</url>
        </site>
    </distributionManagement>   
</project>


================================================
FILE: arquillian/managed/src/main/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainer.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.arquillian.managed;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
import org.jboss.arquillian.container.spi.client.container.DeploymentException;
import org.jboss.arquillian.container.spi.client.protocol.ProtocolDescription;
import org.jboss.arquillian.container.spi.client.protocol.metadata.HTTPContext;
import org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData;
import org.jboss.arquillian.container.spi.client.protocol.metadata.Servlet;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.exporter.ZipExporter;

import static java.lang.System.Logger.Level.INFO;
import static java.lang.System.Logger.Level.WARNING;
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;

/**
 * The Managed Piranha container.
 *
 * @author Manfred Riem (mriem@manorrock.com)
 */
public class ManagedPiranhaContainer implements DeployableContainer<ManagedPiranhaContainerConfiguration> {

    /**
     * Stores the logger.
     */
    private static final System.Logger LOGGER = System.getLogger(ManagedPiranhaContainer.class.getName());

    /**
     * Stores the PID filename.
     */
    private static final String PID_FILENAME = "tmp/piranha.pid";

    /**
     * Stores the java.io.tmpdir constant.
     */
    private static final String TMP_DIR = "java.io.tmpdir";

    /**
     * Stores the 'Unable to create directories' message.
     */
    private static final String UNABLE_TO_CREATE_DIRECTORIES = "Unable to create directories";

    /**
     * Stores the configuration.
     */
    private ManagedPiranhaContainerConfiguration configuration;

    /**
     * Stores the local repository directory.
     */
    private File localRepositoryDir = new File(System.getProperty("user.home"), ".m2/repository");

    /**
     * Stores the Piranha process.
     */
    private Process process;

    /**
     * Default constructor.
     */
    public ManagedPiranhaContainer() {
    }

    @Override
    public Class<ManagedPiranhaContainerConfiguration> getConfigurationClass() {
        return ManagedPiranhaContainerConfiguration.class;
    }

    @Override
    public void setup(ManagedPiranhaContainerConfiguration configuration) {
        this.configuration = configuration;
    }

    @SuppressWarnings("exports")
    @Override
    public ProtocolDescription getDefaultProtocol() {
        return new ProtocolDescription(configuration.getProtocol());
    }

    @SuppressWarnings("exports")
    @Override
    public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException {
        LOGGER.log(INFO, "Deploying " + archive.getName());

        ProtocolMetaData metadata = new ProtocolMetaData();

        try {
            /*
             * Export the Archive into a WAR file.
             */
            String warFileName = toWarFilename(archive);

            File runtimeDirectory = new File(System.getProperty(TMP_DIR), toAppName(warFileName));
            runtimeDirectory.mkdirs();

            File warFile = new File(runtimeDirectory, warFileName);

            archive.as(ZipExporter.class).exportTo(warFile, true);

            /*
             * Copy runtime JAR into the runtime diectory.
             */
            String version = determineVersionToUse();
            File piranhaJarFile = getPiranhaJarFile(version);
            copyPiranhaJarFile(runtimeDirectory, piranhaJarFile);

            /*
             * Start Piranha.
             */
            startPiranha(runtimeDirectory, warFile);
        } catch (IOException ioe) {
            ioe.printStackTrace();
            return null;
        }

        HTTPContext httpContext = new HTTPContext("localhost", configuration.getHttpPort());
        httpContext.add(new Servlet(
                "ArquillianServletRunnerEE9",
                archive.getName().substring(0, archive.getName().lastIndexOf("."))));
        metadata.addContext(httpContext);
        return metadata;
    }

    @Override
    public void undeploy(Archive<?> archive) throws DeploymentException {
        LOGGER.log(INFO, "Undeploying " + archive.getName());

        /*
         * Delete the PID file.
         */
        File runtimeDirectory = new File(System.getProperty(TMP_DIR), toAppName(archive));
        File pidFile = new File(runtimeDirectory, PID_FILENAME);
        if (pidFile.exists()) {
            try {
                Files.delete(pidFile.toPath());
            } catch (IOException ioe) {
                LOGGER.log(WARNING, "Error deleting PID file", ioe);
            }
        }

        /*
         * Wait for 5 minutes at the most.
         */
        if (process != null && process.isAlive()) {
            try {
                LOGGER.log(INFO, "Waiting for Piranha to be shutdown");

                long startTime = System.currentTimeMillis();
                process.waitFor(30, TimeUnit.SECONDS);
                Long finishTime = System.currentTimeMillis();

                LOGGER.log(INFO, "Piranha has shutdown\n It took {0} milliseconds", finishTime - startTime);
            } catch (InterruptedException ie) {
                LOGGER.log(WARNING, "Piranha did not shutdown within time alloted");
                LOGGER.log(WARNING, "Destroying Piranha process forcibly");
                process.destroyForcibly();
            }
        }

        /*
         * Delete the WAR file.
         */
        File warFile = new File(runtimeDirectory, toWarFilename(archive));
        warFile.delete();
    }

    /**
     * Creates a WAR filename for the archive.
     *
     * @param archive the archive.
     * @return the WAR filename.
     */
    private String toWarFilename(Archive<?> archive) {
        String warFilename = archive.getName();

        if (isEmpty(archive.getName())) {
            warFilename = "ROOT.war";
        }

        return warFilename;
    }

    private String toAppName(String warFileName) {
        return warFileName.substring(0, warFileName.lastIndexOf("."));
    }

    private String toAppName(Archive<?> archive) {
        return toAppName(toWarFilename(archive));
    }

    /**
     * Get the Piranha JAR file.
     *
     * @param version the version.
     * @return the zip file.
     * @throws IOException when an I/O error occurs.
     */
    private File getPiranhaJarFile(String version) throws IOException {
        URL downloadUrl = createMavenCentralArtifactUrl(
                "cloud.piranha.dist",
                "piranha-dist-" + configuration.getDistribution(),
                version,
                "jar"
        );

        String artifactPath = createArtifactPath(
                "cloud.piranha.dist",
                "piranha-dist-" + configuration.getDistribution(),
                version,
                "jar"
        );

        File zipFile = new File(localRepositoryDir, artifactPath);
        if (!zipFile.exists() && !zipFile.getParentFile().mkdirs()) {
            LOGGER.log(WARNING, UNABLE_TO_CREATE_DIRECTORIES);
        }

        try (InputStream inputStream = downloadUrl.openStream()) {
            Files.copy(inputStream,
                    zipFile.toPath(),
                    REPLACE_EXISTING);
        } catch (IOException fnfe) {
            LOGGER.log(WARNING, "Could not download JAR file, defaulting back to local Maven repository");
        }

        return new File(localRepositoryDir, artifactPath);
    }

    /**
     * Create artifact path.
     *
     * @param groupId the groupId.
     * @param artifactId the artifactId.
     * @param version the version
     * @param type the type.
     */
    private String createArtifactPath(String groupId, String artifactId, String version, String type) {
        String artifactPathFormat = "%s/%s/%s/%s-%s.%s";
        return String.format(artifactPathFormat,
                convertGroupIdToPath(groupId),
                artifactId,
                version,
                artifactId,
                version,
                type.toLowerCase());
    }

    /**
     * Convert the groupId to path.
     *
     * @param groupId the groupId.
     * @return the path.
     */
    private String convertGroupIdToPath(String groupId) {
        return groupId.replace('.', '/');
    }

    /**
     * Create the Maven central artifact URL
     *
     * @param groupId the groupId.
     * @param artifactId the artifactId.
     * @param version the version
     * @param type the type.
     * @return the URL.
     * @throws IOException when an I/O error occurs.
     */
    @SuppressWarnings("deprecation")
    private URL createMavenCentralArtifactUrl(String groupId, String artifactId, String version, String type) throws IOException {
        return new URL("https://repo1.maven.org/maven2/" + createArtifactPath(groupId, artifactId, version, type));
    }

    /**
     * Determine what version of Piranha to use.
     *
     * @return the version.
     */
    private String determineVersionToUse() {
        return getClass().getPackage().getImplementationVersion();
    }

    /**
     * Kill any process currently listening on the given port.
     *
     * @param port the port to free up.
     */
    private void killProcessOnPort(int port) {
        try {
            ProcessBuilder finder = new ProcessBuilder(
                    "sh", "-c",
                    "lsof -ti tcp:" + port + " -sTCP:LISTEN");
            finder.redirectErrorStream(true);
            Process findProcess = finder.start();
            String pids = new String(findProcess.getInputStream().readAllBytes()).trim();
            findProcess.waitFor(5, TimeUnit.SECONDS);
            if (!pids.isEmpty()) {
                for (String pid : pids.split("\\s+")) {
                    if (!pid.isEmpty()) {
                        LOGGER.log(WARNING, "Port {0} is still in use by PID {1}, killing it", port, pid);
                        new ProcessBuilder("kill", "-9", pid)
                                .start()
                                .waitFor(5, TimeUnit.SECONDS);
                    }
                }
                // Brief pause so the OS releases the port
                Thread.sleep(200);
            }
        } catch (IOException | InterruptedException e) {
            LOGGER.log(WARNING, "Could not clean up port {0}: {1}", port, e.getMessage());
        }
    }

    /**
     * Start Piranha.
     *
     * @param runtimeDirectory the runtime directory.
     * @param warFile the WAR filename.
     */
    private void startPiranha(File runtimeDirectory, File warFile) throws IOException, DeploymentException {
        killProcessOnPort(configuration.getHttpPort());
        File stalePidFile = new File(runtimeDirectory, PID_FILENAME);
        if (stalePidFile.exists()) {
            try {
                Files.delete(stalePidFile.toPath());
            } catch (IOException ioe) {
                LOGGER.log(WARNING, "Could not delete stale PID file: {0}", ioe.getMessage());
            }
        }
        List<String> commands = new ArrayList<>();
        StringBuilder classpath = new StringBuilder();
        commands.add("java");
        String[] jvmArgs = configuration.getJvmArguments().split("\\s+");
        if (jvmArgs.length > 0) {
            for(int i=0; i<jvmArgs.length; i++) {
                if (jvmArgs[i] != null && !jvmArgs[i].trim().equals("")) {
                    commands.add(jvmArgs[i]);
                }
                if (jvmArgs[i] != null && jvmArgs[i].trim().equals("-cp")) {
                    // ignore this one.
                }
                if (i > 0 && jvmArgs[i] != null && jvmArgs[i-1].trim().equals("-cp")) {
                    classpath.append(jvmArgs[i].trim()).append(File.pathSeparatorChar);
                }
            }
        }

        if (!configuration.getCallerName().isEmpty()) {
            commands.add("-Dio.piranha.identitystore.callers=<callers><caller callername=\""
                    + configuration.getCallerName() + "\" password=\""
                    + configuration.getCallerPassword() + "\" groups=\""
                    + configuration.getCallerGroups() + "\"/></callers>");
        }

        if (configuration.isDebug()) {
            commands.add("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=localhost:9009");
        }

        if (configuration.isSuspend()) {
            commands.add("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=localhost:9009");
        }

        if (classpath.isEmpty()) {
            commands.add("-jar");
            commands.add("piranha-" + configuration.getDistribution() + ".jar");
        } else {
            commands.add("-cp");
            commands.add(classpath.toString() + "piranha-" + configuration.getDistribution() + ".jar");
            if (configuration.getDistribution().equals("coreprofile")) {
                commands.add("cloud.piranha.dist.coreprofile.CoreProfilePiranhaMain");
            }
            if (configuration.getDistribution().equals("webprofile")) {
                commands.add("cloud.piranha.dist.webprofile.WebProfilePiranhaMain");
            }
        }
        commands.add("--http-port");
        commands.add(Integer.toString(configuration.getHttpPort()));
        commands.add("--war-file");
        commands.add(warFile.getName());
        commands.add("--write-pid");

        String appName = toAppName(warFile.getName());
        String appURL = "http://localhost:" + Integer.toString(configuration.getHttpPort()) + "/" + appName;
        File logFile = new File(runtimeDirectory, appName + ".log");

        LOGGER.log(INFO,
            """


            Starting Piranha

            Classpath:  {0}
            Directory:  {1}
            Log:        {2}
            URL:        {3}


            """,

            classpath.toString(),
            runtimeDirectory,
            logFile.getAbsolutePath(),
            appURL);

        process = new ProcessBuilder()
                .directory(runtimeDirectory)
                .command(commands)
                .redirectErrorStream(true)
                .redirectOutput(logFile)
                .start();

        File pidFile = new File(runtimeDirectory, PID_FILENAME);
        int count = 0;
        LOGGER.log(INFO, "Waiting for Piranha to be ready");
        while (!pidFile.exists() && process.isAlive()) {
            try {
                Thread.sleep(100);
                count++;
            } catch (InterruptedException ie) {
            }

            if (configuration.isSuspend()) {
                if (count % 500 == 0) {
                    LOGGER.log(INFO, "Still waiting (infinite, because suspend on port 9009)");
                }
                continue;
            }

            if (count % 20 == 0) {
                LOGGER.log(INFO, "Still waiting... ({0} of {1})", (count / 20), (1200 / 20));
            }

            if (count == 1200) {
                LOGGER.log(WARNING, "Warning, PID file not seen!");
                break;
            }
        }

        if (!process.isAlive()) {
            LOGGER.log(WARNING, "Piranha terminated during startup.");

            String msg = "Cannot start Piranha. \n";
            if (process.getErrorStream() != null) {
                msg += Files.readString(logFile.toPath());
            }

            throw new DeploymentException(msg);
        }

        LOGGER.log(INFO,
            "\n" +
            "Application is available at: " + appURL);
    }

    /**
     * Copy the Piranha JAR file.
     *
     * @param runtimeDirectory the runtime directory.
     * @param zipFile the zip file.
     */
    private void copyPiranhaJarFile(File runtimeDirectory, File zipFile) throws IOException {
        if (!runtimeDirectory.exists() && !runtimeDirectory.mkdirs()) {
            System.err.println(UNABLE_TO_CREATE_DIRECTORIES);
        }

        Files.copy(zipFile.toPath(),
                Path.of(runtimeDirectory + "/piranha-" + configuration.getDistribution() + ".jar"),
                REPLACE_EXISTING);
    }

    /**
     * Is the string null or empty.
     *
     * @param string the string
     * @return true if it is, false otherwise.
     */
    private boolean isEmpty(String string) {
        return string == null || string.isEmpty();
    }
}


================================================
FILE: arquillian/managed/src/main/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainerConfiguration.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.arquillian.managed;

import org.jboss.arquillian.container.spi.ConfigurationException;
import org.jboss.arquillian.container.spi.client.container.ContainerConfiguration;

import me.alexpanov.net.FreePortFinder;

import static java.lang.System.Logger.Level.INFO;

/**
 * The managed Piranha container configuration.
 *
 * The following system properties can be used to configure the Piranha
 * container from the command-line.
 * <table>
 * <caption>System properties</caption>
 * <tr>
 * <th>name</th>
 * <th>value</th>
 * <th>notes</th>
 * </tr>
 * <tr>
 * <td>piranha.debug</td>
 * <td>The boolean to start the Piranha process in debugging mode</td>
 * <td>not enabled by default</td>
 * </tr>
 * <tr>
 * <td>piranha.distribution</td>
 * <td>The Piranha distribution to use</td>
 * <td>coreprofile by default</td>
 * </tr>
 * <tr>
 * <td>piranha.httpPort</td>
 * <td>The integer to select the HTTP port to use for the Piranha process</td>
 * <td>if not set an unused port will be automatically chosen</td>
 * </tr>
 * <tr>
 * <td>piranha.callerName</td>
 * <td>The username to seed into the in-memory identity store</td>
 * <td>not set by default</td>
 * </tr>
 * <tr>
 * <td>piranha.callerPassword</td>
 * <td>The password for the caller to seed into the in-memory identity store</td>
 * <td>not set by default</td>
 * </tr>
 * <tr>
 * <td>piranha.callerGroups</td>
 * <td>The comma-separated groups for the caller to seed into the in-memory identity store</td>
 * <td>not set by default</td>
 * </tr>
 * <tr>
 * <td>piranha.jvmArguments</td>
 * <td>The string with JVM arguments to pass to the Piranha process</td>
 * <td>no additional JVM arguments are passed by default</td>
 * </tr>
 * <tr>
 * <td>piranha.protocol</td>
 * <td>The string with the Arquillian protocol to use when talking to the
 * Piranha process</td>
 * <td>set to 'Servlet 6.0' by default</td>
 * </tr>
 * <tr>
 * <td>piranha.suspend</td>
 * <td>the boolean to start the Piranha process in suspend mode</td>
 * <td>not enabled by default</td>
 * </tr>
 * </table>
 *
 * @author Manfred Riem (mriem@manorrock.com)
 */
public class ManagedPiranhaContainerConfiguration implements ContainerConfiguration {

    /**
     * Stores the logger.
     */
    private static final System.Logger LOGGER = System.getLogger(ManagedPiranhaContainerConfiguration.class.getName());

    /**
     * Stores the caller groups.
     */
    private String callerGroups = System.getProperty("piranha.callerGroups", "");

    /**
     * Stores the caller name.
     */
    private String callerName = System.getProperty("piranha.callerName", "");

    /**
     * Stores the caller password.
     */
    private String callerPassword = System.getProperty("piranha.callerPassword", "");

    /**
     * Stores the distribution to use.
     */
    private String distribution = System.getProperty("piranha.distribution", "coreprofile");
    
    /**
     * Stores the debug flag.
     */
    private boolean debug = Boolean.parseBoolean(System.getProperty("piranha.debug", "false"));

    /**
     * Stores the HTTP port.
     */
    private Integer httpPort = System.getProperty("piranha.httpPort") != null ? Integer.valueOf(System.getProperty("piranha.httpPort")) : null;

    /**
     * Stores the JVM arguments.
     */
    private String jvmArguments = System.getProperty("piranha.jvmArguments", "");

    /**
     * Stores the Arquillian protocol.
     */
    private String protocol = System.getProperty("piranha.protocol", "Servlet 6.0");

    /**
     * Stores the suspend flag.
     */
    private boolean suspend = Boolean.parseBoolean(System.getProperty("piranha.suspend", "false"));

    /**
     * Constructor.
     */
    public ManagedPiranhaContainerConfiguration() {
    }

    /**
     * Get the caller groups.
     *
     * @return the caller groups.
     */
    public String getCallerGroups() {
        return callerGroups;
    }

    /**
     * Get the caller name.
     *
     * @return the caller name.
     */
    public String getCallerName() {
        return callerName;
    }

    /**
     * Get the caller password.
     *
     * @return the caller password.
     */
    public String getCallerPassword() {
        return callerPassword;
    }

    /**
     * Get the distribution.
     * 
     * @return the distribution.
     */
    public String getDistribution() {
        return distribution;
    }
    
    /**
     * Get the HTTP port.
     *
     * @return the HTTP port.
     */
    public int getHttpPort() {
        if (httpPort == null) {
            httpPort = FreePortFinder.findFreeLocalPort();
        }
        return httpPort;
    }

    /**
     * Get the JVM arguments.
     *
     * @return the JVM arguments.
     */
    public String getJvmArguments() {
        return jvmArguments;
    }

    /**
     * Get the protocol.
     *
     * @return the protocol.
     */
    public String getProtocol() {
        return protocol;
    }

    /**
     * Is the debug flag set.
     * 
     * @return true if it is, false otherwise.
     */
    public boolean isDebug() {
        return debug;
    }
    
    /**
     * Is the suspend flag set.
     * 
     * @return the suspend flag.
     */
    public boolean isSuspend() {
        return suspend;
    }

    /**
     * Set the caller groups.
     *
     * @param callerGroups the caller groups.
     */
    public void setCallerGroups(String callerGroups) {
        this.callerGroups = callerGroups;
    }

    /**
     * Set the caller name.
     *
     * @param callerName the caller name.
     */
    public void setCallerName(String callerName) {
        this.callerName = callerName;
    }

    /**
     * Set the caller password.
     *
     * @param callerPassword the caller password.
     */
    public void setCallerPassword(String callerPassword) {
        this.callerPassword = callerPassword;
    }

    /**
     * Set the debug flag.
     * 
     * @param debug the debug flag.
     */
    public void setDebug(boolean debug) {
        this.debug = debug;
    }

    /**
     * Set the distribution.
     * 
     * @param distribution the distribution.
     */
    public void setDistribution(String distribution) {
        this.distribution = distribution;
    }

    /**
     * Set the HTTP port.
     *
     * @param httpPort the HTTP port.
     */
    public void setHttpPort(int httpPort) {
        this.httpPort = httpPort;
    }

    /**
     * Set the JVM arguments.
     *
     * @param jvmArguments the JVM arguments.
     */
    public void setJvmArguments(String jvmArguments) {
        this.jvmArguments = jvmArguments;
    }

    /**
     * Set the protocol.
     *
     * @param protocol the protocol.
     */
    public void setProtocol(String protocol) {
        this.protocol = protocol;
    }

    /**
     * Set the suspend flag.
     * 
     * @param suspend the suspend flag.
     */
    public void setSuspend(boolean suspend) {
        this.suspend = suspend;
    }

    @Override
    public void validate() throws ConfigurationException {
        LOGGER.log(INFO, """

            Using HTTP Port:     {0}
            Using JVM arguments: {1}
            Using protocol:      {2}
            Using debug:         {3}
            Using suspend:       {4}

            """,
                getHttpPort() + "",
                getJvmArguments(),
                getProtocol(),
                isDebug(),
                isSuspend());
    }
}


================================================
FILE: arquillian/managed/src/main/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainerExtension.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.arquillian.managed;

import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
import org.jboss.arquillian.core.spi.LoadableExtension;

/**
 * The Managed Piranha container extension.
 * 
 * @author Manfred Riem (mriem@manorrock.com)
 */
public class ManagedPiranhaContainerExtension implements LoadableExtension {

    /**
     * Default constructor.
     */
    public ManagedPiranhaContainerExtension() {
    }

    @SuppressWarnings("exports")
    @Override
    public void register(ExtensionBuilder extensionBuilder) {
        extensionBuilder.service(DeployableContainer.class, ManagedPiranhaContainer.class);
    }
}


================================================
FILE: arquillian/managed/src/main/java/module-info.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

import cloud.piranha.arquillian.managed.ManagedPiranhaContainerExtension;
import org.jboss.arquillian.core.spi.LoadableExtension;

/**
 * This module delivers the managed Piranha container support for Arquillian.
 * 
 * @author Manfred Riem (mriem@manorrock.com)
 */
module cloud.piranha.arquillian.managed {

    exports cloud.piranha.arquillian.managed;
    opens cloud.piranha.arquillian.managed;
    provides LoadableExtension with ManagedPiranhaContainerExtension;
    requires arquillian.container.spi;
    requires arquillian.core.spi;
    requires free.port.finder;
    requires shrinkwrap.api;
}


================================================
FILE: arquillian/managed/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
================================================
cloud.piranha.arquillian.managed.ManagedPiranhaContainerExtension


================================================
FILE: arquillian/managed/src/test/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainerConfigurationTest.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.arquillian.managed;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

/**
 * The JUnit tests for the ManagedPiranhaContainerConfiguration class.
 * 
 * @author Manfred Riem (mriem@manorrock.com)
 */
class ManagedPiranhaContainerConfigurationTest {

    @Test
    void testGetHttpPortDefault() {
        System.clearProperty("piranha.httpPort");
        ManagedPiranhaContainerConfiguration configuration = new ManagedPiranhaContainerConfiguration();
        int port = configuration.getHttpPort();
        assertTrue(port > 0, "The port should be a positive integer");
        System.clearProperty("piranha.httpPort");
    }

    @Test
    void testGetHttpPortSet() {
        System.setProperty("piranha.httpPort", "8080");
        ManagedPiranhaContainerConfiguration configuration = new ManagedPiranhaContainerConfiguration();
        int port = configuration.getHttpPort();
        assertEquals(8080, port, "The port should be 8080");
        System.clearProperty("piranha.httpPort");
    }

    @Test
    void testGetHttpPortInvalid() {
        System.setProperty("piranha.httpPort", "invalid");
        assertThrows(NumberFormatException.class, () -> {
            ManagedPiranhaContainerConfiguration configuration = new ManagedPiranhaContainerConfiguration();
            configuration.getHttpPort();
        }, "A NumberFormatException should be thrown for invalid port");
        System.clearProperty("piranha.httpPort");
    }

    @Test
    void testGetDistribution() {
        ManagedPiranhaContainerConfiguration config = new ManagedPiranhaContainerConfiguration();
        assertEquals("coreprofile", config.getDistribution());
    }

    @Test
    void testSetDistribution() {
        ManagedPiranhaContainerConfiguration config = new ManagedPiranhaContainerConfiguration();
        config.setDistribution("webprofile");
        assertEquals("webprofile", config.getDistribution());
    }

    @Test
    void testGetHttpPort() {
        ManagedPiranhaContainerConfiguration config = new ManagedPiranhaContainerConfiguration();
        assertTrue(config.getHttpPort() > 0);
    }

    @Test
    void testSetHttpPort() {
        ManagedPiranhaContainerConfiguration config = new ManagedPiranhaContainerConfiguration();
        config.setHttpPort(8080);
        assertEquals(8080, config.getHttpPort());
    }

    @Test
    void testGetJvmArguments() {
        ManagedPiranhaContainerConfiguration config = new ManagedPiranhaContainerConfiguration();
        assertEquals("", config.getJvmArguments());
    }

    @Test
    void testSetJvmArguments() {
        ManagedPiranhaContainerConfiguration config = new ManagedPiranhaContainerConfiguration();
        config.setJvmArguments("-Xmx512m");
        assertEquals("-Xmx512m", config.getJvmArguments());
    }

    @Test
    void testGetProtocol() {
        ManagedPiranhaContainerConfiguration config = new ManagedPiranhaContainerConfiguration();
        assertEquals("Servlet 6.0", config.getProtocol());
    }

    @Test
    void testSetProtocol() {
        ManagedPiranhaContainerConfiguration config = new ManagedPiranhaContainerConfiguration();
        config.setProtocol("Servlet 5.0");
        assertEquals("Servlet 5.0", config.getProtocol());
    }

    @Test
    void testIsDebug() {
        ManagedPiranhaContainerConfiguration config = new ManagedPiranhaContainerConfiguration();
        assertFalse(config.isDebug());
    }

    @Test
    void testSetDebug() {
        ManagedPiranhaContainerConfiguration config = new ManagedPiranhaContainerConfiguration();
        config.setDebug(true);
        assertTrue(config.isDebug());
    }

    @Test
    void testIsSuspend() {
        ManagedPiranhaContainerConfiguration config = new ManagedPiranhaContainerConfiguration();
        assertFalse(config.isSuspend());
    }

    @Test
    void testSetSuspend() {
        ManagedPiranhaContainerConfiguration config = new ManagedPiranhaContainerConfiguration();
        config.setSuspend(true);
        assertTrue(config.isSuspend());
    }

    @Test
    void testValidate() {
        ManagedPiranhaContainerConfiguration config = new ManagedPiranhaContainerConfiguration();
        assertDoesNotThrow(config::validate);
    }
}


================================================
FILE: arquillian/managed/src/test/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainerExtensionTest.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.arquillian.managed;

import org.jboss.arquillian.core.spi.LoadableExtension.ExtensionBuilder;
import org.jboss.arquillian.core.spi.context.Context;
import org.junit.jupiter.api.Test;

/**
 * The JUnit tests for the ManagedPiranhaContainerExtension class.
 * 
 * @author Manfred Riem (mriem@manorrock.com)
 */
class ManagedPiranhaContainerExtensionTest {

    @Test
    void testRegister() {
        ExtensionBuilder extensionBuilder = new ExtensionBuilder() {

            @Override
            public <T> ExtensionBuilder service(Class<T> service, Class<? extends T> impl) {
                return this;
            }

            @Override
            public <T> ExtensionBuilder override(Class<T> service, Class<? extends T> oldServiceImpl,
                    Class<? extends T> newServiceImpl) {
                throw new UnsupportedOperationException("Unimplemented method 'override'");
            }

            @Override
            public ExtensionBuilder observer(Class<?> handler) {
                throw new UnsupportedOperationException("Unimplemented method 'observer'");
            }

            @Override
            public ExtensionBuilder context(Class<? extends Context> context) {
                throw new UnsupportedOperationException("Unimplemented method 'context'");
            }
        };
        ManagedPiranhaContainerExtension extension = new ManagedPiranhaContainerExtension();
        extension.register(extensionBuilder);
    }
}


================================================
FILE: arquillian/managed/src/test/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainerTest.java
================================================
package cloud.piranha.arquillian.managed;

import java.io.File;
import org.jboss.arquillian.container.spi.client.container.DeploymentException;
import org.jboss.arquillian.container.spi.client.protocol.ProtocolDescription;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

/**
 * The JUnit tests for the ManagedPiranhaContainer class.
 * 
 * @author Manfred Riem (mriem@manorrock.com)
 */
class ManagedPiranhaContainerTest {

    /**
     * Test getContainerConfiguration method.
     */
    @Test
    void testGetConfigurationClass() {
        ManagedPiranhaContainer container = new ManagedPiranhaContainer();
        assertEquals(ManagedPiranhaContainerConfiguration.class, container.getConfigurationClass());
    }

    /**
     * TEst getDefaulProtocol method.
     */
    @Test
    void testGetDefaultProtocol() {
        ManagedPiranhaContainer container = new ManagedPiranhaContainer();
        container.setup(new ManagedPiranhaContainerConfiguration());
        ProtocolDescription protocolDescription = container.getDefaultProtocol();
        assertEquals("Servlet 6.0", protocolDescription.getName());
    }
}


================================================
FILE: arquillian/managed/src/test/webapp/test/WEB-INF/web.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
         version="6.0">
</web-app>

================================================
FILE: arquillian/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>cloud.piranha</groupId>
        <artifactId>project</artifactId>
        <version>25.4.0-SNAPSHOT</version>
    </parent>

    <groupId>cloud.piranha.arquillian</groupId>
    <artifactId>project</artifactId>
    <packaging>pom</packaging>

    <name>Piranha - Arquillian</name>
    <description>
        The Piranha Arquillian Project delivers you with Arquillian support.
    </description>

    <modules>
        <module>managed</module>
        <module>server</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.jboss.shrinkwrap.resolver</groupId>
                <artifactId>shrinkwrap-resolver-bom</artifactId>
                <version>${shrinkwrap-resolver.version}</version>
                <scope>test</scope>
                <type>pom</type>
            </dependency>
            <dependency>
                <groupId>org.jboss.shrinkwrap.resolver</groupId>
                <artifactId>shrinkwrap-resolver-depchain</artifactId>
                <version>${shrinkwrap-resolver.version}</version>
                <type>pom</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.jboss.arquillian</groupId>
                <artifactId>arquillian-bom</artifactId>
                <version>${arquillian.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.jboss.arquillian.jakarta</groupId>
                <artifactId>arquillian-jakarta-bom</artifactId>
                <version>${arquillian-jakarta.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>            
            <dependency>
                <groupId>cloud.piranha</groupId>
                <artifactId>bom</artifactId>
                <version>${project.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <distributionManagement>
        <site>
            <id>default</id>
            <url>file:///tmp/piranha/arquillian/</url>
        </site>
    </distributionManagement>   
</project>


================================================
FILE: arquillian/server/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>cloud.piranha.arquillian</groupId>
        <artifactId>project</artifactId>
        <version>25.4.0-SNAPSHOT</version>
    </parent>

    <artifactId>piranha-arquillian-server</artifactId>

    <name>Piranha - Arquillian - Server</name>
    <description>
        Piranha integration for the Arquillian Project.
    </description>

    <dependencies>
        <dependency>
            <groupId>io.smallrye</groupId>
            <artifactId>jandex</artifactId>
        </dependency>
        <dependency>
            <groupId>cloud.piranha.micro</groupId>
            <artifactId>piranha-micro-loader</artifactId>
            <version>${project.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>cloud.piranha.resource</groupId>
            <artifactId>piranha-resource-api</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>cloud.piranha.resource</groupId>
            <artifactId>piranha-resource-impl</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>cloud.piranha.resource</groupId>
            <artifactId>piranha-resource-shrinkwrap</artifactId>
            <version>${project.version}</version>
        </dependency>
        
        <dependency>
            <groupId>org.jboss.shrinkwrap.resolver</groupId>
            <artifactId>shrinkwrap-resolver-depchain</artifactId>
            <type>pom</type>
        </dependency>
        
        <dependency>
            <groupId>org.jboss.arquillian.container</groupId>
            <artifactId>arquillian-container-spi</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian.container</groupId>
            <artifactId>arquillian-container-test-spi</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian.protocol</groupId>
            <artifactId>arquillian-protocol-servlet-jakarta</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian.testenricher</groupId>
            <artifactId>arquillian-testenricher-cdi-jakarta</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian.testenricher</groupId>
            <artifactId>arquillian-testenricher-ejb-jakarta</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian.testenricher</groupId>
            <artifactId>arquillian-testenricher-resource-jakarta</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian.testenricher</groupId>
            <artifactId>arquillian-testenricher-initialcontext</artifactId>
        </dependency>

        <dependency>
            <groupId>org.jboss.arquillian.junit</groupId>
            <artifactId>arquillian-junit-container</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>flatten-maven-plugin</artifactId>
                <configuration>
                    <flattenMode>ossrh</flattenMode>
                </configuration>
                <executions>
                    <execution>
                        <id>flatten.clean</id>
                        <phase>clean</phase>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>flatten</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>flatten</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <distributionManagement>
        <site>
            <id>default</id>
            <url>file:///tmp/piranha/arquillian/server/</url>
        </site>
    </distributionManagement>   
    <profiles>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>


================================================
FILE: arquillian/server/src/main/java/cloud/piranha/arquillian/server/PiranhaServerDeployableContainer.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.arquillian.server;

import java.lang.System.Logger;

import org.jboss.arquillian.container.spi.client.container.DeploymentException;
import org.jboss.arquillian.container.spi.client.protocol.metadata.HTTPContext;
import org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData;
import org.jboss.arquillian.container.spi.client.protocol.metadata.Servlet;
import org.jboss.shrinkwrap.api.Archive;
import cloud.piranha.arquillian.server.PiranhaServerLoadableExtension.PiranhaServerContainerConfiguration;
import cloud.piranha.micro.loader.MicroDeployOutcome;
import cloud.piranha.micro.loader.MicroOuterDeployer;
import static java.lang.System.Logger.Level.INFO;

/**
 * The Piranha Micro Arquillian connector.
 *
 * <p>
 * This connector will start up an embedded Piranha Micro runtime in an isolated class loader for every application that is
 * deployed.
 *
 * @author Arjan Tijms
 *
 */
public class PiranhaServerDeployableContainer extends PiranhaServerLoadableExtension.PiranhaServerContainerBase {

    /**
     * Stores the logger.
     */
    private static final Logger LOGGER = System.getLogger(PiranhaServerDeployableContainer.class.getName());

    /**
     * Stores the configuration.
     */
    private PiranhaServerContainerConfiguration configuration;
    
    /**
     * Stores the outer deployer.
     */
    private MicroOuterDeployer microOuterDeployer;

    /**
     * Constructor.
     */
    public PiranhaServerDeployableContainer() {
    }

    @Override
    public void setup(PiranhaServerContainerConfiguration configuration) {
        this.configuration = configuration;
        configuration.validate();
    }

    @Override
    public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException {
        LOGGER.log(INFO, "Starting Piranha Micro");

        microOuterDeployer = new MicroOuterDeployer(configuration);

        MicroDeployOutcome deployOutcome = microOuterDeployer.deploy(archive);

        HTTPContext httpContext = new HTTPContext("localhost", configuration.getPort());

        String contextRoot = deployOutcome.getDeployedContextRoot();
        if (contextRoot == null) {
            contextRoot = "/";
        }

        for (String servletName : deployOutcome.getDeployedServlets()) {
            httpContext.add(new Servlet(servletName, contextRoot));
        }

        ProtocolMetaData protocolMetaData = new ProtocolMetaData();
        protocolMetaData.addContext(httpContext);

        return protocolMetaData;
    }

    @Override
    public void undeploy(Archive<?> archive) throws DeploymentException {
        if (microOuterDeployer != null) {
            LOGGER.log(INFO, "Stopping Piranha Micro");
            microOuterDeployer.stop();
        }
    }



}


================================================
FILE: arquillian/server/src/main/java/cloud/piranha/arquillian/server/PiranhaServerLoadableExtension.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.arquillian.server;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

import org.jboss.arquillian.container.spi.ConfigurationException;
import org.jboss.arquillian.container.spi.client.container.ContainerConfiguration;
import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
import org.jboss.arquillian.container.spi.client.protocol.ProtocolDescription;
import org.jboss.arquillian.core.spi.LoadableExtension;

import cloud.piranha.micro.loader.MicroConfiguration;

/**
 * The extension sets up the Arquillian Server Connector
 *
 * @author Arjan Tijms
 *
 */
public class PiranhaServerLoadableExtension implements LoadableExtension {

    /**
     * Constructor.
     */
    public PiranhaServerLoadableExtension() {
    }

    // Defines the deployable container used; PiranhaServerDeployableContainer.class
    // This is the actual "connector" that controls Piranha.

    @Override
    public void register(ExtensionBuilder builder) {
        builder.service(DeployableContainer.class, PiranhaServerDeployableContainer.class);
    }

    /**
     * The Piranha DeployableContainer.
     * 
     * <pre>
     *  Defines the configuration class used: PiranhaServerContainerConfiguration.class
     *  Defines the protocol used: "Servlet 5.0"
     * </pre>
     * 
     * @author Manfred Riem (mriem@manorrock.com)
     */
    public abstract static class PiranhaServerContainerBase implements DeployableContainer<PiranhaServerContainerConfiguration> {

        /**
         * Constructor.
         */
        public PiranhaServerContainerBase() {
        }

        @Override
        public Class<PiranhaServerContainerConfiguration> getConfigurationClass() {
            return PiranhaServerContainerConfiguration.class;
        }

        @Override
        public ProtocolDescription getDefaultProtocol() {
            return new ProtocolDescription("Servlet 5.0");
        }
    }

    /**
     * The Piranha MicroConfiguration.
     * 
     * <pre>
     *  Defines the configuration class to be essentially the same as MicroConfiguration.class
     * </pre>
     * 
     * @author Manfred Riem (mriem@manorrock.com)
     */
    public static class PiranhaServerContainerConfiguration extends MicroConfiguration implements ContainerConfiguration {

        /**
         * Highest port number that we'll try
         */
        private static final int MAX_PORT_NUMBER = 65535;

        /**
         * Lowest port number that we'll try
         */
        private static final int MIN_PORT_NUMBER = 1;

        /**
         * Stores whether to automatically find an available port.
         */
        private boolean autoPort;

        /**
         * Helper class for finding a free port
         */
        private PortFinder portFinder = new PortFinder();

        /**
         * Initializes values from system properties or to default values
         */
        public PiranhaServerContainerConfiguration() {
            super();
            this.autoPort = Boolean.valueOf(System.getProperty("piranha.autoPort", "true"));
        }

        /**
         * Validates the configuration.
         * 
         * <p>
         *  Just calls {@link #postConstruct()}
         * </p>
         * 
         * @throws ConfigurationException - never thrown
         */
        @Override
        public void validate() throws ConfigurationException {
            postConstruct();
        }

        /**
         * Initializes configuration after all configured values were loaded.
         * Computes generated configuration, e.g. a free port for autoPort
         *
         * @return the PiranhaServerContainerConfiguration.
         */
        @Override
        public PiranhaServerContainerConfiguration postConstruct() {
            if (isAutoPort()) {
                setPort(portFinder.findFreePort(getPort()));
            }
            super.postConstruct();
            return this;
        }

        /**
         * Are we automatically assigning a port?
         * 
         * @return whether automatically assign port
         */
        public boolean isAutoPort() {
            return autoPort;
        }

        /**
         * Set whether we are automatically assigning a port.
         * 
         * @param autoPort Whether automatically assign port
         */
        public void setAutoPort(boolean autoPort) {
            this.autoPort = autoPort;
        }

        private class PortFinder {

            /**
             * Find a random free local port. It's guaranteed that the returned port will be always random.
             * The initialPort parameter is only used as a base for the randomization and isn't returned
             * even if it's free. This is to prevent returning the same port if this method is called in parallel.
             *
             * @param initialPort The initial port to start searching from.
             *                    If 0, the default port 8080 will be used.
             * @return free port tha
             */
            public int findFreePort(int initialPort) {
                int portCandidate = 8080;
                int numberOfAttempts = 100;
                boolean foundFreePort = false;
                final Random random = new Random();

                if (initialPort > 0) {
                    portCandidate = initialPort;
                }

                do {
                    portCandidate += random.nextInt(100);
                    foundFreePort = isFreePort(portCandidate);
                    numberOfAttempts--;
                    if (portCandidate > MAX_PORT_NUMBER) {
                        portCandidate = portCandidate - MAX_PORT_NUMBER - 1 + MIN_PORT_NUMBER;
                    }
                } while (!foundFreePort || numberOfAttempts <= 0);

                if (foundFreePort) {
                    return portCandidate;
                } else {
                    throw new RuntimeException("No free port found!");
                }
            }

            private boolean isFreePort(int portCandidate) {
                try ( Socket clientSocket = new Socket("localhost", portCandidate)) {
                } catch (IOException clientEx) {
                    // we cannot connect, the port isn't occupied
                    try {
                        // check whether this process can bind to the port - listen to it and then close it
                        try (ServerSocket listeningSocket = new ServerSocket(portCandidate)) {}
                        return true;
                    } catch (IOException listenEx) {
                    }
                }
                return false;
            }

        }

    }
}


================================================
FILE: arquillian/server/src/main/java/module-info.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

import org.jboss.arquillian.core.spi.LoadableExtension;

import cloud.piranha.arquillian.server.PiranhaServerLoadableExtension;

/**
 * The Piranha Arquillian Server module.
 * 
 * @author Manfred Riem (mriem@manorrock.com)
 */
module cloud.piranha.arquillian.server {

    provides LoadableExtension with PiranhaServerLoadableExtension;

    requires cloud.piranha.micro.loader;

    requires arquillian.container.spi;
    requires arquillian.core.spi;

    requires shrinkwrap.api;
    requires shrinkwrap.descriptors.api.base;
}


================================================
FILE: arquillian/server/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
================================================
cloud.piranha.arquillian.server.PiranhaServerLoadableExtension

================================================
FILE: bom/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>

<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cloud.piranha</groupId>
        <artifactId>project</artifactId>
        <version>25.4.0-SNAPSHOT</version>
    </parent>
    <artifactId>bom</artifactId>
    <packaging>pom</packaging>
    <name>Piranha - BOM</name>
    <properties>
        <!-- dependencies -->
        <jakarta.activation-api.version>2.1.3</jakarta.activation-api.version>
        <jakarta.annotation-api.version>3.0.0</jakarta.annotation-api.version>
        <jakarta.authentication-api.version>3.1.0</jakarta.authentication-api.version>
        <jakarta.authorization-api.version>3.0.0</jakarta.authorization-api.version>
        <jakarta.enterprise.concurrent-api.version>3.1.1</jakarta.enterprise.concurrent-api.version>
        <jakarta.ejb-api.version>4.0.1</jakarta.ejb-api.version>
        <jakarta.el-api.version>6.0.1</jakarta.el-api.version>
        <jakarta.enterprise.cdi-api.version>4.1.0</jakarta.enterprise.cdi-api.version>
        <jakarta.faces-api.version>4.1.2</jakarta.faces-api.version>
        <jakarta.inject-api.version>2.0.1.MR</jakarta.inject-api.version>
        <jakarta.interceptor-api.version>2.2.0</jakarta.interceptor-api.version>
        <jakarta.jakartaee-core-api.version>11.0.0</jakarta.jakartaee-core-api.version>
        <jakarta.jakartaee-web-api.version>11.0.0</jakarta.jakartaee-web-api.version>
        <jakarta.json-api.version>2.1.3</jakarta.json-api.version>
        <jakarta.json.bind-api.version>3.0.1</jakarta.json.bind-api.version>
        <jakarta.mail-api.version>2.1.3</jakarta.mail-api.version>
        <jakarta.persistence-api.version>3.2.0</jakarta.persistence-api.version>
        <jakarta.security.enterprise-api.version>4.0.0</jakarta.security.enterprise-api.version>
        <jakarta.servlet-api.version>6.1.0</jakarta.servlet-api.version>
        <jakarta.servlet.jsp-api.version>4.0.0</jakarta.servlet.jsp-api.version>
        <jakarta.servlet.jsp.jstl-api.version>3.0.2</jakarta.servlet.jsp.jstl-api.version>
        <jakarta.transaction-api.version>2.0.1</jakarta.transaction-api.version>
        <jakarta.validation-api.version>3.1.1</jakarta.validation-api.version>
        <jakarta.websocket-api.version>2.2.0</jakarta.websocket-api.version>
        <jakarta.ws.rs-api.version>4.0.0</jakarta.ws.rs-api.version>
        <jakarta.xml.bind-api.version>4.0.2</jakarta.xml.bind-api.version>
        <!-- other -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!-- Jakarta Activation -->
            <dependency>
                <groupId>jakarta.activation</groupId>
                <artifactId>jakarta.activation-api</artifactId>
                <version>${jakarta.activation-api.version}</version>
            </dependency>
            <!-- Jakarta Annotation -->
            <dependency>
                <groupId>jakarta.annotation</groupId>
                <artifactId>jakarta.annotation-api</artifactId>
                <version>${jakarta.annotation-api.version}</version>
            </dependency>
            <!-- Jakarta Authentication -->
            <dependency>
                <groupId>jakarta.authentication</groupId>
                <artifactId>jakarta.authentication-api</artifactId>
                <version>${jakarta.authentication-api.version}</version>
            </dependency>
            <!-- Jakarta Authorization -->
            <dependency>
                <groupId>jakarta.authorization</groupId>
                <artifactId>jakarta.authorization-api</artifactId>
                <version>${jakarta.authorization-api.version}</version>
            </dependency>
            <!-- Jakarta Concurrent -->
            <dependency>
                <groupId>jakarta.enterprise.concurrent</groupId>
                <artifactId>jakarta.enterprise.concurrent-api</artifactId>
                <version>${jakarta.enterprise.concurrent-api.version}</version>
            </dependency>
            <!-- Jakarta Contexts and Dependency Injection -->
            <dependency>
                <groupId>jakarta.enterprise</groupId>
                <artifactId>jakarta.enterprise.cdi-api</artifactId>
                <version>${jakarta.enterprise.cdi-api.version}</version>
            </dependency>
            <dependency>
                <groupId>jakarta.enterprise</groupId>
                <artifactId>jakarta.enterprise.cdi-el-api</artifactId>
                <version>${jakarta.enterprise.cdi-api.version}</version>
            </dependency>
            <!-- Jakarta EE Core Profile -->
            <dependency>
                <groupId>jakarta.platform</groupId>
                <artifactId>jakarta.jakartaee-core-api</artifactId>
                <version>${jakarta.jakartaee-core-api.version}</version>
            </dependency>
            <!-- Jakarta EE Web Profile -->
            <dependency>
                <groupId>jakarta.platform</groupId>
                <artifactId>jakarta.jakartaee-web-api</artifactId>
                <version>${jakarta.jakartaee-web-api.version}</version>
            </dependency>
            <!-- Jakarta Enterprise Beans -->
            <dependency>
                <groupId>jakarta.ejb</groupId>
                <artifactId>jakarta.ejb-api</artifactId>
                <version>${jakarta.ejb-api.version}</version>
            </dependency>
            <!-- Jakarta Expression Language -->
            <dependency>
                <groupId>jakarta.el</groupId>
                <artifactId>jakarta.el-api</artifactId>
                <version>${jakarta.el-api.version}</version>
            </dependency>
            <!-- Jakarta Faces -->
            <dependency>
                <groupId>jakarta.faces</groupId>
                <artifactId>jakarta.faces-api</artifactId>
                <version>${jakarta.faces-api.version}</version>
            </dependency>
            <!-- Jakarta Inject API -->            
            <dependency>
                <groupId>jakarta.inject</groupId>
                <artifactId>jakarta.inject-api</artifactId>
                <version>${jakarta.inject-api.version}</version>
            </dependency>
            <!-- Jakarta Interceptors API -->
            <dependency>
                <groupId>jakarta.interceptor</groupId>
                <artifactId>jakarta.interceptor-api</artifactId>
                <version>${jakarta.interceptor-api.version}</version>
            </dependency>
            <!-- Jakarta JSON Binding -->
            <dependency>
                <groupId>jakarta.json.bind</groupId>
                <artifactId>jakarta.json.bind-api</artifactId>
                <version>${jakarta.json.bind-api.version}</version>
            </dependency>
            <!-- Jakarta JSON Processing -->
            <dependency>
                <groupId>jakarta.json</groupId>
                <artifactId>jakarta.json-api</artifactId>
                <version>${jakarta.json-api.version}</version>
            </dependency>
            <!-- Jakarta Mail -->
            <dependency>
                <groupId>jakarta.mail</groupId>
                <artifactId>jakarta.mail-api</artifactId>
                <version>${jakarta.mail-api.version}</version>
            </dependency>
            <!-- Jakarta Pages -->
            <dependency>
                <groupId>jakarta.servlet.jsp</groupId>
                <artifactId>jakarta.servlet.jsp-api</artifactId>
                <version>${jakarta.servlet.jsp-api.version}</version>
            </dependency>
            <!-- Jakarta Persistence -->
            <dependency>
                <groupId>jakarta.persistence</groupId>
                <artifactId>jakarta.persistence-api</artifactId>
                <version>${jakarta.persistence-api.version}</version>
            </dependency>
            <!-- Jakarta REST -->
            <dependency>
                <groupId>jakarta.ws.rs</groupId>
                <artifactId>jakarta.ws.rs-api</artifactId>
                <version>${jakarta.ws.rs-api.version}</version>
            </dependency>
            <!-- Jakarta Security -->
            <dependency>
                <groupId>jakarta.security.enterprise</groupId>
                <artifactId>jakarta.security.enterprise-api</artifactId>
                <version>${jakarta.security.enterprise-api.version}</version>
            </dependency>
            <!-- Jakarta Servlet -->
            <dependency>
                <groupId>jakarta.servlet</groupId>
                <artifactId>jakarta.servlet-api</artifactId>
                <version>${jakarta.servlet-api.version}</version>
            </dependency>
            <!-- Jakarta Standard Tag Library -->            
            <dependency>
                <groupId>jakarta.servlet.jsp.jstl</groupId>
                <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
                <version>${jakarta.servlet.jsp.jstl-api.version}</version>
            </dependency>
            <!-- Jakarta Transactions -->
            <dependency>
                <groupId>jakarta.transaction</groupId>
                <artifactId>jakarta.transaction-api</artifactId>
                <version>${jakarta.transaction-api.version}</version>
            </dependency>
            <!-- Jakarta Validation -->
            <dependency>
                <groupId>jakarta.validation</groupId>
                <artifactId>jakarta.validation-api</artifactId>
                <version>${jakarta.validation-api.version}</version>
            </dependency>
            <!-- Jakarta WebSocket -->
            <dependency>
                <groupId>jakarta.websocket</groupId>
                <artifactId>jakarta.websocket-api</artifactId>
                <version>${jakarta.websocket-api.version}</version>
            </dependency>
            <dependency>
                <groupId>jakarta.websocket</groupId>
                <artifactId>jakarta.websocket-client-api</artifactId>
                <version>${jakarta.websocket-api.version}</version>
            </dependency>
            <!-- Jakarta XML Binding -->
            <dependency>
                <groupId>jakarta.xml.bind</groupId>
                <artifactId>jakarta.xml.bind-api</artifactId>
                <version>${jakarta.xml.bind-api.version}</version>
            </dependency>
            <!-- MicroProfile Config -->
            <dependency>
                <groupId>org.eclipse.microprofile.config</groupId>
                <artifactId>microprofile-config-api</artifactId>
                <version>${microprofile-config-api.version}</version>
            </dependency>
            <!-- MicroProfile JWT Auth -->
            <dependency>
                <groupId>org.eclipse.microprofile.jwt</groupId>
                <artifactId>microprofile-jwt-auth-api</artifactId>
                <version>${microprofile-jwt-auth-api.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <distributionManagement>
        <site>
            <id>default</id>
            <url>file:///tmp/piranha/bom/</url>
        </site>
    </distributionManagement>       
</project>


================================================
FILE: core/api/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>cloud.piranha.core</groupId>
        <artifactId>project</artifactId>
        <version>25.4.0-SNAPSHOT</version>
    </parent>

    <artifactId>piranha-core-api</artifactId>
    <packaging>jar</packaging>

    <name>Piranha - Core - API</name>

    <dependencies>
        <!-- compile -->
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>cloud.piranha.resource</groupId>
            <artifactId>piranha-resource-api</artifactId>
            <version>${project.version}</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

    <distributionManagement>
        <site>
            <id>default</id>
            <url>file:///tmp/piranha/core/api/</url>
        </site>
    </distributionManagement>       
</project>


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/AnnotationInfo.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import java.lang.reflect.AnnotatedElement;

/**
 * The annotation information.
 *
 * @param <T> the type.
 * @author Manfred Riem (mriem@manorrock.com)
 * @author Arjan Tijms
 */
public interface AnnotationInfo<T> {

    /**
     * {@return the instance}
     */
    T getInstance();

    /**
     * {@return the target}
     */
    AnnotatedElement getTarget();

    /**
     * Get the target.
     *
     * @return the class.
     */
    default Class<?> getTargetType() {
        Class<?> result = null;
        AnnotatedElement element = getTarget();
        if (element instanceof Class<?> clazz) {
            result = clazz;
        }
        return result;
    }
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/AnnotationManager.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.util.List;
import java.util.Set;

/**
 * The AnnotationManager API.
 *
 * @author Manfred Riem (mriem@manorrock.com)
 * @author Arjan Tijms
 */
public interface AnnotationManager {
   
    /**
     * Add the annotation.
     *
     * @param annotationInfo the annotation info.
     */
    void addAnnotation(AnnotationInfo<?> annotationInfo);
    
    /**
     * Add an instance.
     * 
     * @param instanceClass the instance class.
     * @param implementingClass the implementing class.
     */
    void addInstance(Class<?> instanceClass, Class<?> implementingClass);
    
    /**
     * Get the annotations.
     * 
     * @param <T> the type.
     * @param annotationClass the annotation class.
     * @return the typed list of annotations.
     */
    <T> List<AnnotationInfo<T>> getAnnotations(Class<T> annotationClass);
    
    /**
     * Get the annotations.
     * 
     * @param annotationClasses the annotation classes.
     * @return the list of annotations.
     */
    List<AnnotationInfo<?>> getAnnotations(Class<?>... annotationClasses);

    /**
     * Get the instances.
     * 
     * @param <T> the type.
     * @param instanceClass the instance class.
     * @return the typed list of instances.
     */
    <T> List<Class<T>> getInstances(Class<T> instanceClass);
    
    /**
     * Get the instances.
     * 
     * @param instanceClasses the instance classes.
     * @return the list of instances.
     */
    List<Class<?>> getInstances(Class<?>... instanceClasses);
    
    /**
     * Get the annotation for the annotation class and annotated element type.
     * 
     * @param <T> the type.
     * @param annotationClass the annotation class.
     * @param type the annotated element type.
     * @return the list of annotations.
     */
    <T> List<AnnotationInfo<T>> getAnnotationsByTarget(Class<T> annotationClass, AnnotatedElement type);

    /**
     * Add an annotated class.
     * 
     * @param annotationClass the annotation class on the annotated class.
     * @param clazz the annotated class.
     */
    void addAnnotatedClass(Class<? extends Annotation> annotationClass, Class<?> clazz);
    
    /**
     * Get the annotated classes.
     * 
     * @param annotationClass the annotation to inspect for.
     * @return the classes annotated with the given annotation (if any).
     */
    Set<Class<?>> getAnnotatedClass(Class<? extends Annotation> annotationClass);
    
    /**
     * Get annotated classes.
     * 
     * @param annotationClasses the annotation classes to inspect for.
     * @return the classes annotated with the given annotations (if any).
     */
    Set<Class<?>> getAnnotatedClasses(Class<?>[] annotationClasses);
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/AsyncDispatcher.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

/**
 * The AsyncDispatcher API.
 *
 * @author Manfred Riem (mriem@manorrock.com)
 */
public interface AsyncDispatcher {

    /**
     * Dispatch.
     */
    void dispatch();
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/AsyncManager.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;

/**
 * The AsyncManager API.
 *
 * @author Manfred Riem (mriem@manorrock.com)
 */
public interface AsyncManager {

    /**
     * {@return the async dispatcher}
     * @param webApplication the web application.
     * @param path the path.
     * @param asyncStartRequest the servlet request coming from a call to request.asyncStart.
     * @param asyncStartResponse the servlet response coming from a call to request.asyncStart.
     */
    AsyncDispatcher getDispatcher(WebApplication webApplication, String path, ServletRequest asyncStartRequest, ServletResponse asyncStartResponse);
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/AttributeManager.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import java.util.Enumeration;

/**
 * The AttributeManager API.
 *
 * @author Manfred Riem (mriem@manorrock.com)
 */
public interface AttributeManager {

    /**
     * Get the attribute.
     *
     * @param name the name.
     * @return the value.
     */
    Object getAttribute(String name);

    /**
     * {@return the attribute names}
     */
    Enumeration<String> getAttributeNames();

    /**
     * Remove the attribute.
     *
     * @param name the name.
     */
    void removeAttribute(String name);

    /**
     * Set the attribute.
     *
     * @param name the name.
     * @param value the value.
     */
    void setAttribute(String name, Object value);
    
    /**
     * Checks if this manager has the given attribute
     * @param name the name of the attribute to check for
     * @return true if this manager contains the attribute, false otherwise
     */
    default boolean containsAttribute(String name) {
        return getAttribute(name) != null;
    }
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/AuthenticatedIdentity.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import java.security.Principal;
import java.util.Set;

/**
 * This interface is implemented by classes that represent the current authenticated identity.
 *
 * <p>
 * What current means here is context dependent. In a Jakarta Servlet application this refers
 * to the caller (user) details during a single HTTP request.
 *
 * @author Arjan Tijms
 *
 */
public interface AuthenticatedIdentity extends Principal {

    @Override
    default String getName() {
        if (getCallerPrincipal() == null) {
            return null;
        }

        return getCallerPrincipal().getName();
    }

    /**
     * Returns the caller principal, which represents the primary name of the calling entity (aka the "caller")
     * to a server.
     *
     * @return the caller principal, or null if authentication has not (yet) completed successfully.
     */
    Principal getCallerPrincipal();

    /**
     * The groups the caller is in.
     *
     * <p>
     * If group to role mapping is not active (the default) groups are equal to roles.
     *
     * @return the set of groups the caller is in, never null.
     */
    Set<String> getGroups();

}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/CurrentRequestHolder.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import jakarta.servlet.http.HttpServletRequest;

/**
 * A holder that references the current <code>HttpServletRequest </code>in the request processing
 * pipeline.
 *
 * <p>
 * This structure allows the runtime to set what constitutes this <em>current</em> at any given
 * time.
 *
 * @author Arjan Tijms
 *
 */
public interface CurrentRequestHolder {

    /**
     * The request attribute under a holder implementation is stored in the request
     */
    String CURRENT_REQUEST_ATTRIBUTE = CurrentRequestHolder.class.getName();

    /**
     * Gets the current HttpServletRequest
     *
     * @param <T> the actual implementation of the current HttpServletRequest
     * @return the current HttpServletRequest
     */
    <T extends HttpServletRequest> T getRequest();

    /**
     * Sets the current HttpServletRequest
     *
     * @param request the current HttpServletRequest
     */
    void setRequest(HttpServletRequest request);


}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/DispatcherManager.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import jakarta.servlet.RequestDispatcher;

/**
 * The DispatcherManager API.
 *
 * @author Manfred Riem (mriem@manorrock.com)
 */
public interface DispatcherManager {

    /**
     * Get the named request dispatcher.
     *
     * @param name the name.
     * @return the request dispatcher.
     */
    RequestDispatcher getNamedDispatcher(String name);

    /**
     * Set the web application.
     *
     * @param webApplication the web application.
     */
    void setWebApplication(WebApplication webApplication);
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/ErrorPageManager.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import jakarta.servlet.http.HttpServletResponse;

/**
 * The ErrorPageManager API.
 * 
 * @author Manfred Riem (mriem@manorrock.com)
 */
public interface ErrorPageManager {

    /**
     * Add an error page.
     *
     * @param statusCode the status code.
     * @param page the page.
     */
    void addErrorPage(int statusCode, String page);

    /**
     * Add an error page.
     *
     * @param throwableClassName the throwable class name.
     * @param page the page.
     */
    void addErrorPage(String throwableClassName, String page);

    /**
     * {@return the error page}
     * 
     * @param throwable the throwable.
     * @param response the HTTP servlet response.
     */
    String getErrorPage(Throwable throwable, HttpServletResponse response);
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/FilterEnvironment.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import jakarta.servlet.Filter;
import jakarta.servlet.FilterConfig;
import jakarta.servlet.FilterRegistration.Dynamic;
import jakarta.servlet.ServletException;

/**
 * The environment of a Filter.
 * 
 * @author Manfred Riem (mriem@manorrock.com)
 * @author Arjan Tijms
 */
public interface FilterEnvironment extends Dynamic, FilterConfig {

    /**
     * Defines the UNAVAILABLE constant.
     */
    int UNAVAILABLE = -1;

    /**
     * {@return the filter}
     */
    Filter getFilter();

    /**
     * Initialize the filter.
     *
     * @throws ServletException when a servlet error occurs.
     */
    void initialize() throws ServletException;

    /**
     * Set the class name.
     *
     * @param className the class name.
     */
    void setClassName(String className);

    /**
     * Set the filter name.
     *
     * @param filterName the filter name.
     */
    void setFilterName(String filterName);

    /**
     * Set status.
     *
     * @param status the status.
     */
    void setStatus(int status);

    /**
     * {@return the web application}
     */
    WebApplication getWebApplication();

    /**
     * Set the web application.
     *
     * @param webApplication the web application.
     */
    void setWebApplication(WebApplication webApplication);

    /**
     * Is async supported.
     *
     * @return true if it is, false otherwise.
     */
    boolean isAsyncSupported();
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/FilterMapping.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import jakarta.servlet.DispatcherType;
import static jakarta.servlet.DispatcherType.REQUEST;

/**
 * The FilterMapping API.
 *
 * @author Manfred Riem (mriem@manorrock.com)
 */
public interface FilterMapping {

    /**
     * {@return the filter name}
     */
    String getFilterName();

    /**
     * {@return the URL pattern}
     */
    String getUrlPattern();

    /**
     * {@return the dispatcher type}
     * <p>
     * The dispatcher type is the kind of dispatch that the filter
     * mapping applies to. Default is REQUEST, which represents
     * the request from the user to the system.
     * </p>
     */
    default DispatcherType getDispatcherType() {
        return REQUEST;
    }
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/FilterPriority.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

/**
 * The Filter Priority API allows filters that implement this interface to be given priority
 * depending on their priority value.
 *
 * <p>
 * Filters with a lower priority are called before filters with a higher priority. Filters
 * with an explicit priority are called before filters with no priority at all.
 *
 * @author Arjan Tijms
 *
 */
public interface FilterPriority {

    /**
     * Returns the priority of this filter in the filter chain.
     *
     * @return the priority value
     */
    int getPriority();

}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/HandlesTypesManager.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import java.util.Set;

/**
 * The manager that delivers support for the HandlesTypes annotation.
 * 
 * <p>
 *  Whenever the onStartup method of a ServletContainerInitializer is called it
 *  gets passed a set of classes that it expressed interest in. This manager
 *  delivers the way a web application can vend that set of classes. See the
 *  JavaDoc of the ServletContainerInitializer for more information about the
 *  onStartup method.
 * </p>
 * 
 * @author Manfred Riem (mriem@manorrock.com)
 */
public interface HandlesTypesManager {
    
    /**
     * Add the annotated class.
     * 
     * @param annotationClass the annotation class.
     * @param annotatedClass the annotated class.
     */
    void addAnnotatedClass(Class<?> annotationClass, Class<?> annotatedClass);
    
    /**
     * Add the extending class.
     * 
     * @param baseClass the based class.
     * @param extendingClass the extending class.
     */
    void addExtendingClass(Class<?> baseClass, Class<?> extendingClass);
    
    /**
     * Add the implementing class.
     * 
     * @param interfaceClass the interface.
     * @param implementingClass the implementing class.
     */
    void addImplementingClass(Class<?> interfaceClass, Class<?> implementingClass);
    
    /**
     * Get the annotated classes.
     * 
     * @param annotationClass the annotation classes.
     * @return the annotated classes.
     */
    Set<Class<?>> getAnnotatedClasses(Class<?> annotationClass);
    
    /**
     * Get the extending classes.
     * 
     * @param baseClass the base class.
     * @return the set of extending classes.
     */
    Set<Class<?>> getExtendingClasses(Class<?> baseClass);
    
    /**
     * Get the implementing classes.
     * 
     * @param interfaceClass the interface class.
     * @return the set of implementing classes.
     */
    Set<Class<?>> getImplementingClasses(Class<?> interfaceClass);
    
    /**
     * Get the set of classes that either are annotated with the given classes,
     * implement any of the given classes, or extend any of the given classes.
     * 
     * @param classes the set of given classes.
     * @return the set of classes or null if none found.
     */
    Set<Class<?>> getClasses(Set<Class<?>> classes);
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/HttpHeader.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import java.util.Enumeration;

/**
 * The HttpHeader API.
 *
 * @author Manfred Riem (mriem@manorrock.com)
 */
public interface HttpHeader {

    /**
     * Add the value.
     *
     * @param value the value to add.
     */
    void addValue(String value);

    /**
     * {@return the name}
     */
    String getName();

    /**
     * {@return the value}
     */
    String getValue();

    /**
     * {@return the values}
     */
    Enumeration<String> getValues();
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/HttpHeaderManager.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import java.util.Enumeration;

/**
 * The HttpHeaderManager API.
 *
 * @author Manfred Riem (mriem@manorrock.com)
 */
public interface HttpHeaderManager {

    /**
     * Add the header.
     *
     * @param name the name.
     * @param value the value.
     */
    void addHeader(String name, String value);

    /**
     * Contains the given header.
     *
     * @param name the header name.
     * @return true if there, false otherwise.
     */
    boolean containsHeader(String name);

    /**
     * {@return the date header}
     * @param name the header name.
     * @throws IllegalArgumentException when the header could not be converted
     * to a date.
     */
    long getDateHeader(String name) throws IllegalArgumentException;

    /**
     * Get the header.
     *
     * @param name the header name.
     * @return the header value.
     */
    String getHeader(String name);

    /**
     * {@return the header names}
     */
    Enumeration<String> getHeaderNames();

    /**
     * Get the headers.
     *
     * @param name the header name.
     * @return the header values.
     */
    Enumeration<String> getHeaders(String name);

    /**
     * Get the int header.
     *
     * @param name the header name.
     * @return the int value.
     * @throws NumberFormatException when the value could not be converted to an
     * int.
     */
    int getIntHeader(String name) throws NumberFormatException;
    
    /**
     * Remove the given header.
     * 
     * @param name the header name.
     */
    void removeHeader(String name);

    /**
     * Set the header.
     *
     * @param name the name.
     * @param value the value (string).
     */
    void setHeader(String name, String value);
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/HttpSessionManager.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import java.util.EventListener;
import java.util.Set;
import jakarta.servlet.SessionCookieConfig;
import jakarta.servlet.SessionTrackingMode;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

/**
 * The HttpSessionManager API.
 *
 * @author Manfred Riem (mriem@manorrock.com)
 */
public interface HttpSessionManager {

    /**
     * Add a listener.
     *
     * @param <T> the type.
     * @param listener the listener.
     */
    <T extends EventListener> void addListener(T listener);

    /**
     * Attribute added.
     *
     * @param session the HTTP session.
     * @param name the name.
     * @param value the value.
     */
    void attributeAdded(HttpSession session, String name, Object value);

    /**
     * Attribute removed.
     *
     * @param session the HTTP session.
     * @param name the name.
     * @param value the value.
     */
    void attributeRemoved(HttpSession session, String name, Object value);

    /**
     * Attribute replaced.
     *
     * @param session the HTTP session.
     * @param name the name.
     * @param oldValue the old value.
     * @param newValue the new value.
     */
    void attributeReplaced(HttpSession session, String name, Object oldValue, Object newValue);

    /**
     * Change the session id and return it.
     *
     * @param request the request.
     * @return the session id.
     */
    String changeSessionId(HttpServletRequest request);

    /**
     * Create a session.
     *
     * @param request the request.
     * @return the session.
     */
    HttpSession createSession(HttpServletRequest request);

    /**
     * Destroys a session.
     *
     * @param session the HTTP session.
     */
    void destroySession(HttpSession session);

    /**
     * Encode the redirect URL.
     *
     * @param response the HTTP servlet response.
     * @param url the URL.
     * @return the encode URL.
     */
    String encodeRedirectURL(HttpServletResponse response, String url);

    /**
     * Encode the URL.
     *
     * @param response the HTTP servlet response.
     * @param url the URL.
     * @return the encoded URL.
     */
    String encodeURL(HttpServletResponse response, String url);

    /**
     * {@return the default session tracking modes}
     */
    Set<SessionTrackingMode> getDefaultSessionTrackingModes();

    /**
     * {@return the effective session tracking modes}
     */
    Set<SessionTrackingMode> getEffectiveSessionTrackingModes();

    /**
     * {@return the session}
     * @param request the request.
     * @param currentSessionId the current session id.
     */
    HttpSession getSession(HttpServletRequest request, String currentSessionId);

    /**
     * {@return the session cookie config}
     */
    SessionCookieConfig getSessionCookieConfig();

    /**
     * Get the session timeout (in minutes).
     *
     * @return the session timeout.
     */
    int getSessionTimeout();

    /**
     * Is the session manager handling this session?
     *
     * @param sessionId the session id.
     * @return true if there is a session with the given session id.
     */
    boolean hasSession(String sessionId);

    /**
     * Set the session timeout (in minutes).
     *
     * @param timeout the timeout.
     */
    void setSessionTimeout(int timeout);

    /**
     * Set the session tracking modes.
     *
     * @param sessionTrackingModes the session tracking modes.
     */
    void setSessionTrackingModes(Set<SessionTrackingMode> sessionTrackingModes);

    /**
     * Set the web application.
     * 
     * @param webApplication the web application.
     */
    void setWebApplication(WebApplication webApplication);
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/JspManager.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import jakarta.servlet.ServletRegistration;
import jakarta.servlet.descriptor.JspConfigDescriptor;

/**
 * The JspManager API.
 *
 * @author Manfred Riem (mriem@manorrock.com)
 */
public interface JspManager {

    /**
     * Add the JSP file.
     *
     * @param webApplication the web application.
     * @param servletName the servlet name.
     * @param jspFile the jsp file.
     * @return the servlet registration.
     */
    ServletRegistration.Dynamic addJspFile(WebApplication webApplication, String servletName, String jspFile);

    /**
     * {@return the JSP config descriptor}
     */
    JspConfigDescriptor getJspConfigDescriptor();

    /**
     * Set the JspConfigDescriptor.
     * 
     * @param jspConfigDescriptor the JspConfigDescriptor.
     */
    void setJspConfigDescriptor(JspConfigDescriptor jspConfigDescriptor);
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/LocaleEncodingManager.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

/**
 * The LocaleEncodingManager API.
 * 
 * @author Manfred Riem (mriem@manorrock.com)
 */
public interface LocaleEncodingManager {

    /**
     * Add a mapping between a locale and an encoding.
     * 
     * @param locale the locale.
     * @param encoding the encoding.
     */
    void addCharacterEncoding(String locale, String encoding);

    /**
     * Get the encoding for the locale.
     * 
     * @param locale the locale.
     * @return the encoding, otherwise null.
     */
    String getCharacterEncoding(String locale);
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/ModuleLayerProcessor.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

/**
 * The module layer processor
 * @author Thiago Henrique Hupner
 */
public interface ModuleLayerProcessor {

    /**
     * Process the module layer according to the properties
     * @param controller the controller
     */
    void processModuleLayerOptions(ModuleLayer.Controller controller);
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/MultiPartManager.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.Part;
import java.util.Collection;

/**
 * The multi-part manager API.
 *
 * @author Manfred Riem (mriem@manorrock.com)
 */
public interface MultiPartManager {

    /**
     * Get the parts.
     *
     * @param webApplication the web application.
     * @param request the web application request.
     * @return the parts.
     * @throws ServletException when the request is not a multipart/form-data request.
     */
    Collection<Part> getParts(WebApplication webApplication, WebApplicationRequest request) throws ServletException;

    /**
     * Get the part.
     *
     * @param webApplication the web application.
     * @param request the web application request.
     * @param name the name of the part.
     * @return the part, or null if not found.
     * @throws ServletException when the request is not a multipart/form-data request.
     */
    Part getPart(WebApplication webApplication, WebApplicationRequest request, String name) throws ServletException;
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/ObjectInstanceManager.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import jakarta.servlet.Filter;
import jakarta.servlet.Servlet;
import jakarta.servlet.ServletException;
import java.util.EventListener;

/**
 * The object instance manager API.
 *
 * @author Manfred Riem (mriem@manorrock.com)
 */
public interface ObjectInstanceManager {

    /**
     * Create the filter.
     *
     * @param <T> the type.
     * @param filterClass the Filter class.
     * @return the Filter.
     * @throws ServletException when a Servlet error occurs.
     */
    <T extends Filter> T createFilter(Class<T> filterClass) throws ServletException;

    /**
     * Create the listener.
     *
     * @param <T> the type.
     * @param clazz the class.
     * @return the Listener.
     * @throws ServletException when a Servlet error occurs.
     */
    <T extends EventListener> T createListener(Class<T> clazz) throws ServletException;

    /**
     * Create the servlet.
     *
     * @param <T> the type.
     * @param clazz the Servlet class.
     * @return the Servlet.
     * @throws ServletException when a Servlet error occurs.
     */
    <T extends Servlet> T createServlet(Class<T> clazz) throws ServletException;
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/Piranha.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

/**
 * The Piranha API.
 *
 * @author Manfred Riem (mriem@manorrock.com)
 */
public interface Piranha {

    /**
     * Get the configuration.
     * 
     * @return the configuration.
     */
    PiranhaConfiguration getConfiguration();
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/PiranhaBuilder.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

/**
 * The PiranhaBuilder API.
 * 
 * @author Manfred Riem (mriem@manorrock.com)
 * @param <T> the concrete Piranha type.
 */
public interface PiranhaBuilder<T> {

    /**
     * Build the Piranha instance.
     *
     * @return the Piranha instance.
     */
    public T build();
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/PiranhaConfiguration.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import java.io.File;

/**
 * Piranha configuration.
 * 
 * @author Manfred Riem (mriem@manorrock.com)
 */
public interface PiranhaConfiguration {

    /**
     * Get the value as a boolean.
     * 
     * @param key the key.
     * @param defaultValue the default value if the key is not found.
     * @return the value.
     */
    boolean getBoolean(String key, boolean defaultValue);

    /**
     * Get the value as a class.
     * 
     * @param key the key.
     * @return the value.
     */
    Class<?> getClass(String key);
    
    /**
     * Get the value as a File.
     * 
     * @param key the key.
     * @return the value.
     */
    File getFile(String key);
    
    /**
     * Get the value as an int.
     * 
     * @param key the key.
     * @return the value.
     */
    Integer getInteger(String key);
    
    /**
     * Get the value as a long.
     * 
     * @param key the key.
     * @return the value.
     */
    Long getLong(String key);
    
    /**
     * Get the value as a string.
     * 
     * @param key the key.
     * @return the value (or null if not set).
     */
    String getString(String key);
    
    /**
     * Set the boolean value.
     * 
     * @param key the key.
     * @param value the boolean value.
     */
    void setBoolean(String key, Boolean value);

    /**
     * Set the class value.
     * 
     * @param key the key.
     * @param value the class value. 
     */
    void setClass(String key, Class<?> value);
    
    /**
     * Set the File value.
     * 
     * @param key the key.
     * @param value the value.
     */
    void setFile(String key, File value);
    
    /**
     * Set the integer value.
     * 
     * @param key the key.
     * @param value the value. 
     */
    void setInteger(String key, Integer value);
    
    /**
     * Set the long value.
     * 
     * @param key the key.
     * @param value the value. 
     */
    void setLong(String key, Long value);
    
    /**
     * Set the string value.
     * 
     * @param key the key.
     * @param value the value.
     */
    void setString(String key, String value);
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/SecurityConstraint.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import java.util.ArrayList;
import java.util.List;

/**
 * A security constraint.
 * 
 * @author Manfred Riem (mriem@manorrock.com)
 */
public class SecurityConstraint {

    /**
     * Stores the role names.
     */
    private List<String> roleNames;
    
    /**
     * Stores the security web resource collections.
     */
    private List<SecurityWebResourceCollection> securityWebResourceCollections;
    
    /**
     * Stores the transport guarantee.
     */
    private String transportGuarantee;

    /**
     * Constructor.
     */
    public SecurityConstraint() {
        roleNames = new ArrayList<>();
        securityWebResourceCollections = new ArrayList<>();
        transportGuarantee = "NONE";
    }
    
    /**
     * Get the role names.
     * 
     * @return the role names.
     */
    public List<String> getRoleNames() {
        return roleNames;
    }

    /**
     * Get the security web resource collection.
     * 
     * @return the security web resource collection.
     */
    public List<SecurityWebResourceCollection> getSecurityWebResourceCollections() {
        return securityWebResourceCollections;
    }

    /**
     * Get the transport guarantee.
     * 
     * @return the transport guarantee.
     */
    public String getTransportGuarantee() {
        return transportGuarantee;
    }

    /**
     * Set the role names.
     * 
     * @param roleNames the role names.
     */
    public void setRoleNames(List<String> roleNames) {
        this.roleNames = roleNames;
    }

    /**
     * Set the security web resource collections.
     * 
     * @param securityWebResourceCollections the security web resource collections.
     */
    public void setSecurityWebResourceCollections(
            List<SecurityWebResourceCollection> securityWebResourceCollections) {
        this.securityWebResourceCollections = securityWebResourceCollections;
    }

    /**
     * Set the transport guarantee.
     * 
     * @param transportGuarantee the transport guarantee.
     */
    public void setTransportGuarantee(String transportGuarantee) {
        this.transportGuarantee = transportGuarantee;
    }
}


================================================
FILE: core/api/src/main/java/cloud/piranha/core/api/SecurityManager.java
================================================
/*
 * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright notice,
 *      this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. Neither the name of the copyright holder nor the names of its
 *      contributors may be used to endorse or promote products derived from
 *      this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package cloud.piranha.core.api;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * The SecurityManager API.
 *
 * @author Manfred Riem (mriem@manorrock.com)
 * @author Arjan Tijms
 */
public interface SecurityManager {

    /**
     * The enum that qualifies the source of the authentication.
     */
    enum AuthenticateSource {
        /**
         * The container / runtime calls authenticate before a request
         */
        PRE_REQUEST_CONTAINER,
        /**
         * The user (code) has programmatically called authenticate
         */
        MID_REQUEST_USER
    }

    /**
     * Method that bypasses the authentication mechanism installed by the
     * authentication manager and directly invokes an identity store.
     */
    interface UsernamePasswordLoginHandler {

        /**
         * Login.
         *
         * @param request the request.
         * @param username the username.
         * @param password the password.
         * @return the authenticated identity.
         */
        AuthenticatedIdentity login(HttpServletRequest request, String username, String password);
    }

    /**
     * Authenticate the request.
     *
     * @param request the request.
     * @param response the response.
     * @return true if authenticated.
     * @throws IOException when an I/O error occurs.
     * @throws ServletException when a servlet error occurs.
     */
    boolean authenticate(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException;

    /**
     * Authenticate the request.
     *
     * @param request the request.
     * @param response the response.
     * @param source the source or moment from where this authenticate method is
     * called
     * @return true if authenticated.
     * @throws IOException when an I/O error occurs.
     * @throws ServletException when a servlet error occurs.
     */
    default boolean authenticate(HttpServletRequest request, HttpServletResponse response, AuthenticateSource source) throws IOException, ServletException {
        // By default, source and mandatory directive are ignored, and semantics for the 2 parameter
        // version hold.
        // The 2 parameter version is expected to be essentially source = MID_REQUEST_USER
        return authenticate(request, response);
    }

    /**
     * Declare roles.
     *
     * @param roles the roles.
     */
    void declareRoles(String[] roles);

    /**
     * Declare roles.
     *
     * @param roles the roles.
     */
    default void declareRoles(Collection<String> roles) {
        if (roles != null) {
            declareRoles(roles.toArray(String[]::new));
        }
    }

    /**
     * Get the auth method.
     *
     * @return the auth method.
     */
    default String getAuthMethod() {
        return null;
    }

    /**
     * Gets the request object the security system wants to put in place.
     *
     * <p>
     * This method allows the security system (or authentication module being
     * delegated to) a custom or, more likely, wrapped request.
     *
     * @param request the request.
     * @param response the response.
     * @return a request object that the runtime should put into service
     */
    default HttpServletRequest getAuthenticatedRequest(HttpServletRequest request, HttpServletResponse response) {
        return request;
    }

    /**
     * Gets the response object the security system wants to put in place.
     *
     * <p>
     * This method allows the security system (or authentication module being
     * delegated to) a custom or, more likely, wrapped response.
     *
     * @param request the request.
     * @param response the response.
     * @return a response object that the runtime should put into service
     */
    default HttpServletResponse getAuthenticatedResponse(HttpServletRequest request, HttpServletResponse response) {
        return response;
    }

    /**
     * Get if we are denying uncovered HTTP methods.
     *
     * @return true if we are, false otherwise.
     */
    default boolean getDenyUncoveredHttpMethods() {
        return false;
    }

    /**
     * Get the form error page.
     *
     * @return the form error page.
     */
    default String getFormErrorPage() {
        return null;
    }

    /**
     * Get the form login page.
     *
     * @return the form login page.
     */
    default String getFormLoginPage() {
        return null;
    }

    /**
     * Get the realm name.
     *
     * @return the realm name.
     */
    default String getRealmName() {
        return null;
    }

    /**
     * Get the declared roles
     *
     * @return the roles
     */
    Set<String> getRoles();
    
    /**
     * Get the security constraints.
     * 
     * @return the security constraints.
     */
    List<SecurityConstraint> getSecurityConstraints();
    
    /**
     * Get the security role references.
     * 
     * @return the security role references.
     */
    Map<String, List<SecurityRoleReference>> getSecurityRoleReferences();

    /**
     * Get the handler that may be used by the login method to contact an
     * identity store.
     *
     * @return the UsernamePasswordLoginHandler or null if not set.
     */
    default UsernamePasswordLoginHandler getUsernamePasswordLoginHandler() {
        return null;
    }

    /**
     * Get the web application.
     *
     * @return the web application.
     */
    WebApplication getWebApplication();

    /**
     * Check if the current caller (which can be the anonymous caller) is
     * authorized to access the requested resource.
     *
     * <p>
     * If th
Download .txt
gitextract_k7aup1uh/

├── .github/
│   ├── FUNDING.yml
│   ├── dependabot.yml
│   └── workflows/
│       ├── current.yml
│       ├── docs.yml
│       ├── experimental.yml
│       ├── pr.yml
│       ├── release.yml
│       ├── stale.yml
│       ├── tck-coreprofile.yml
│       └── trigger.yml
├── .gitignore
├── CODE_CONVENTIONS.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── RELEASE.md
├── SECURITY.md
├── arquillian/
│   ├── managed/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   ├── cloud/
│   │       │   │   │   └── piranha/
│   │       │   │   │       └── arquillian/
│   │       │   │   │           └── managed/
│   │       │   │   │               ├── ManagedPiranhaContainer.java
│   │       │   │   │               ├── ManagedPiranhaContainerConfiguration.java
│   │       │   │   │               └── ManagedPiranhaContainerExtension.java
│   │       │   │   └── module-info.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── org.jboss.arquillian.core.spi.LoadableExtension
│   │       └── test/
│   │           ├── java/
│   │           │   └── cloud/
│   │           │       └── piranha/
│   │           │           └── arquillian/
│   │           │               └── managed/
│   │           │                   ├── ManagedPiranhaContainerConfigurationTest.java
│   │           │                   ├── ManagedPiranhaContainerExtensionTest.java
│   │           │                   └── ManagedPiranhaContainerTest.java
│   │           └── webapp/
│   │               └── test/
│   │                   └── WEB-INF/
│   │                       └── web.xml
│   ├── pom.xml
│   └── server/
│       ├── pom.xml
│       └── src/
│           └── main/
│               ├── java/
│               │   ├── cloud/
│               │   │   └── piranha/
│               │   │       └── arquillian/
│               │   │           └── server/
│               │   │               ├── PiranhaServerDeployableContainer.java
│               │   │               └── PiranhaServerLoadableExtension.java
│               │   └── module-info.java
│               └── resources/
│                   └── META-INF/
│                       └── services/
│                           └── org.jboss.arquillian.core.spi.LoadableExtension
├── bom/
│   └── pom.xml
├── core/
│   ├── api/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── core/
│   │       │       │           └── api/
│   │       │       │               ├── AnnotationInfo.java
│   │       │       │               ├── AnnotationManager.java
│   │       │       │               ├── AsyncDispatcher.java
│   │       │       │               ├── AsyncManager.java
│   │       │       │               ├── AttributeManager.java
│   │       │       │               ├── AuthenticatedIdentity.java
│   │       │       │               ├── CurrentRequestHolder.java
│   │       │       │               ├── DispatcherManager.java
│   │       │       │               ├── ErrorPageManager.java
│   │       │       │               ├── FilterEnvironment.java
│   │       │       │               ├── FilterMapping.java
│   │       │       │               ├── FilterPriority.java
│   │       │       │               ├── HandlesTypesManager.java
│   │       │       │               ├── HttpHeader.java
│   │       │       │               ├── HttpHeaderManager.java
│   │       │       │               ├── HttpSessionManager.java
│   │       │       │               ├── JspManager.java
│   │       │       │               ├── LocaleEncodingManager.java
│   │       │       │               ├── ModuleLayerProcessor.java
│   │       │       │               ├── MultiPartManager.java
│   │       │       │               ├── ObjectInstanceManager.java
│   │       │       │               ├── Piranha.java
│   │       │       │               ├── PiranhaBuilder.java
│   │       │       │               ├── PiranhaConfiguration.java
│   │       │       │               ├── SecurityConstraint.java
│   │       │       │               ├── SecurityManager.java
│   │       │       │               ├── SecurityRoleReference.java
│   │       │       │               ├── SecurityWebResourceCollection.java
│   │       │       │               ├── ServletEnvironment.java
│   │       │       │               ├── ServletInvocation.java
│   │       │       │               ├── ServletRequestManager.java
│   │       │       │               ├── WebApplication.java
│   │       │       │               ├── WebApplicationClassLoader.java
│   │       │       │               ├── WebApplicationExtension.java
│   │       │       │               ├── WebApplicationExtensionContext.java
│   │       │       │               ├── WebApplicationInputStream.java
│   │       │       │               ├── WebApplicationManager.java
│   │       │       │               ├── WebApplicationOutputStream.java
│   │       │       │               ├── WebApplicationPrintWriter.java
│   │       │       │               ├── WebApplicationRequest.java
│   │       │       │               ├── WebApplicationRequestMapper.java
│   │       │       │               ├── WebApplicationRequestMapping.java
│   │       │       │               ├── WebApplicationResponse.java
│   │       │       │               ├── WebApplicationServer.java
│   │       │       │               ├── WebApplicationServerRequestMapper.java
│   │       │       │               └── WelcomeFileManager.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── core/
│   │                           └── api/
│   │                               └── AttributeManagerTest.java
│   ├── impl/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── core/
│   │       │       │           └── impl/
│   │       │       │               ├── AsyncHttpDispatchWrapper.java
│   │       │       │               ├── AsyncNonHttpDispatchWrapper.java
│   │       │       │               ├── CookieParser.java
│   │       │       │               ├── DefaultAnnotationManager.java
│   │       │       │               ├── DefaultAsyncContext.java
│   │       │       │               ├── DefaultAsyncDispatcher.java
│   │       │       │               ├── DefaultAsyncManager.java
│   │       │       │               ├── DefaultAttributeManager.java
│   │       │       │               ├── DefaultAuthenticatedIdentity.java
│   │       │       │               ├── DefaultCurrentRequestHolder.java
│   │       │       │               ├── DefaultDispatcherManager.java
│   │       │       │               ├── DefaultErrorPageManager.java
│   │       │       │               ├── DefaultFilterChain.java
│   │       │       │               ├── DefaultFilterEnvironment.java
│   │       │       │               ├── DefaultFilterMapping.java
│   │       │       │               ├── DefaultHttpHeader.java
│   │       │       │               ├── DefaultHttpHeaderManager.java
│   │       │       │               ├── DefaultHttpServletMapping.java
│   │       │       │               ├── DefaultHttpSession.java
│   │       │       │               ├── DefaultHttpSessionManager.java
│   │       │       │               ├── DefaultInvocationFinder.java
│   │       │       │               ├── DefaultJspConfigDescriptor.java
│   │       │       │               ├── DefaultJspManager.java
│   │       │       │               ├── DefaultLocaleEncodingManager.java
│   │       │       │               ├── DefaultModuleFinder.java
│   │       │       │               ├── DefaultModuleLayerProcessor.java
│   │       │       │               ├── DefaultModuleReader.java
│   │       │       │               ├── DefaultModuleReference.java
│   │       │       │               ├── DefaultMultiPartManager.java
│   │       │       │               ├── DefaultNamedRequestDispatcher.java
│   │       │       │               ├── DefaultObjectInstanceManager.java
│   │       │       │               ├── DefaultPiranha.java
│   │       │       │               ├── DefaultPiranhaBuilder.java
│   │       │       │               ├── DefaultPiranhaConfiguration.java
│   │       │       │               ├── DefaultPushBuilder.java
│   │       │       │               ├── DefaultSecurityManager.java
│   │       │       │               ├── DefaultServlet.java
│   │       │       │               ├── DefaultServletConnection.java
│   │       │       │               ├── DefaultServletEnvironment.java
│   │       │       │               ├── DefaultServletInvocation.java
│   │       │       │               ├── DefaultServletRequestDispatcher.java
│   │       │       │               ├── DefaultServletRequestManager.java
│   │       │       │               ├── DefaultTaglibDescriptor.java
│   │       │       │               ├── DefaultWebApplication.java
│   │       │       │               ├── DefaultWebApplicationBuilder.java
│   │       │       │               ├── DefaultWebApplicationClassLoader.java
│   │       │       │               ├── DefaultWebApplicationExtensionContext.java
│   │       │       │               ├── DefaultWebApplicationInputStream.java
│   │       │       │               ├── DefaultWebApplicationManager.java
│   │       │       │               ├── DefaultWebApplicationOutputStream.java
│   │       │       │               ├── DefaultWebApplicationPrintWriter.java
│   │       │       │               ├── DefaultWebApplicationRequest.java
│   │       │       │               ├── DefaultWebApplicationRequestBuilder.java
│   │       │       │               ├── DefaultWebApplicationRequestMapper.java
│   │       │       │               ├── DefaultWebApplicationRequestMapping.java
│   │       │       │               ├── DefaultWebApplicationResponse.java
│   │       │       │               ├── DefaultWebApplicationResponseBuilder.java
│   │       │       │               ├── DefaultWebConnection.java
│   │       │       │               └── WarFileExtractor.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           ├── java/
│   │           │   └── cloud/
│   │           │       └── piranha/
│   │           │           └── core/
│   │           │               └── impl/
│   │           │                   ├── AsyncContextTest.java
│   │           │                   ├── CookieParserTest.java
│   │           │                   ├── DefaultAnnotationManagerTest.java
│   │           │                   ├── DefaultErrorPageManagerTest.java
│   │           │                   ├── DefaultFilterEnvironmentTest.java
│   │           │                   ├── DefaultHttpHeaderManagerTest.java
│   │           │                   ├── DefaultPiranhaConfigurationTest.java
│   │           │                   ├── DefaultPushBuilderTest.java
│   │           │                   ├── DefaultSecurityManagerTest.java
│   │           │                   ├── DefaultServletEnvironmentTest.java
│   │           │                   ├── DefaultWebApplicationBuilderTest.java
│   │           │                   ├── DefaultWebApplicationClassLoaderTest.java
│   │           │                   ├── DefaultWebApplicationExtensionContextTest.java
│   │           │                   ├── DefaultWebApplicationManagerTest.java
│   │           │                   ├── DefaultWebApplicationOutputStreamTest.java
│   │           │                   ├── DefaultWebApplicationRequestMapperTest.java
│   │           │                   ├── DefaultWebApplicationRequestMappingTest.java
│   │           │                   ├── DefaultWebApplicationRequestTest.java
│   │           │                   ├── DefaultWebApplicationResponseTest.java
│   │           │                   ├── DefaultWebApplicationTest.java
│   │           │                   ├── DefaultWebConnectionTest.java
│   │           │                   ├── FilterTest.java
│   │           │                   ├── HttpSessionTest.java
│   │           │                   ├── ReadListenerTest.java
│   │           │                   ├── RequestDispatcherTest.java
│   │           │                   ├── ServletContextAttributeListenerTest.java
│   │           │                   ├── ServletInputStreamTest.java
│   │           │                   ├── ServletRegistrationTest.java
│   │           │                   ├── ServletRequestAttributeListenerTest.java
│   │           │                   ├── ServletTest.java
│   │           │                   ├── TestChat1Servlet.java
│   │           │                   ├── TestChat2Servlet.java
│   │           │                   ├── TestEcho1Servlet.java
│   │           │                   ├── TestEcho2Servlet.java
│   │           │                   ├── TestHttpServerRequest.java
│   │           │                   ├── TestHttpServerResponse.java
│   │           │                   ├── TestIOExceptionServlet.java
│   │           │                   ├── TestInclude2Servlet.java
│   │           │                   ├── TestInclude3Servlet.java
│   │           │                   ├── TestInclude4Servlet.java
│   │           │                   ├── TestIncludeServlet.java
│   │           │                   ├── TestRuntimeExceptionServlet.java
│   │           │                   ├── TestSnoopServlet.java
│   │           │                   ├── TestWebApplicationRequest.java
│   │           │                   ├── TestWebApplicationResponse.java
│   │           │                   └── WriteListenerTest.java
│   │           └── webapp/
│   │               └── resourcepaths/
│   │                   ├── catalog/
│   │                   │   ├── index.html
│   │                   │   ├── offers/
│   │                   │   │   ├── books.html
│   │                   │   │   └── music.html
│   │                   │   └── products.html
│   │                   ├── customer/
│   │                   │   └── login.jsp
│   │                   └── welcome.html
│   └── pom.xml
├── debug/
│   ├── modules.sh
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               ├── cloud/
│               │   └── piranha/
│               │       └── debug/
│               │           └── Debug.java
│               └── module-info.java
├── dist/
│   ├── coreprofile/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── dist/
│   │       │       │           └── coreprofile/
│   │       │       │               └── CoreProfilePiranhaMain.java
│   │       │       └── module-info.java
│   │       └── site/
│   │           ├── markdown/
│   │           │   ├── create_a_json_rest_service.md
│   │           │   ├── create_a_rest_service.md
│   │           │   ├── debugging_a_rest_service_with_netbeans.md
│   │           │   ├── debugging_a_rest_service_with_vscode.md
│   │           │   ├── index.md
│   │           │   ├── testing_with_junit5_and_arquillian.md
│   │           │   └── using_project_crac.md
│   │           └── site.xml
│   ├── isolated/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── assembly/
│   │       │   │   └── zip.xml
│   │       │   ├── docker/
│   │       │   │   └── Dockerfile
│   │       │   ├── java/
│   │       │   │   ├── cloud/
│   │       │   │   │   └── piranha/
│   │       │   │   │       └── dist/
│   │       │   │   │           └── isolated/
│   │       │   │   │               └── IsolatedPiranha.java
│   │       │   │   └── module-info.java
│   │       │   └── zip/
│   │       │       ├── etc/
│   │       │       │   ├── keystore.jks
│   │       │       │   └── logging.properties
│   │       │       ├── tmp/
│   │       │       │   └── README
│   │       │       └── webapps/
│   │       │           └── README
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── dist/
│   │                           └── isolated/
│   │                               └── IsolatedPiranhaIT.java
│   ├── micro/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── docker/
│   │       │   │   └── Dockerfile
│   │       │   ├── java/
│   │       │   │   ├── cloud/
│   │       │   │   │   └── piranha/
│   │       │   │   │       └── dist/
│   │       │   │   │           └── micro/
│   │       │   │   │               ├── MicroBootstrap.java
│   │       │   │   │               └── package-info.java
│   │       │   │   └── module-info.java
│   │       │   └── javadoc/
│   │       │       └── cloud.piranha.dist.micro/
│   │       │           └── cloud/
│   │       │               └── piranha/
│   │       │                   └── dist/
│   │       │                       └── micro/
│   │       │                           └── doc-files/
│   │       │                               └── request-response.pptx
│   │       ├── site/
│   │       │   ├── markdown/
│   │       │   │   ├── create_a_hello_world_web_application.md
│   │       │   │   └── index.md
│   │       │   └── site.xml
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── dist/
│   │                           └── micro/
│   │                               └── MicroPiranhaIT.java
│   ├── microprofile/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── docker/
│   │           │   └── Dockerfile
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── dist/
│   │               │           └── microprofile/
│   │               │               └── MicroProfilePiranhaMain.java
│   │               └── module-info.java
│   ├── platform/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── assembly/
│   │       │   │   └── zip.xml
│   │       │   ├── docker/
│   │       │   │   └── Dockerfile
│   │       │   ├── java/
│   │       │   │   ├── cloud/
│   │       │   │   │   └── piranha/
│   │       │   │   │       └── dist/
│   │       │   │   │           └── platform/
│   │       │   │   │               ├── PlatformPiranhaMain.java
│   │       │   │   │               └── PlatformWebApplication.java
│   │       │   │   └── module-info.java
│   │       │   └── zip/
│   │       │       ├── etc/
│   │       │       │   ├── keystore.jks
│   │       │       │   ├── logging.properties
│   │       │       │   └── truststore.jks
│   │       │       ├── tmp/
│   │       │       │   └── README
│   │       │       └── webapps/
│   │       │           └── README
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── dist/
│   │                           └── platform/
│   │                               ├── PlatformPiranhaBuilderTest.java
│   │                               └── PlatformPiranhaIT.java
│   ├── pom.xml
│   ├── server/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── assembly/
│   │       │   │   └── zip.xml
│   │       │   ├── docker/
│   │       │   │   └── Dockerfile
│   │       │   ├── java/
│   │       │   │   ├── cloud/
│   │       │   │   │   └── piranha/
│   │       │   │   │       └── dist/
│   │       │   │   │           └── server/
│   │       │   │   │               ├── ServerPiranhaMain.java
│   │       │   │   │               └── ServerWebApplication.java
│   │       │   │   └── module-info.java
│   │       │   └── zip/
│   │       │       ├── etc/
│   │       │       │   ├── keystore.jks
│   │       │       │   ├── logging.properties
│   │       │       │   └── truststore.jks
│   │       │       ├── tmp/
│   │       │       │   └── README
│   │       │       └── webapps/
│   │       │           └── README
│   │       ├── site/
│   │       │   ├── markdown/
│   │       │   │   ├── create_a_hello_world_web_application.md
│   │       │   │   └── index.md
│   │       │   └── site.xml
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── dist/
│   │                           └── server/
│   │                               ├── ServerPiranhaBuilderTest.java
│   │                               └── ServerPiranhaIT.java
│   ├── servlet/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── docker/
│   │       │   │   └── Dockerfile
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── dist/
│   │       │       │           └── servlet/
│   │       │       │               └── ServletPiranhaMain.java
│   │       │       └── module-info.java
│   │       └── site/
│   │           ├── markdown/
│   │           │   ├── create_a_hello_world_web_application.md
│   │           │   ├── create_a_jakarta_pages_application.md
│   │           │   ├── create_a_websocket_application.md
│   │           │   ├── index.md
│   │           │   └── run_a_web_application_on_crac.md
│   │           └── site.xml
│   └── webprofile/
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   ├── docker/
│           │   │   └── Dockerfile
│           │   └── java/
│           │       ├── cloud/
│           │       │   └── piranha/
│           │       │       └── dist/
│           │       │           └── webprofile/
│           │       │               └── WebProfilePiranhaMain.java
│           │       └── module-info.java
│           └── site/
│               ├── markdown/
│               │   ├── create_a_faces_application.md
│               │   ├── create_a_hello_world_application.md
│               │   ├── create_a_jakarta_rest_service.md
│               │   ├── create_a_pages_application.md
│               │   ├── index.md
│               │   ├── testing_with_junit5_and_playwright.md
│               │   └── testing_with_our_container_image.md
│               └── site.xml
├── docker/
│   ├── coreprofile/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── docker/
│   │       │       └── Dockerfile
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── docker/
│   │                           └── coreprofile/
│   │                               └── CoreProfileIT.java
│   └── pom.xml
├── embedded/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   ├── cloud/
│       │   │   │   └── piranha/
│       │   │   │       └── embedded/
│       │   │   │           ├── EmbeddedPiranha.java
│       │   │   │           ├── EmbeddedPiranhaBuilder.java
│       │   │   │           ├── EmbeddedRequest.java
│       │   │   │           ├── EmbeddedRequestBuilder.java
│       │   │   │           ├── EmbeddedResponse.java
│       │   │   │           ├── EmbeddedResponseBuilder.java
│       │   │   │           └── package-info.java
│       │   │   └── module-info.java
│       │   └── javadoc/
│       │       └── cloud.piranha.embedded/
│       │           └── cloud/
│       │               └── piranha/
│       │                   └── embedded/
│       │                       └── doc-files/
│       │                           └── request-response.pptx
│       ├── site/
│       │   ├── markdown/
│       │   │   ├── create_a_hello_world_web_application.md
│       │   │   ├── create_a_piranha_embedded_graalvm_application.md
│       │   │   ├── create_an_embedded_jlink_application.md
│       │   │   ├── index.md
│       │   │   └── running_piranha_embedded_with_spring_boot.md
│       │   └── site.xml
│       └── test/
│           └── java/
│               └── cloud/
│                   └── piranha/
│                       └── embedded/
│                           ├── EmbeddedPiranhaBuilderTest.java
│                           ├── EmbeddedPiranhaTest.java
│                           ├── EmbeddedRequestBuilderTest.java
│                           ├── EmbeddedRequestTest.java
│                           └── EmbeddedResponseBuilderTest.java
├── extension/
│   ├── angus/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── angus/
│   │               │               └── AngusExtension.java
│   │               └── module-info.java
│   ├── annotationscan/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── annotationscan/
│   │       │       │               ├── AnnotationScanExtension.java
│   │       │       │               ├── AnnotationScanInitializer.java
│   │       │       │               └── internal/
│   │       │       │                   ├── InternalAnnotationScanAnnotationInfo.java
│   │       │       │                   └── InternalAnnotationScanAnnotationManager.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── annotationscan/
│   │                               ├── AnnotationScanExtensionTest.java
│   │                               ├── TestAnnotation.java
│   │                               ├── TestServlet.java
│   │                               ├── TestWithHandlesTypesInitializer.java
│   │                               └── internal/
│   │                                   └── InternalAnnotationScanAnnotationManagerTest.java
│   ├── annotationscan-classfile/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── annotationscan/
│   │       │       │               └── classfile/
│   │       │       │                   ├── ClassfileAnnotationScanExtension.java
│   │       │       │                   ├── ClassfileAnnotationScanInitializer.java
│   │       │       │                   └── internal/
│   │       │       │                       ├── InternalAnnotationScanAnnotationInfo.java
│   │       │       │                       └── InternalAnnotationScanAnnotationManager.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── annotationscan/
│   │                               └── classfile/
│   │                                   ├── AnnotationScanExtensionTest.java
│   │                                   ├── TestAnnotation.java
│   │                                   ├── TestServlet.java
│   │                                   ├── TestWithHandlesTypesInitializer.java
│   │                                   └── internal/
│   │                                       └── InternalAnnotationScanAnnotationManagerTest.java
│   ├── bytesstreamhandler/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── bytesstreamhandler/
│   │       │       │               ├── BytesStreamHandlerExtension.java
│   │       │       │               ├── BytesStreamHandlerServletContextListener.java
│   │       │       │               └── BytesStreamHandlerServletRequestListener.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── bytesstreamhandler/
│   │                               └── BytesStreamHandlerExtensionTest.java
│   ├── concurro/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── concurro/
│   │               │               └── ConcurroExtension.java
│   │               └── module-info.java
│   ├── coreprofile/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── coreprofile/
│   │               │               └── CoreProfileExtension.java
│   │               └── module-info.java
│   ├── datasource/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── datasource/
│   │       │       │               ├── DataSourceWrapper.java
│   │       │       │               ├── DefaultDatasourceExtension.java
│   │       │       │               ├── DefaultDatasourceInitializer.java
│   │       │       │               ├── TxJoiningDataSource.java
│   │       │       │               └── XADataSourceWrapper.java
│   │       │       └── module-info.java
│   │       └── site/
│   │           ├── markdown/
│   │           │   └── index.md
│   │           └── site.xml
│   ├── declared/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── declared/
│   │       │       │               ├── DeclaredExtension.java
│   │       │       │               └── internal/
│   │       │       │                   └── InternalDeclaredInitializer.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           ├── declared/
│   │                           │   └── DeclaredExtensionTest.java
│   │                           └── handlestypes/
│   │                               └── internal/
│   │                                   └── InternalDeclaredInitializerTest.java
│   ├── eclipselink/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   ├── cloud/
│   │           │   │   └── piranha/
│   │           │   │       └── extension/
│   │           │   │           └── eclipselink/
│   │           │   │               ├── EclipseLinkCdiExtension.java
│   │           │   │               ├── EclipseLinkExtension.java
│   │           │   │               ├── EclipseLinkInitializer.java
│   │           │   │               ├── EntityManagerFactoryCreator.java
│   │           │   │               ├── EntityManagerProducer.java
│   │           │   │               ├── NonTxEntityManagerHolder.java
│   │           │   │               ├── PiranhaEntityManager.java
│   │           │   │               ├── TxEntityManagerHolder.java
│   │           │   │               └── wrappers/
│   │           │   │                   └── EntityManagerWrapper.java
│   │           │   └── module-info.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── jakarta.enterprise.inject.spi.Extension
│   ├── epicyro/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── epicyro/
│   │       │       │               ├── AuthenticationFilter.java
│   │       │       │               ├── AuthenticationInitializer.java
│   │       │       │               └── DoNothingServerAuthModule.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── epicyro/
│   │                               └── AuthenticationInitializerTest.java
│   ├── exousia/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── exousia/
│   │               │               ├── AuthorizationFilter.java
│   │               │               ├── AuthorizationInitializer.java
│   │               │               ├── AuthorizationPostInitializer.java
│   │               │               ├── AuthorizationPreFilter.java
│   │               │               ├── AuthorizationPreInitializer.java
│   │               │               ├── PiranhaPrincipalMapper.java
│   │               │               └── PiranhaToExousiaConverter.java
│   │               └── module-info.java
│   ├── expressly/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── expressly/
│   │               │               └── ExpresslyExtension.java
│   │               └── module-info.java
│   ├── fileupload/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── fileupload/
│   │       │       │               ├── FileUploadExtension.java
│   │       │       │               ├── FileUploadMultiPart.java
│   │       │       │               ├── FileUploadMultiPartInitializer.java
│   │       │       │               └── FileUploadMultiPartManager.java
│   │       │       └── module-info.java
│   │       ├── site/
│   │       │   ├── markdown/
│   │       │   │   └── index.md
│   │       │   └── site.xml
│   │       └── test/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── fileupload/
│   │               │               └── tests/
│   │               │                   └── FileUploadMultiPartManagerTest.java
│   │               └── module-info.java
│   ├── handlestypes/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── handlestypes/
│   │       │       │               ├── HandlesTypesExtension.java
│   │       │       │               └── internal/
│   │       │       │                   ├── InternalHandlesTypesInitializer.java
│   │       │       │                   └── InternalHandlesTypesManager.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── handlestypes/
│   │                               ├── HandlesTypesExtensionTest.java
│   │                               └── internal/
│   │                                   ├── InternalHandlesTypesInitializerTest.java
│   │                                   ├── InternalHandlesTypesManagerTest.java
│   │                                   ├── TestA.java
│   │                                   ├── TestB.java
│   │                                   ├── TestC.java
│   │                                   ├── TestD.java
│   │                                   └── TestServletContainerInitializer.java
│   ├── hazelcast/
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   ├── cloud/
│   │       │   │   │   └── piranha/
│   │       │   │   │       └── extension/
│   │       │   │   │           └── hazelcast/
│   │       │   │   │               ├── HazelcastHttpSession.java
│   │       │   │   │               ├── HazelcastHttpSessionManager.java
│   │       │   │   │               └── HazelcastInitializer.java
│   │       │   │   └── module-info.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── jakarta.servlet.ServletContainerInitializer
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── hazelcast/
│   │                               └── HazelcastInitializerTest.java
│   ├── herring/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── herring/
│   │       │       │               ├── HerringExtension.java
│   │       │       │               ├── HerringInitialContextFactory.java
│   │       │       │               └── HerringServletRequestListener.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── herring/
│   │                               └── HerringExtensionTest.java
│   ├── hibernate-validator/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── hibernate/
│   │               │               └── validator/
│   │               │                   └── HibernateValidatorExtension.java
│   │               └── module-info.java
│   ├── jaxb/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── jaxb/
│   │               │               └── JAXBExtension.java
│   │               └── module-info.java
│   ├── jersey/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   ├── cloud/
│   │           │   │   └── piranha/
│   │           │   │       └── extension/
│   │           │   │           └── jersey/
│   │           │   │               ├── JerseyExtension.java
│   │           │   │               ├── JerseySourceBean.java
│   │           │   │               └── JerseyTargetBean.java
│   │           │   └── module-info.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── jakarta.enterprise.inject.spi.Extension
│   ├── jstl/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── jstl/
│   │               │               └── JSTLExtension.java
│   │               └── module-info.java
│   ├── micro/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   ├── cloud/
│   │           │   │   └── piranha/
│   │           │   │       └── extension/
│   │           │   │           └── micro/
│   │           │   │               └── MicroExtension.java
│   │           │   └── module-info.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── cloud.piranha.core.api.WebApplicationExtension
│   ├── microprofile/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── microprofile/
│   │               │               └── MicroProfileExtension.java
│   │               └── module-info.java
│   ├── mojarra/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── mojarra/
│   │               │               └── MojarraExtension.java
│   │               └── module-info.java
│   ├── naming-cdi/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── naming/
│   │       │       │               └── cdi/
│   │       │       │                   ├── DefaultInitialContextFactory.java
│   │       │       │                   ├── NamingExtension.java
│   │       │       │                   └── NamingServletRequestListener.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── naming/
│   │                               └── NamingExtensionTest.java
│   ├── omnifaces-config/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── omnifaces/
│   │               │               └── config/
│   │               │                   └── ConfigExtension.java
│   │               └── module-info.java
│   ├── omnifaces-microprofile-jwt-auth/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── omnifaces/
│   │               │               └── microprofile/
│   │               │                   └── jwt/
│   │               │                       └── auth/
│   │               │                           └── MicroProfileJWTAuthExtension.java
│   │               └── module-info.java
│   ├── omnifaces-omniservices/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── omniservices/
│   │               │               └── OmniServicesExtension.java
│   │               └── module-info.java
│   ├── omnifaces-omniutils/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── omniutils/
│   │               │               └── OmniUtilsExtension.java
│   │               └── module-info.java
│   ├── omnifish-omnibeans/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── omnibeans/
│   │               │               └── OmniBeansExtension.java
│   │               └── module-info.java
│   ├── omnifish-transact/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── transact/
│   │               │               ├── TransactExtension.java
│   │               │               ├── TransactFilter.java
│   │               │               └── TransactInitializer.java
│   │               └── module-info.java
│   ├── parsson/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── parsson/
│   │               │               └── ParssonExtension.java
│   │               └── module-info.java
│   ├── platform/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── platform/
│   │               │               └── PlatformExtension.java
│   │               └── module-info.java
│   ├── policy/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── policy/
│   │       │       │               ├── PolicyExtension.java
│   │       │       │               └── internal/
│   │       │       │                   ├── InternalPolicyServletContextListener.java
│   │       │       │                   ├── InternalPolicyServletRequestListener.java
│   │       │       │                   └── InternalPolicyThreadLocal.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── policy/
│   │                               └── PolicyExtensionTest.java
│   ├── pom.xml
│   ├── scinitializer/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── scinitializer/
│   │       │       │               └── ServletContainerInitializerExtension.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── scinitializer/
│   │                               └── ServletContainerInitializerExtensionTest.java
│   ├── security-jakarta/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── security/
│   │               │               └── jakarta/
│   │               │                   ├── JakartaSecurityAllInitializer.java
│   │               │                   └── JakartaSecurityExtension.java
│   │               └── module-info.java
│   ├── security-servlet/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── security/
│   │       │       │               └── servlet/
│   │       │       │                   ├── ServletSecurityAllInitializer.java
│   │       │       │                   ├── ServletSecurityExtension.java
│   │       │       │                   ├── ServletSecurityManager.java
│   │       │       │                   ├── ServletSecurityManagerExtension.java
│   │       │       │                   ├── ServletSecurityManagerInitializer.java
│   │       │       │                   └── ServletSecurityPrincipal.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── security/
│   │                               └── servlet/
│   │                                   ├── ServletSecurityManagerExtensionTest.java
│   │                                   ├── ServletSecurityManagerInitializerTest.java
│   │                                   └── ServletSecurityManagerTest.java
│   ├── servlet/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── servlet/
│   │               │               └── ServletExtension.java
│   │               └── module-info.java
│   ├── servletannotations/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── servletannotations/
│   │       │       │               ├── ServletAnnotationsExtension.java
│   │       │       │               └── ServletAnnotationsInitializer.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           ├── java/
│   │           │   └── cloud/
│   │           │       └── piranha/
│   │           │           └── extension/
│   │           │               └── servletannotations/
│   │           │                   ├── ServletAnnotationsExtensionTest.java
│   │           │                   ├── Test2Filter.java
│   │           │                   ├── Test2Servlet.java
│   │           │                   ├── Test3Filter.java
│   │           │                   ├── Test3Servlet.java
│   │           │                   ├── Test4Filter.java
│   │           │                   ├── Test4Servlet.java
│   │           │                   ├── Test5Servlet.java
│   │           │                   ├── TestFilter.java
│   │           │                   ├── TestListener.java
│   │           │                   ├── TestServlet.java
│   │           │                   └── WebServletTest.java
│   │           └── webapp/
│   │               └── webservlet/
│   │                   └── WEB-INF/
│   │                       └── web.xml
│   ├── soteria/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── soteria/
│   │       │       │               ├── IdentityStoreLoginHandler.java
│   │       │       │               ├── SoteriaInitializer.java
│   │       │       │               └── SoteriaPreCDIInitializer.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           ├── java/
│   │           │   └── cloud/
│   │           │       └── piranha/
│   │           │           └── extension/
│   │           │               └── soteria/
│   │           │                   ├── IdentityStoreLoginHandlerTest.java
│   │           │                   ├── SoteriaInitializerNoCdiTest.java
│   │           │                   ├── SoteriaInitializerTest.java
│   │           │                   ├── SoteriaPreCDIInitializerTest.java
│   │           │                   └── TestIdentityStore.java
│   │           └── webapp/
│   │               └── WEB-INF/
│   │                   └── beans.xml
│   ├── tempdir/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── tempdir/
│   │       │       │               ├── TempDirExtension.java
│   │       │       │               └── TempDirServletContainerInitializer.java
│   │       │       └── module-info.java
│   │       ├── site/
│   │       │   ├── markdown/
│   │       │   │   └── index.md
│   │       │   └── site.xml
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── tempdir/
│   │                               ├── TempDirExtensionTest.java
│   │                               └── TempDirServletContainerInitializerTest.java
│   ├── tyrus/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── tyrus/
│   │       │       │               └── TyrusExtension.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── extension/
│   │                           └── tyrus/
│   │                               └── TyrusExtensionTest.java
│   ├── wasp/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── wasp/
│   │       │       │               ├── WaspExtension.java
│   │       │       │               ├── WaspInitializer.java
│   │       │       │               ├── WaspJspManager.java
│   │       │       │               ├── WaspJspManagerExtension.java
│   │       │       │               ├── WaspJspManagerInitializer.java
│   │       │       │               └── WaspServlet.java
│   │       │       └── module-info.java
│   │       ├── site/
│   │       │   └── site.xml
│   │       └── test/
│   │           ├── java/
│   │           │   └── cloud/
│   │           │       └── piranha/
│   │           │           └── extension/
│   │           │               └── wasp/
│   │           │                   ├── JspDescriptorTest.java
│   │           │                   ├── JspWriterTest.java
│   │           │                   ├── WaspExtensionTest.java
│   │           │                   ├── WaspInitializerTest.java
│   │           │                   └── WaspJspManagerExtensionTest.java
│   │           └── webapp/
│   │               ├── jspwriter/
│   │               │   ├── clearBuffer.jsp
│   │               │   ├── close.jsp
│   │               │   ├── close2.jsp
│   │               │   ├── close3.jsp
│   │               │   └── close4.jsp
│   │               └── waspinitializer/
│   │                   └── WEB-INF/
│   │                       ├── classes/
│   │                       │   └── KEEPME
│   │                       └── lib/
│   │                           └── KEEPME
│   ├── webprofile/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── extension/
│   │               │           └── webprofile/
│   │               │               └── WebProfileExtension.java
│   │               └── module-info.java
│   ├── webxml/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── webxml/
│   │       │       │               ├── WebXmlExtension.java
│   │       │       │               ├── WebXmlInitializer.java
│   │       │       │               └── internal/
│   │       │       │                   ├── WebXml.java
│   │       │       │                   ├── WebXmlContextParam.java
│   │       │       │                   ├── WebXmlDataSource.java
│   │       │       │                   ├── WebXmlErrorPage.java
│   │       │       │                   ├── WebXmlFilter.java
│   │       │       │                   ├── WebXmlFilterInitParam.java
│   │       │       │                   ├── WebXmlFilterMapping.java
│   │       │       │                   ├── WebXmlJspConfig.java
│   │       │       │                   ├── WebXmlJspConfigTaglib.java
│   │       │       │                   ├── WebXmlListener.java
│   │       │       │                   ├── WebXmlLoginConfig.java
│   │       │       │                   ├── WebXmlManager.java
│   │       │       │                   ├── WebXmlMimeMapping.java
│   │       │       │                   ├── WebXmlParser.java
│   │       │       │                   ├── WebXmlProcessor.java
│   │       │       │                   ├── WebXmlSecurityConstraint.java
│   │       │       │                   ├── WebXmlServlet.java
│   │       │       │                   ├── WebXmlServletInitParam.java
│   │       │       │                   ├── WebXmlServletMapping.java
│   │       │       │                   ├── WebXmlServletMultipartConfig.java
│   │       │       │                   ├── WebXmlServletSecurityRoleRef.java
│   │       │       │                   ├── WebXmlSessionConfig.java
│   │       │       │                   └── WebXmlSessionConfigCookieConfig.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           ├── java/
│   │           │   └── cloud/
│   │           │       └── piranha/
│   │           │           └── extension/
│   │           │               └── webxml/
│   │           │                   ├── TestFilter.java
│   │           │                   ├── TestServlet.java
│   │           │                   ├── WebXmlExtensionTest.java
│   │           │                   ├── WebXmlInitializerTest.java
│   │           │                   └── internal/
│   │           │                       ├── ContextParamTest.java
│   │           │                       ├── DataSourceTest.java
│   │           │                       ├── DefaultContextPathTest.java
│   │           │                       ├── DenyUncoveredMethodsTest.java
│   │           │                       ├── EffectiveMajorVersionTest.java
│   │           │                       ├── ErrorPageTest.java
│   │           │                       ├── FilterMappingTest.java
│   │           │                       ├── JspConfigTest.java
│   │           │                       ├── MetadataCompleteTest.java
│   │           │                       ├── MimeMappingTest.java
│   │           │                       ├── TestWithoutLeadingSlashServlet.java
│   │           │                       ├── WebXmlManagerTest.java
│   │           │                       ├── WebXmlParserTest.java
│   │           │                       ├── WebXmlProcessorTest.java
│   │           │                       ├── WelcomeFileTest.java
│   │           │                       └── WithoutLeadingSlashTest.java
│   │           └── webxml/
│   │               ├── contextParam/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── dataSource/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── defaultContextPath/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── denyUncoveredMethods/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── effectiveMajorVersion1/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── errorPage/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── filterMappings/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── init/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── init2/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── init3/
│   │               │   └── WEB-INF/
│   │               │       └── classes/
│   │               │           └── META-INF/
│   │               │               └── web-fragment.xml
│   │               ├── jspConfig/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── metadataComplete/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── mimeMapping/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── parse/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── parse2/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── parse3/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── parse4/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               ├── welcomeFile/
│   │               │   └── WEB-INF/
│   │               │       └── web.xml
│   │               └── withoutLeadingSlash1/
│   │                   └── WEB-INF/
│   │                       └── web.xml
│   ├── welcomefile/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── extension/
│   │       │       │           └── welcomefile/
│   │       │       │               ├── WelcomeFileExtension.java
│   │       │       │               └── internal/
│   │       │       │                   └── InternalWelcomeFileManager.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           ├── java/
│   │           │   └── cloud/
│   │           │       └── piranha/
│   │           │           └── extension/
│   │           │               └── welcomefile/
│   │           │                   ├── WelcomeFileExtensionTest.java
│   │           │                   └── internal/
│   │           │                       └── InternalWelcomeFileManagerTest.java
│   │           └── webapp/
│   │               ├── welcomefile1/
│   │               │   └── index.html
│   │               └── welcomefile2/
│   │                   └── custom.html
│   ├── weld/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   ├── cloud/
│   │           │   │   └── piranha/
│   │           │   │       └── extension/
│   │           │   │           └── weld/
│   │           │   │               ├── RealtimeHttpServletRequestWrapper.java
│   │           │   │               ├── WeldCDI.java
│   │           │   │               ├── WeldContainer.java
│   │           │   │               ├── WeldExtension.java
│   │           │   │               ├── WeldHttpServletRequest.java
│   │           │   │               ├── WeldInitListener.java
│   │           │   │               ├── WeldInitializer.java
│   │           │   │               ├── WeldObjectInstanceManager.java
│   │           │   │               ├── WeldProvider.java
│   │           │   │               └── WeldSecurityService.java
│   │           │   └── module-info.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       ├── org.jboss.weld.bootstrap.api.Service
│   │                       └── org.jboss.weld.environment.servlet.Container
│   └── yasson/
│       ├── pom.xml
│       └── src/
│           └── main/
│               └── java/
│                   ├── cloud/
│                   │   └── piranha/
│                   │       └── extension/
│                   │           └── yasson/
│                   │               └── YassonExtension.java
│                   └── module-info.java
├── feature/
│   ├── api/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── feature/
│   │               │           └── api/
│   │               │               ├── Feature.java
│   │               │               └── FeatureManager.java
│   │               └── module-info.java
│   ├── crac/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── feature/
│   │       │       │           └── crac/
│   │       │       │               └── CracFeature.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── feature/
│   │                           └── crac/
│   │                               └── CracFeatureTest.java
│   ├── exitonstop/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── feature/
│   │       │       │           └── exitonstop/
│   │       │       │               └── ExitOnStopFeature.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── feature/
│   │                           └── exitonstop/
│   │                               └── ExitOnStopFeatureTest.java
│   ├── http/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── feature/
│   │       │       │           └── http/
│   │       │       │               └── HttpFeature.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── feature/
│   │                           └── http/
│   │                               └── HttpFeatureTest.java
│   ├── https/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── feature/
│   │       │       │           └── https/
│   │       │       │               └── HttpsFeature.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── feature/
│   │                           └── https/
│   │                               └── HttpsFeatureTest.java
│   ├── impl/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── feature/
│   │       │       │           └── impl/
│   │       │       │               ├── DefaultFeature.java
│   │       │       │               └── DefaultFeatureManager.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── feature/
│   │                           └── impl/
│   │                               ├── DefaultFeatureManagerTest.java
│   │                               └── DefaultFeatureTest.java
│   ├── isolatedwebapp/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── feature/
│   │               │           └── isolatedwebapp/
│   │               │               └── IsolatedWebAppFeature.java
│   │               └── module-info.java
│   ├── logging/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── feature/
│   │       │       │           └── logging/
│   │       │       │               ├── LoggingFeature.java
│   │       │       │               └── LoggingHandler.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── feature/
│   │                           └── logging/
│   │                               └── LoggingFeatureTest.java
│   ├── pid/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── feature/
│   │               │           └── pid/
│   │               │               └── PidFeature.java
│   │               └── module-info.java
│   ├── pom.xml
│   ├── trace/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── feature/
│   │       │       │           └── trace/
│   │       │       │               └── TraceFeature.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── feature/
│   │               │           └── trace/
│   │               │               └── tests/
│   │               │                   └── TraceFeatureTest.java
│   │               └── module-info.java
│   ├── webapp/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── feature/
│   │       │       │           └── webapp/
│   │       │       │               └── WebAppFeature.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── feature/
│   │                           └── webapp/
│   │                               └── WebAppFeatureTest.java
│   └── webapps/
│       ├── pom.xml
│       └── src/
│           └── main/
│               └── java/
│                   ├── cloud/
│                   │   └── piranha/
│                   │       └── feature/
│                   │           └── webapps/
│                   │               └── WebAppsFeature.java
│                   └── module-info.java
├── http/
│   ├── api/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── http/
│   │               │           └── api/
│   │               │               ├── HttpServer.java
│   │               │               ├── HttpServerProcessor.java
│   │               │               ├── HttpServerProcessorEndState.java
│   │               │               ├── HttpServerRequest.java
│   │               │               ├── HttpServerResponse.java
│   │               │               └── package-info.java
│   │               └── module-info.java
│   ├── crac/
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── http/
│   │               │           └── crac/
│   │               │               └── CracHttpServer.java
│   │               └── module-info.java
│   ├── grizzly/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── http/
│   │       │       │           └── grizzly/
│   │       │       │               ├── GrizzlyHttpServer.java
│   │       │       │               ├── GrizzlyHttpServerRequest.java
│   │       │       │               ├── GrizzlyHttpServerResponse.java
│   │       │       │               └── package-info.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── http/
│   │                           └── grizzly/
│   │                               ├── GrizzlyHttpServerRequestTest.java
│   │                               └── GrizzlyHttpServerTest.java
│   ├── impl/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── http/
│   │       │       │           └── impl/
│   │       │       │               ├── DefaultHttpServer.java
│   │       │       │               ├── DefaultHttpServerAcceptorThread.java
│   │       │       │               ├── DefaultHttpServerProcessingThread.java
│   │       │       │               ├── DefaultHttpServerProcessor.java
│   │       │       │               ├── DefaultHttpServerRequest.java
│   │       │       │               ├── DefaultHttpServerResponse.java
│   │       │       │               ├── DefaultHttpServerThreadFactory.java
│   │       │       │               └── package-info.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── http/
│   │                           └── impl/
│   │                               ├── DefaultHttpServerRequestTest.java
│   │                               └── DefaultHttpServerTest.java
│   ├── jdk/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── http/
│   │       │       │           └── jdk/
│   │       │       │               ├── JdkHttpHandler.java
│   │       │       │               ├── JdkHttpRequest.java
│   │       │       │               ├── JdkHttpResponse.java
│   │       │       │               ├── JdkHttpServer.java
│   │       │       │               └── package-info.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── http/
│   │                           └── jdk/
│   │                               └── JdkHttpServerTest.java
│   ├── netty/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── http/
│   │       │       │           └── netty/
│   │       │       │               ├── NettyHttpServer.java
│   │       │       │               ├── NettyHttpServerHandler.java
│   │       │       │               ├── NettyHttpServerInitializer.java
│   │       │       │               ├── NettyHttpServerRequest.java
│   │       │       │               ├── NettyHttpServerResponse.java
│   │       │       │               └── package-info.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── http/
│   │                           └── netty/
│   │                               └── NettyHttpServerTest.java
│   ├── pom.xml
│   ├── tests/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── http/
│   │               │           └── tests/
│   │               │               ├── HttpServerRequestTest.java
│   │               │               ├── HttpServerTest.java
│   │               │               └── TestHttpServerProcessor.java
│   │               └── module-info.java
│   ├── undertow/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── http/
│   │       │       │           └── undertow/
│   │       │       │               ├── UndertowHttpHandler.java
│   │       │       │               ├── UndertowHttpRequest.java
│   │       │       │               ├── UndertowHttpResponse.java
│   │       │       │               ├── UndertowHttpServer.java
│   │       │       │               └── package-info.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── http/
│   │                           └── undertow/
│   │                               └── UndertowHttpServerTest.java
│   ├── virtual/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── http/
│   │       │       │           └── virtual/
│   │       │       │               └── VirtualHttpServer.java
│   │       │       └── module-info.java
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── http/
│   │                           └── virtual/
│   │                               └── VirtualHttpServerTest.java
│   └── webapp/
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   └── java/
│           │       ├── cloud/
│           │       │   └── piranha/
│           │       │       └── http/
│           │       │           └── webapp/
│           │       │               ├── HttpWebApplicationOutputStream.java
│           │       │               ├── HttpWebApplicationRequest.java
│           │       │               ├── HttpWebApplicationResponse.java
│           │       │               ├── HttpWebApplicationServer.java
│           │       │               └── HttpWebApplicationServerRequestMapper.java
│           │       └── module-info.java
│           └── test/
│               └── java/
│                   └── cloud/
│                       └── piranha/
│                           └── http/
│                               └── webapp/
│                                   ├── HttpWebApplicationRequestTest.java
│                                   ├── HttpWebApplicationResponseTest.java
│                                   ├── HttpWebApplicationServerTest.java
│                                   └── TestSnoopServlet.java
├── maven/
│   ├── archetypes/
│   │   └── pom.xml
│   ├── plugin/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   └── java/
│   │       │       ├── cloud/
│   │       │       │   └── piranha/
│   │       │       │       └── maven/
│   │       │       │           └── plugin/
│   │       │       │               ├── BaseMojo.java
│   │       │       │               ├── RunMojo.java
│   │       │       │               ├── StartMojo.java
│   │       │       │               └── StopMojo.java
│   │       │       └── module-info.java
│   │       └── site/
│   │           └── site.xml
│   └── pom.xml
├── micro/
│   ├── builder/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── micro/
│   │               │           └── builder/
│   │               │               ├── MicroEmbeddedPiranha.java
│   │               │               ├── MicroEmbeddedPiranhaBuilder.java
│   │               │               ├── MicroWebApplication.java
│   │               │               └── package-info.java
│   │               └── module-info.java
│   ├── core/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   ├── cloud/
│   │           │   │   └── piranha/
│   │           │   │       └── micro/
│   │           │   │           └── core/
│   │           │   │               ├── CdiExtension.java
│   │           │   │               ├── DefaultAnnotationInfo.java
│   │           │   │               ├── InMemoryIdentityStore.java
│   │           │   │               ├── MicroInnerApplication.java
│   │           │   │               ├── MicroInnerDeployer.java
│   │           │   │               └── PiranhaBeanArchiveHandler.java
│   │           │   └── module-info.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       ├── jakarta.enterprise.inject.spi.Extension
│   │                       └── org.jboss.weld.environment.deployment.discovery.BeanArchiveHandler
│   ├── loader/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── micro/
│   │               │           └── loader/
│   │               │               ├── MicroConfiguration.java
│   │               │               ├── MicroDeployOutcome.java
│   │               │               ├── MicroInfo.java
│   │               │               ├── MicroOuterDeployer.java
│   │               │               ├── StaticStreamHandler.java
│   │               │               ├── StaticURLStreamHandlerFactory.java
│   │               │               └── package-info.java
│   │               └── module-info.java
│   └── pom.xml
├── multi/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── assembly/
│       │   │   └── zip.xml
│       │   ├── docker/
│       │   │   └── Dockerfile
│       │   ├── java/
│       │   │   ├── cloud/
│       │   │   │   └── piranha/
│       │   │   │       └── multi/
│       │   │   │           ├── MultiPiranha.java
│       │   │   │           ├── MultiPiranhaBuilder.java
│       │   │   │           ├── MultiPiranhaMain.java
│       │   │   │           └── MultiWebApplication.java
│       │   │   └── module-info.java
│       │   └── zip/
│       │       ├── etc/
│       │       │   ├── keystore.jks
│       │       │   ├── logging.properties
│       │       │   └── truststore.jks
│       │       ├── tmp/
│       │       │   └── README
│       │       └── webapps/
│       │           └── README
│       └── test/
│           └── java/
│               └── cloud/
│                   └── piranha/
│                       └── multi/
│                           ├── MultiPiranhaBuilderTest.java
│                           └── MultiPiranhaIT.java
├── pom.xml
├── resource/
│   ├── api/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               ├── cloud/
│   │               │   └── piranha/
│   │               │       └── resource/
│   │               │           └── api/
│   │               │               ├── Resource.java
│   │               │               ├── ResourceManager.java
│   │               │               ├── ResourceManagerClassLoader.java
│   │               │               └── package-info.java
│   │               └── module-info.java
│   ├── impl/
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   ├── cloud/
│   │       │   │   │   └── piranha/
│   │       │   │   │       └── resource/
│   │       │   │   │           └── impl/
│   │       │   │   │               ├── AliasedDirectoryResource.java
│   │       │   │   │               ├── AliasedNamedResource.java
│   │       │   │   │               ├── ByteArrayResource.java
│   │       │   │   │               ├── ByteArrayResourceStreamHandlerProvider.java
│   │       │   │   │               ├── ByteArrayResourceURLConnection.java
│   │       │   │   │               ├── ByteArrayResourceURLStreamHandler.java
│   │       │   │   │               ├── ClassResource.java
│   │       │   │   │               ├── DefaultResourceManager.java
│   │       │   │   │               ├── DefaultResourceManagerClassLoader.java
│   │       │   │   │               ├── DirectoryResource.java
│   │       │   │   │               ├── JarResource.java
│   │       │   │   │               ├── MultiReleaseResource.java
│   │       │   │   │               ├── PrefixJarResource.java
│   │       │   │   │               └── StringResource.java
│   │       │   │   └── module-info.java
│   │       │   └── resources/
│   │       │       └── META-INF/
│   │       │           └── services/
│   │       │               └── java.net.spi.URLStreamHandlerProvider
│   │       └── test/
│   │           └── java/
│   │               └── cloud/
│   │                   └── piranha/
│   │                       └── resource/
│   │                           └── impl/
│   │                               ├── AliasedDirectoryResourceTest.java
│   │                               ├── AliasedNamedResourceTest.java
│   │                               ├── ByteArrayResourceTest.java
│   │                               ├── DefaultResourceManagerTest.java
│   │                               ├── DirectoryResourceTest.java
│   │                               ├── JarResourceTest.java
│   │                               ├── MultiReleaseResourceTest.java
│   │                               └── PrefixJarResourceTest.java
│   ├── pom.xml
│   └── shrinkwrap/
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   └── java/
│           │       ├── cloud/
│           │       │   └── piranha/
│           │       │       └── resource/
│           │       │           └── shrinkwrap/
│           │       │               ├── ArchiveURLStreamHandler.java
│           │       │               ├── GlobalArchiveStreamHandler.java
│           │       │               ├── IsolatingResourceManagerClassLoader.java
│           │       │               ├── NodeURLStreamHandler.java
│           │       │               ├── ShrinkWrapDirectoryInputStream.java
│           │       │               ├── ShrinkWrapResource.java
│           │       │               └── StreamConnection.java
│           │       └── module-info.java
│           └── test/
│               └── java/
│                   └── cloud/
│                       └── piranha/
│                           └── resource/
│                               └── shrinkwrap/
│                                   ├── DefaultResourceManagerTest.java
│                                   └── DefaultWebApplicationClassLoaderTest.java
├── single/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       ├── cloud/
│       │       │   └── piranha/
│       │       │       └── single/
│       │       │           ├── SingleMain.java
│       │       │           ├── SinglePiranha.java
│       │       │           └── SinglePiranhaBuilder.java
│       │       └── module-info.java
│       └── test/
│           └── java/
│               └── cloud/
│                   └── piranha/
│                       └── single/
│                           ├── SinglePiranhaBuilderTest.java
│                           └── SinglePiranhaTest.java
├── spring/
│   ├── pom.xml
│   └── spring-boot-starter-piranha-embedded/
│       ├── pom.xml
│       └── src/
│           └── main/
│               └── java/
│                   ├── cloud/
│                   │   └── piranha/
│                   │       └── spring/
│                   │           └── starter/
│                   │               └── embedded/
│                   │                   ├── EmbeddedPiranhaServletWebServerFactory.java
│                   │                   └── EmbeddedPiranhaWebServer.java
│                   └── module-info.java
├── src/
│   └── site/
│       ├── markdown/
│       │   └── index.md
│       └── site.xml
└── test/
    ├── common/
    │   ├── pom.xml
    │   └── src/
    │       └── main/
    │           └── java/
    │               ├── cloud/
    │               │   └── piranha/
    │               │       └── test/
    │               │           └── common/
    │               │               └── PiranhaStartup.java
    │               └── module-info.java
    ├── coreprofile/
    │   ├── arquillian/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   └── java/
    │   │       │       └── arquillian/
    │   │       │           ├── HelloArquillianApplication.java
    │   │       │           └── HelloArquillianBean.java
    │   │       └── test/
    │   │           └── java/
    │   │               └── helloarquillian/
    │   │                   └── HelloArquillianIT.java
    │   ├── integration/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── cloud/
    │   │       │   │       └── piranha/
    │   │       │   │           └── test/
    │   │       │   │               └── coreprofile/
    │   │       │   │                   └── distribution/
    │   │       │   │                       ├── AsyncBean.java
    │   │       │   │                       ├── BeanParamBean.java
    │   │       │   │                       ├── BeanParamInput.java
    │   │       │   │                       ├── ContainerRequestContextBean.java
    │   │       │   │                       ├── ContainerRequestContextFilter.java
    │   │       │   │                       ├── DependencyInjectionBean.java
    │   │       │   │                       ├── IntegrationApplication.java
    │   │       │   │                       ├── InterceptInterceptor.java
    │   │       │   │                       ├── InterceptedBean.java
    │   │       │   │                       ├── Jsonb.java
    │   │       │   │                       ├── ProducesBean.java
    │   │       │   │                       ├── RestBean.java
    │   │       │   │                       ├── SseBean.java
    │   │       │   │                       ├── SseBroadcastBean.java
    │   │       │   │                       └── TRACE.java
    │   │       │   └── webapp/
    │   │       │       └── WEB-INF/
    │   │       │           └── beans.xml
    │   │       └── test/
    │   │           └── java/
    │   │               └── cloud/
    │   │                   └── piranha/
    │   │                       └── test/
    │   │                           └── coreprofile/
    │   │                               └── distribution/
    │   │                                   ├── AsyncIT.java
    │   │                                   ├── BeanParamIT.java
    │   │                                   ├── ContainerRequestContextIT.java
    │   │                                   ├── DependencyInjectionIT.java
    │   │                                   ├── ITBase.java
    │   │                                   ├── InterceptorIT.java
    │   │                                   ├── JsonBindingIT.java
    │   │                                   ├── JsonProcessingIT.java
    │   │                                   ├── ProducesIT.java
    │   │                                   ├── RestIT.java
    │   │                                   └── SseIT.java
    │   ├── json/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   └── java/
    │   │       │       └── temperature/
    │   │       │           ├── Temperature.java
    │   │       │           ├── TemperatureApplication.java
    │   │       │           └── TemperatureBean.java
    │   │       └── test/
    │   │           └── java/
    │   │               └── temperature/
    │   │                   └── TemperatureIT.java
    │   ├── no_servlet_class/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── cloud/
    │   │       │   │       └── piranha/
    │   │       │   │           └── test/
    │   │       │   │               └── coreprofile/
    │   │       │   │                   └── no_servlet_class/
    │   │       │   │                       ├── EchoApplication.java
    │   │       │   │                       └── EchoBean.java
    │   │       │   └── webapp/
    │   │       │       └── WEB-INF/
    │   │       │           └── web.xml
    │   │       └── test/
    │   │           └── java/
    │   │               └── cloud/
    │   │                   └── piranha/
    │   │                       └── test/
    │   │                           └── coreprofile/
    │   │                               └── no_servlet_class/
    │   │                                   └── EchoIT.java
    │   ├── pom.xml
    │   └── rest/
    │       ├── pom.xml
    │       └── src/
    │           ├── main/
    │           │   ├── java/
    │           │   │   └── cloud/
    │           │   │       └── piranha/
    │           │   │           └── test/
    │           │   │               └── coreprofile/
    │           │   │                   └── rest/
    │           │   │                       ├── RestApplication.java
    │           │   │                       └── RestBean.java
    │           │   └── webapp/
    │           │       └── WEB-INF/
    │           │           └── web.xml
    │           └── test/
    │               └── java/
    │                   └── cloud/
    │                       └── piranha/
    │                           └── test/
    │                               └── coreprofile/
    │                                   └── rest/
    │                                       └── RestIT.java
    ├── embedded/
    │   ├── classloader/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── main/
    │   │           ├── java/
    │   │           │   └── classloader/
    │   │           │       └── ClassLoaderServlet.java
    │   │           └── webapp/
    │   │               └── META-INF/
    │   │                   └── context.xml
    │   ├── classloader2/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── test/
    │   │           └── java/
    │   │               └── classloader/
    │   │                   └── ClassLoaderIT.java
    │   ├── eclipselink/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── eclipselink/
    │   │       │   │       ├── EclipseLinkBean.java
    │   │       │   │       └── EclipseLinkTable.java
    │   │       │   ├── resources/
    │   │       │   │   └── META-INF/
    │   │       │   │       └── persistence.xml
    │   │       │   └── webapp/
    │   │       │       ├── WEB-INF/
    │   │       │       │   ├── beans.xml
    │   │       │       │   ├── faces-config.xml
    │   │       │       │   └── web.xml
    │   │       │       └── index.xhtml
    │   │       └── test/
    │   │           └── java/
    │   │               └── eclipselink/
    │   │                   └── EclipseLinkTest.java
    │   ├── exousia/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── test/
    │   │           └── java/
    │   │               └── exousia/
    │   │                   ├── ExousiaTest.java
    │   │                   └── PublicServlet.java
    │   ├── hazelcast/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── hazelcast/
    │   │       │   │       └── HazelcastBean.java
    │   │       │   └── webapp/
    │   │       │       ├── WEB-INF/
    │   │       │       │   ├── beans.xml
    │   │       │       │   └── web.xml
    │   │       │       └── index.xhtml
    │   │       └── test/
    │   │           └── java/
    │   │               └── hazelcast/
    │   │                   └── HazelcastTest.java
    │   ├── helloworld/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── helloworld/
    │   │       │   │       ├── HelloWorldApplication.java
    │   │       │   │       └── HelloWorldServlet.java
    │   │       │   └── webapp/
    │   │       │       └── WEB-INF/
    │   │       │           └── web.xml
    │   │       └── test/
    │   │           └── java/
    │   │               └── helloworld/
    │   │                   └── HelloWorldTest.java
    │   ├── pom.xml
    │   ├── soteria-basic/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── test/
    │   │           ├── java/
    │   │           │   └── basic/
    │   │           │       ├── BasicTest.java
    │   │           │       ├── DynamicInitialContextFactory.java
    │   │           │       ├── ProtectedServlet.java
    │   │           │       ├── PublicServlet.java
    │   │           │       └── TestIdentityStore.java
    │   │           └── resources/
    │   │               └── META-INF/
    │   │                   └── beans.xml
    │   ├── soteria-form/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── test/
    │   │           ├── java/
    │   │           │   └── form/
    │   │           │       ├── DynamicInitialContextFactory.java
    │   │           │       ├── ErrorPageServlet.java
    │   │           │       ├── FormTest.java
    │   │           │       ├── LoginPageServlet.java
    │   │           │       ├── ProtectedServlet.java
    │   │           │       └── TestIdentityStore.java
    │   │           └── resources/
    │   │               └── META-INF/
    │   │                   └── beans.xml
    │   ├── springboot/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── main/
    │   │           ├── java/
    │   │           │   └── test1/
    │   │           │       ├── Test1Application.java
    │   │           │       └── Test1Controller.java
    │   │           └── resources/
    │   │               └── application.properties
    │   ├── springboot-virtualthreads/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── main/
    │   │           └── java/
    │   │               └── test/
    │   │                   └── custom/
    │   │                       └── http/
    │   │                           ├── Main.java
    │   │                           └── MyController.java
    │   ├── web-fragment-in-jar/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── main/
    │   │           └── resources/
    │   │               └── META-INF/
    │   │                   └── web-fragment.xml
    │   ├── web-fragment-in-jar-test/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── test/
    │   │           └── java/
    │   │               └── webfragmentinjar/
    │   │                   └── WebFragmentInJar1IT.java
    │   ├── web-fragment-in-jar-webapp/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       └── main/
    │   │           └── webapp/
    │   │               ├── META-INF/
    │   │               │   └── context.xml
    │   │               └── index.html
    │   └── weld/
    │       ├── pom.xml
    │       └── src/
    │           ├── main/
    │           │   ├── java/
    │           │   │   └── weld/
    │           │   │       └── WeldRequestBean.java
    │           │   └── webapp/
    │           │       ├── WEB-INF/
    │           │       │   ├── beans.xml
    │           │       │   ├── faces-config.xml
    │           │       │   └── web.xml
    │           │       └── index.xhtml
    │           └── test/
    │               └── java/
    │                   └── weld/
    │                       └── WeldTest.java
    ├── jpms/
    │   ├── pom.xml
    │   └── src/
    │       └── test/
    │           └── java/
    │               ├── jpms/
    │               │   └── ModuleFinderTest.java
    │               ├── package1/
    │               │   ├── Library.java
    │               │   ├── Service.java
    │               │   ├── Servlet.java
    │               │   └── Utils.java
    │               ├── package2/
    │               │   ├── Library.java
    │               │   └── Listener.java
    │               └── package3/
    │                   ├── DefaultService.java
    │                   ├── Filter.java
    │                   └── Library.java
    ├── micro/
    │   ├── helloworld/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── helloworld/
    │   │       │   │       └── HelloWorldServlet.java
    │   │       │   └── webapp/
    │   │       │       └── WEB-INF/
    │   │       │           └── web.xml
    │   │       └── test/
    │   │           └── java/
    │   │               └── helloworld/
    │   │                   └── HelloWorldServletIT.java
    │   ├── microprofile-config/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── config/
    │   │       │   │       ├── ConfigApplicationBean.java
    │   │       │   │       └── ConfigServlet.java
    │   │       │   └── resources/
    │   │       │       └── META-INF/
    │   │       │           └── microprofile-config.properties
    │   │       └── test/
    │   │           └── java/
    │   │               └── config/
    │   │                   └── ConfigTest.java
    │   ├── pom.xml
    │   ├── protected-servlet/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── protectedservlet/
    │   │       │   │       ├── ProtectedBean.java
    │   │       │   │       └── ProtectedServlet.java
    │   │       │   └── webapp/
    │   │       │       └── WEB-INF/
    │   │       │           ├── beans.xml
    │   │       │           └── web.xml
    │   │       └── test/
    │   │           └── java/
    │   │               └── protectedservlet/
    │   │                   └── ProtectedServletIT.java
    │   └── snoop/
    │       ├── pom.xml
    │       └── src/
    │           ├── main/
    │           │   ├── java/
    │           │   │   └── snoop/
    │           │   │       └── SnoopServlet.java
    │           │   └── webapp/
    │           │       └── WEB-INF/
    │           │           ├── beans.xml
    │           │           └── web.xml
    │           └── test/
    │               └── java/
    │                   └── snoop/
    │                       └── SnoopIT.java
    ├── pom.xml
    ├── server/
    │   ├── helloworld/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   └── webapp/
    │   │       │       └── helloworld.html
    │   │       └── test/
    │   │           └── java/
    │   │               └── helloworld/
    │   │                   └── HelloWorldIT.java
    │   ├── pom.xml
    │   ├── programmatic/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── programmatic/
    │   │       │   │       └── ProgrammaticServlet.java
    │   │       │   └── webapp/
    │   │       │       └── WEB-INF/
    │   │       │           └── web.xml
    │   │       └── test/
    │   │           └── java/
    │   │               └── programmatic/
    │   │                   └── ProgrammaticIT.java
    │   ├── wasp/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── wasp/
    │   │       │   │       └── HelloTldTag.java
    │   │       │   └── webapp/
    │   │       │       ├── WEB-INF/
    │   │       │       │   ├── tags/
    │   │       │       │   │   └── hellotag.tag
    │   │       │       │   ├── tld/
    │   │       │       │   │   ├── hellotag.tld
    │   │       │       │   │   └── hellotld.tld
    │   │       │       │   └── web.xml
    │   │       │       ├── hellotag.jsp
    │   │       │       ├── hellotag2.jsp
    │   │       │       ├── hellotld.jsp
    │   │       │       ├── hellotld2.jsp
    │   │       │       └── index.jsp
    │   │       └── test/
    │   │           └── java/
    │   │               └── wasp/
    │   │                   ├── HelloTagJspIT.java
    │   │                   ├── HelloTld2JspIT.java
    │   │                   ├── HelloTldJspIT.java
    │   │                   └── IndexJspIT.java
    │   └── wasp2/
    │       ├── pom.xml
    │       └── src/
    │           └── main/
    │               └── resources/
    │                   └── META-INF/
    │                       ├── hellotag2.tag
    │                       └── hellotag2.tld
    ├── servlet/
    │   ├── crac/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── cloud/
    │   │       │   │       └── piranha/
    │   │       │   │           └── test/
    │   │       │   │               └── servlet/
    │   │       │   │                   └── crac/
    │   │       │   │                       └── CracBean.java
    │   │       │   └── webapp/
    │   │       │       ├── WEB-INF/
    │   │       │       │   ├── beans.xml
    │   │       │       │   └── web.xml
    │   │       │       └── crac.xhtml
    │   │       └── test/
    │   │           └── java/
    │   │               └── cloud/
    │   │                   └── piranha/
    │   │                       └── test/
    │   │                           └── servlet/
    │   │                               └── crac/
    │   │                                   └── CracIT.java
    │   ├── hello/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   ├── java/
    │   │       │   │   └── hello/
    │   │       │   │       └── HelloServlet.java
    │   │       │   └── webapp/
    │   │       │       ├── WEB-INF/
    │   │       │       │   └── web.xml
    │   │       │       ├── helloel.jsp
    │   │       │       ├── hellojsp.jsp
    │   │       │       └── helloworld.html
    │   │       └── test/
    │   │           └── java/
    │   │               └── hello/
    │   │                   └── HelloIT.java
    │   ├── helloworld/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   └── webapp/
    │   │       │       └── helloworld.html
    │   │       └── test/
    │   │           └── java/
    │   │               └── helloworld/
    │   │                   └── HelloWorldIT.java
    │   ├── integration/
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   └── java/
    │   │       │       └── cloud/
    │   │       │           └── piranha/
    │   │       │               └── test/
    │   │       │                   └── servlet/
    │   │       │                       └── integration/
    │   │       │                           └── IntegrationServlet.java
    │   │       └── test/
    │   │           └── java/
    │   │               └── cloud/
    │   │                   └── piranha/
    │   │                       └── test/
    │   │                           └── servlet/
    │   │                               └── integration/
    │   │                                   └── IntegrationtIT.java
    │   ├── pages/
    │   │   ├── README.md
    │   │   ├── pom.xml
    │   │   └── src/
    │   │       ├── main/
    │   │       │   └── webapp/
    │   │       │       └── hello.jsp
    │   │       └── test/
    │   │           └── java/
    │   │               └── hello/
    │   │                   └── HelloIT.java
    │   ├── pom.xml
    │   └── websocket/
    │       ├── pom.xml
    │       └── src/
    │           └── main/
    │               └── java/
    │                   └── chat/
    │                       └── ChatEndpoint.java
    ├── tck/
    │   ├── coreprofile/
    │   │   ├── annotations/
    │   │   │   ├── installer/
    │   │   │   │   └── pom.xml
    │   │   │   ├── pom.xml
    │   │   │   └── runner/
    │   │   │       └── pom.xml
    │   │   ├── cdi/
    │   │   │   ├── installer/
    │   │   │   │   └── pom.xml
    │   │   │   ├── pom.xml
    │   │   │   └── runner/
    │   │   │       ├── core/
    │   │   │       │   ├── pom.xml
    │   │   │       │   └── src/
    │   │   │       │       └── test/
    │   │   │       │           ├── java/
    │   │   │       │           │   └── org/
    │   │   │       │           │       └── jboss/
    │   │   │       │           │           └── weld/
    │   │   │       │           │               └── tck/
    │   │   │       │           │                   └── piranha/
    │   │   │       │           │                       ├── PiranhaDeploymentExceptionTransformer.java
    │   │   │       │           │                       ├── PiranhaExtension.java
    │   │   │       │           │                       ├── WeldBeansImpl.java
    │   │   │       │           │                       ├── WeldContextImpl.java
    │   │   │       │           │                       └── WeldELImpl.java
    │   │   │       │           └── resources/
    │   │   │       │               ├── META-INF/
    │   │   │       │               │   ├── cdi-tck.properties
    │   │   │       │               │   └── services/
    │   │   │       │               │       └── org.jboss.arquillian.core.spi.LoadableExtension
    │   │   │       │               └── arquillian.xml
    │   │   │       ├── model/
    │   │   │       │   ├── pom.xml
    │   │   │       │   └── src/
    │   │   │       │       └── test/
    │   │   │       │           └── java/
    │   │   │       │               └── org/
    │   │   │       │                   └── glassfish/
    │   │   │       │                       └── tck/
    │   │   │       │                           └── cdi/
    │   │   │       │                               └── lang/
    │   │   │       │                                   └── model/
    │   │   │       │                                       ├── CDILangModelTCKRunner.java
    │   │   │       │                                       └── LangModelVerifierBuildCompatibleExtension.java
    │   │   │       ├── pom.xml
    │   │   │       └── signature/
    │   │   │           └── pom.xml
    │   │   ├── coreprofile/
    │   │   │   ├── installer/
    │   │   │   │   └── pom.xml
    │   │   │   ├── pom.xml
    │   │   │   └── runner/
    │   │   │       ├── pom.xml
    │   │   │       └── src/
    │   │   │           └── test/
    │   │   │               ├── java/
    │   │   │               │   └── cloud/
    │   │   │               │       └── piranha/
    │   │   │               │           └── tck/
    │   │   │               │               └── core/
    │   │   │               │                   └── CustomJsonbSerializationITFix.java
    │   │   │               └── resources/
    │   │   │                   ├── META-INF/
    │   │   │                   │   └── services/
    │   │   │                   │       └── org.jboss.arquillian.core.spi.LoadableExtension
    │   │   │                   └── arquillian.xml
    │   │   ├── inject/
    │   │   │   ├── installer/
    │   │   │   │   └── pom.xml
    │   │   │   ├── pom.xml
    │   │   │   └── runner/
    │   │   │       └── pom.xml
    │   │   ├── jsonb/
    │   │   │   ├── installer/
    │   │   │   │   └── pom.xml
    │   │   │   ├── pom.xml
    │   │   │   └── runner/
    │   │   │       └── pom.xml
    │   │   ├── jsonp/
    │   │   │   ├── installer/
    │   │   │   │   └── pom.xml
    │   │   │   ├── pom.xml
    │   │   │   └── runner/
    │   │   │       └── pom.xml
    │   │   ├── pom.xml
    │   │   └── rest/
    │   │       ├── installer/
    │   │       │   └── pom.xml
    │   │       ├── pom.xml
    │   │       └── runner/
    │   │           ├── pom.xml
    │   │           └── src/
    │   │               └── test/
    │   │                   └── resources/
    │   │                       └── arquillian.xml
    │   └── pom.xml
    └── webprofile/
        ├── helloworld/
        │   ├── pom.xml
        │   └── src/
        │       ├── main/
        │       │   ├── java/
        │       │   │   └── helloworld/
        │       │   │       └── ApplicationBean.java
        │       │   └── webapp/
        │       │       ├── WEB-INF/
        │       │       │   └── beans.xml
        │       │       ├── helloworld.jsp
        │       │       └── index.html
        │       └── test/
        │           └── java/
        │               └── helloworld/
        │                   └── HelloWorldIT.java
        ├── integration/
        │   ├── pom.xml
        │   └── src/
        │       ├── main/
        │       │   ├── java/
        │       │   │   └── integration/
        │       │   │       ├── DependencyInjectionBean.java
        │       │   │       ├── ExpressionBean.java
        │       │   │       ├── FacesBean.java
        │       │   │       ├── IntegrationApplication.java
        │       │   │       ├── IntegrationBean.java
        │       │   │       ├── IntegrationServlet.java
        │       │   │       ├── InterceptBean.java
        │       │   │       ├── InterceptInterceptor.java
        │       │   │       └── Jsonb.java
        │       │   └── webapp/
        │       │       ├── WEB-INF/
        │       │       │   ├── beans.xml
        │       │       │   └── web.xml
        │       │       ├── expression.jsp
        │       │       ├── faces.xhtml
        │       │       ├── jstl.jsp
        │       │       └── pages.jsp
        │       └── test/
        │           └── java/
        │               └── integration/
        │                   └── IntegrationIT.java
        └── pom.xml
Download .txt
Showing preview only (416K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5074 symbols across 663 files)

FILE: arquillian/managed/src/main/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainer.java
  class ManagedPiranhaContainer (line 58) | public class ManagedPiranhaContainer implements DeployableContainer<Mana...
    method ManagedPiranhaContainer (line 98) | public ManagedPiranhaContainer() {
    method getConfigurationClass (line 101) | @Override
    method setup (line 106) | @Override
    method getDefaultProtocol (line 111) | @SuppressWarnings("exports")
    method deploy (line 117) | @SuppressWarnings("exports")
    method undeploy (line 161) | @Override
    method toWarFilename (line 210) | private String toWarFilename(Archive<?> archive) {
    method toAppName (line 220) | private String toAppName(String warFileName) {
    method toAppName (line 224) | private String toAppName(Archive<?> archive) {
    method getPiranhaJarFile (line 235) | private File getPiranhaJarFile(String version) throws IOException {
    method createArtifactPath (line 274) | private String createArtifactPath(String groupId, String artifactId, S...
    method convertGroupIdToPath (line 291) | private String convertGroupIdToPath(String groupId) {
    method createMavenCentralArtifactUrl (line 305) | @SuppressWarnings("deprecation")
    method determineVersionToUse (line 315) | private String determineVersionToUse() {
    method killProcessOnPort (line 324) | private void killProcessOnPort(int port) {
    method startPiranha (line 356) | private void startPiranha(File runtimeDirectory, File warFile) throws ...
    method copyPiranhaJarFile (line 497) | private void copyPiranhaJarFile(File runtimeDirectory, File zipFile) t...
    method isEmpty (line 513) | private boolean isEmpty(String string) {

FILE: arquillian/managed/src/main/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainerConfiguration.java
  class ManagedPiranhaContainerConfiguration (line 99) | public class ManagedPiranhaContainerConfiguration implements ContainerCo...
    method ManagedPiranhaContainerConfiguration (line 154) | public ManagedPiranhaContainerConfiguration() {
    method getCallerGroups (line 162) | public String getCallerGroups() {
    method getCallerName (line 171) | public String getCallerName() {
    method getCallerPassword (line 180) | public String getCallerPassword() {
    method getDistribution (line 189) | public String getDistribution() {
    method getHttpPort (line 198) | public int getHttpPort() {
    method getJvmArguments (line 210) | public String getJvmArguments() {
    method getProtocol (line 219) | public String getProtocol() {
    method isDebug (line 228) | public boolean isDebug() {
    method isSuspend (line 237) | public boolean isSuspend() {
    method setCallerGroups (line 246) | public void setCallerGroups(String callerGroups) {
    method setCallerName (line 255) | public void setCallerName(String callerName) {
    method setCallerPassword (line 264) | public void setCallerPassword(String callerPassword) {
    method setDebug (line 273) | public void setDebug(boolean debug) {
    method setDistribution (line 282) | public void setDistribution(String distribution) {
    method setHttpPort (line 291) | public void setHttpPort(int httpPort) {
    method setJvmArguments (line 300) | public void setJvmArguments(String jvmArguments) {
    method setProtocol (line 309) | public void setProtocol(String protocol) {
    method setSuspend (line 318) | public void setSuspend(boolean suspend) {
    method validate (line 322) | @Override

FILE: arquillian/managed/src/main/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainerExtension.java
  class ManagedPiranhaContainerExtension (line 38) | public class ManagedPiranhaContainerExtension implements LoadableExtensi...
    method ManagedPiranhaContainerExtension (line 43) | public ManagedPiranhaContainerExtension() {
    method register (line 46) | @SuppressWarnings("exports")

FILE: arquillian/managed/src/test/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainerConfigurationTest.java
  class ManagedPiranhaContainerConfigurationTest (line 38) | class ManagedPiranhaContainerConfigurationTest {
    method testGetHttpPortDefault (line 40) | @Test
    method testGetHttpPortSet (line 49) | @Test
    method testGetHttpPortInvalid (line 58) | @Test
    method testGetDistribution (line 68) | @Test
    method testSetDistribution (line 74) | @Test
    method testGetHttpPort (line 81) | @Test
    method testSetHttpPort (line 87) | @Test
    method testGetJvmArguments (line 94) | @Test
    method testSetJvmArguments (line 100) | @Test
    method testGetProtocol (line 107) | @Test
    method testSetProtocol (line 113) | @Test
    method testIsDebug (line 120) | @Test
    method testSetDebug (line 126) | @Test
    method testIsSuspend (line 133) | @Test
    method testSetSuspend (line 139) | @Test
    method testValidate (line 146) | @Test

FILE: arquillian/managed/src/test/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainerExtensionTest.java
  class ManagedPiranhaContainerExtensionTest (line 39) | class ManagedPiranhaContainerExtensionTest {
    method testRegister (line 41) | @Test

FILE: arquillian/managed/src/test/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainerTest.java
  class ManagedPiranhaContainerTest (line 19) | class ManagedPiranhaContainerTest {
    method testGetConfigurationClass (line 24) | @Test
    method testGetDefaultProtocol (line 33) | @Test

FILE: arquillian/server/src/main/java/cloud/piranha/arquillian/server/PiranhaServerDeployableContainer.java
  class PiranhaServerDeployableContainer (line 52) | public class PiranhaServerDeployableContainer extends PiranhaServerLoada...
    method PiranhaServerDeployableContainer (line 72) | public PiranhaServerDeployableContainer() {
    method setup (line 75) | @Override
    method deploy (line 81) | @Override
    method undeploy (line 106) | @Override

FILE: arquillian/server/src/main/java/cloud/piranha/arquillian/server/PiranhaServerLoadableExtension.java
  class PiranhaServerLoadableExtension (line 49) | public class PiranhaServerLoadableExtension implements LoadableExtension {
    method PiranhaServerLoadableExtension (line 54) | public PiranhaServerLoadableExtension() {
    method register (line 60) | @Override
    class PiranhaServerContainerBase (line 75) | public abstract static class PiranhaServerContainerBase implements Dep...
      method PiranhaServerContainerBase (line 80) | public PiranhaServerContainerBase() {
      method getConfigurationClass (line 83) | @Override
      method getDefaultProtocol (line 88) | @Override
    class PiranhaServerContainerConfiguration (line 103) | public static class PiranhaServerContainerConfiguration extends MicroC...
      method PiranhaServerContainerConfiguration (line 128) | public PiranhaServerContainerConfiguration() {
      method validate (line 142) | @Override
      method postConstruct (line 153) | @Override
      method isAutoPort (line 167) | public boolean isAutoPort() {
      method setAutoPort (line 176) | public void setAutoPort(boolean autoPort) {
      class PortFinder (line 180) | private class PortFinder {
        method findFreePort (line 191) | public int findFreePort(int initialPort) {
        method isFreePort (line 217) | private boolean isFreePort(int portCandidate) {

FILE: core/api/src/main/java/cloud/piranha/core/api/AnnotationInfo.java
  type AnnotationInfo (line 39) | public interface AnnotationInfo<T> {
    method getInstance (line 44) | T getInstance();
    method getTarget (line 49) | AnnotatedElement getTarget();
    method getTargetType (line 56) | default Class<?> getTargetType() {

FILE: core/api/src/main/java/cloud/piranha/core/api/AnnotationManager.java
  type AnnotationManager (line 41) | public interface AnnotationManager {
    method addAnnotation (line 48) | void addAnnotation(AnnotationInfo<?> annotationInfo);
    method addInstance (line 56) | void addInstance(Class<?> instanceClass, Class<?> implementingClass);
    method getAnnotations (line 65) | <T> List<AnnotationInfo<T>> getAnnotations(Class<T> annotationClass);
    method getAnnotations (line 73) | List<AnnotationInfo<?>> getAnnotations(Class<?>... annotationClasses);
    method getInstances (line 82) | <T> List<Class<T>> getInstances(Class<T> instanceClass);
    method getInstances (line 90) | List<Class<?>> getInstances(Class<?>... instanceClasses);
    method getAnnotationsByTarget (line 100) | <T> List<AnnotationInfo<T>> getAnnotationsByTarget(Class<T> annotation...
    method addAnnotatedClass (line 108) | void addAnnotatedClass(Class<? extends Annotation> annotationClass, Cl...
    method getAnnotatedClass (line 116) | Set<Class<?>> getAnnotatedClass(Class<? extends Annotation> annotation...
    method getAnnotatedClasses (line 124) | Set<Class<?>> getAnnotatedClasses(Class<?>[] annotationClasses);

FILE: core/api/src/main/java/cloud/piranha/core/api/AsyncDispatcher.java
  type AsyncDispatcher (line 35) | public interface AsyncDispatcher {
    method dispatch (line 40) | void dispatch();

FILE: core/api/src/main/java/cloud/piranha/core/api/AsyncManager.java
  type AsyncManager (line 38) | public interface AsyncManager {
    method getDispatcher (line 47) | AsyncDispatcher getDispatcher(WebApplication webApplication, String pa...

FILE: core/api/src/main/java/cloud/piranha/core/api/AttributeManager.java
  type AttributeManager (line 37) | public interface AttributeManager {
    method getAttribute (line 45) | Object getAttribute(String name);
    method getAttributeNames (line 50) | Enumeration<String> getAttributeNames();
    method removeAttribute (line 57) | void removeAttribute(String name);
    method setAttribute (line 65) | void setAttribute(String name, Object value);
    method containsAttribute (line 72) | default boolean containsAttribute(String name) {

FILE: core/api/src/main/java/cloud/piranha/core/api/AuthenticatedIdentity.java
  type AuthenticatedIdentity (line 43) | public interface AuthenticatedIdentity extends Principal {
    method getName (line 45) | @Override
    method getCallerPrincipal (line 60) | Principal getCallerPrincipal();
    method getGroups (line 70) | Set<String> getGroups();

FILE: core/api/src/main/java/cloud/piranha/core/api/CurrentRequestHolder.java
  type CurrentRequestHolder (line 43) | public interface CurrentRequestHolder {
    method getRequest (line 56) | <T extends HttpServletRequest> T getRequest();
    method setRequest (line 63) | void setRequest(HttpServletRequest request);

FILE: core/api/src/main/java/cloud/piranha/core/api/DispatcherManager.java
  type DispatcherManager (line 37) | public interface DispatcherManager {
    method getNamedDispatcher (line 45) | RequestDispatcher getNamedDispatcher(String name);
    method setWebApplication (line 52) | void setWebApplication(WebApplication webApplication);

FILE: core/api/src/main/java/cloud/piranha/core/api/ErrorPageManager.java
  type ErrorPageManager (line 37) | public interface ErrorPageManager {
    method addErrorPage (line 45) | void addErrorPage(int statusCode, String page);
    method addErrorPage (line 53) | void addErrorPage(String throwableClassName, String page);
    method getErrorPage (line 61) | String getErrorPage(Throwable throwable, HttpServletResponse response);

FILE: core/api/src/main/java/cloud/piranha/core/api/FilterEnvironment.java
  type FilterEnvironment (line 41) | public interface FilterEnvironment extends Dynamic, FilterConfig {
    method getFilter (line 51) | Filter getFilter();
    method initialize (line 58) | void initialize() throws ServletException;
    method setClassName (line 65) | void setClassName(String className);
    method setFilterName (line 72) | void setFilterName(String filterName);
    method setStatus (line 79) | void setStatus(int status);
    method getWebApplication (line 84) | WebApplication getWebApplication();
    method setWebApplication (line 91) | void setWebApplication(WebApplication webApplication);
    method isAsyncSupported (line 98) | boolean isAsyncSupported();

FILE: core/api/src/main/java/cloud/piranha/core/api/FilterMapping.java
  type FilterMapping (line 38) | public interface FilterMapping {
    method getFilterName (line 43) | String getFilterName();
    method getUrlPattern (line 48) | String getUrlPattern();
    method getDispatcherType (line 58) | default DispatcherType getDispatcherType() {

FILE: core/api/src/main/java/cloud/piranha/core/api/FilterPriority.java
  type FilterPriority (line 41) | public interface FilterPriority {
    method getPriority (line 48) | int getPriority();

FILE: core/api/src/main/java/cloud/piranha/core/api/HandlesTypesManager.java
  type HandlesTypesManager (line 45) | public interface HandlesTypesManager {
    method addAnnotatedClass (line 53) | void addAnnotatedClass(Class<?> annotationClass, Class<?> annotatedCla...
    method addExtendingClass (line 61) | void addExtendingClass(Class<?> baseClass, Class<?> extendingClass);
    method addImplementingClass (line 69) | void addImplementingClass(Class<?> interfaceClass, Class<?> implementi...
    method getAnnotatedClasses (line 77) | Set<Class<?>> getAnnotatedClasses(Class<?> annotationClass);
    method getExtendingClasses (line 85) | Set<Class<?>> getExtendingClasses(Class<?> baseClass);
    method getImplementingClasses (line 93) | Set<Class<?>> getImplementingClasses(Class<?> interfaceClass);
    method getClasses (line 102) | Set<Class<?>> getClasses(Set<Class<?>> classes);

FILE: core/api/src/main/java/cloud/piranha/core/api/HttpHeader.java
  type HttpHeader (line 37) | public interface HttpHeader {
    method addValue (line 44) | void addValue(String value);
    method getName (line 49) | String getName();
    method getValue (line 54) | String getValue();
    method getValues (line 59) | Enumeration<String> getValues();

FILE: core/api/src/main/java/cloud/piranha/core/api/HttpHeaderManager.java
  type HttpHeaderManager (line 37) | public interface HttpHeaderManager {
    method addHeader (line 45) | void addHeader(String name, String value);
    method containsHeader (line 53) | boolean containsHeader(String name);
    method getDateHeader (line 61) | long getDateHeader(String name) throws IllegalArgumentException;
    method getHeader (line 69) | String getHeader(String name);
    method getHeaderNames (line 74) | Enumeration<String> getHeaderNames();
    method getHeaders (line 82) | Enumeration<String> getHeaders(String name);
    method getIntHeader (line 92) | int getIntHeader(String name) throws NumberFormatException;
    method removeHeader (line 99) | void removeHeader(String name);
    method setHeader (line 107) | void setHeader(String name, String value);

FILE: core/api/src/main/java/cloud/piranha/core/api/HttpSessionManager.java
  type HttpSessionManager (line 43) | public interface HttpSessionManager {
    method addListener (line 51) | <T extends EventListener> void addListener(T listener);
    method attributeAdded (line 60) | void attributeAdded(HttpSession session, String name, Object value);
    method attributeRemoved (line 69) | void attributeRemoved(HttpSession session, String name, Object value);
    method attributeReplaced (line 79) | void attributeReplaced(HttpSession session, String name, Object oldVal...
    method changeSessionId (line 87) | String changeSessionId(HttpServletRequest request);
    method createSession (line 95) | HttpSession createSession(HttpServletRequest request);
    method destroySession (line 102) | void destroySession(HttpSession session);
    method encodeRedirectURL (line 111) | String encodeRedirectURL(HttpServletResponse response, String url);
    method encodeURL (line 120) | String encodeURL(HttpServletResponse response, String url);
    method getDefaultSessionTrackingModes (line 125) | Set<SessionTrackingMode> getDefaultSessionTrackingModes();
    method getEffectiveSessionTrackingModes (line 130) | Set<SessionTrackingMode> getEffectiveSessionTrackingModes();
    method getSession (line 137) | HttpSession getSession(HttpServletRequest request, String currentSessi...
    method getSessionCookieConfig (line 142) | SessionCookieConfig getSessionCookieConfig();
    method getSessionTimeout (line 149) | int getSessionTimeout();
    method hasSession (line 157) | boolean hasSession(String sessionId);
    method setSessionTimeout (line 164) | void setSessionTimeout(int timeout);
    method setSessionTrackingModes (line 171) | void setSessionTrackingModes(Set<SessionTrackingMode> sessionTrackingM...
    method setWebApplication (line 178) | void setWebApplication(WebApplication webApplication);

FILE: core/api/src/main/java/cloud/piranha/core/api/JspManager.java
  type JspManager (line 38) | public interface JspManager {
    method addJspFile (line 48) | ServletRegistration.Dynamic addJspFile(WebApplication webApplication, ...
    method getJspConfigDescriptor (line 53) | JspConfigDescriptor getJspConfigDescriptor();
    method setJspConfigDescriptor (line 60) | void setJspConfigDescriptor(JspConfigDescriptor jspConfigDescriptor);

FILE: core/api/src/main/java/cloud/piranha/core/api/LocaleEncodingManager.java
  type LocaleEncodingManager (line 35) | public interface LocaleEncodingManager {
    method addCharacterEncoding (line 43) | void addCharacterEncoding(String locale, String encoding);
    method getCharacterEncoding (line 51) | String getCharacterEncoding(String locale);

FILE: core/api/src/main/java/cloud/piranha/core/api/ModuleLayerProcessor.java
  type ModuleLayerProcessor (line 34) | public interface ModuleLayerProcessor {
    method processModuleLayerOptions (line 40) | void processModuleLayerOptions(ModuleLayer.Controller controller);

FILE: core/api/src/main/java/cloud/piranha/core/api/MultiPartManager.java
  type MultiPartManager (line 39) | public interface MultiPartManager {
    method getParts (line 49) | Collection<Part> getParts(WebApplication webApplication, WebApplicatio...
    method getPart (line 60) | Part getPart(WebApplication webApplication, WebApplicationRequest requ...

FILE: core/api/src/main/java/cloud/piranha/core/api/ObjectInstanceManager.java
  type ObjectInstanceManager (line 40) | public interface ObjectInstanceManager {
    method createFilter (line 50) | <T extends Filter> T createFilter(Class<T> filterClass) throws Servlet...
    method createListener (line 60) | <T extends EventListener> T createListener(Class<T> clazz) throws Serv...
    method createServlet (line 70) | <T extends Servlet> T createServlet(Class<T> clazz) throws ServletExce...

FILE: core/api/src/main/java/cloud/piranha/core/api/Piranha.java
  type Piranha (line 35) | public interface Piranha {
    method getConfiguration (line 42) | PiranhaConfiguration getConfiguration();

FILE: core/api/src/main/java/cloud/piranha/core/api/PiranhaBuilder.java
  type PiranhaBuilder (line 36) | public interface PiranhaBuilder<T> {
    method build (line 43) | public T build();

FILE: core/api/src/main/java/cloud/piranha/core/api/PiranhaConfiguration.java
  type PiranhaConfiguration (line 37) | public interface PiranhaConfiguration {
    method getBoolean (line 46) | boolean getBoolean(String key, boolean defaultValue);
    method getClass (line 54) | Class<?> getClass(String key);
    method getFile (line 62) | File getFile(String key);
    method getInteger (line 70) | Integer getInteger(String key);
    method getLong (line 78) | Long getLong(String key);
    method getString (line 86) | String getString(String key);
    method setBoolean (line 94) | void setBoolean(String key, Boolean value);
    method setClass (line 102) | void setClass(String key, Class<?> value);
    method setFile (line 110) | void setFile(String key, File value);
    method setInteger (line 118) | void setInteger(String key, Integer value);
    method setLong (line 126) | void setLong(String key, Long value);
    method setString (line 134) | void setString(String key, String value);

FILE: core/api/src/main/java/cloud/piranha/core/api/SecurityConstraint.java
  class SecurityConstraint (line 38) | public class SecurityConstraint {
    method SecurityConstraint (line 58) | public SecurityConstraint() {
    method getRoleNames (line 69) | public List<String> getRoleNames() {
    method getSecurityWebResourceCollections (line 78) | public List<SecurityWebResourceCollection> getSecurityWebResourceColle...
    method getTransportGuarantee (line 87) | public String getTransportGuarantee() {
    method setRoleNames (line 96) | public void setRoleNames(List<String> roleNames) {
    method setSecurityWebResourceCollections (line 105) | public void setSecurityWebResourceCollections(
    method setTransportGuarantee (line 115) | public void setTransportGuarantee(String transportGuarantee) {

FILE: core/api/src/main/java/cloud/piranha/core/api/SecurityManager.java
  type SecurityManager (line 45) | public interface SecurityManager {
    type AuthenticateSource (line 50) | enum AuthenticateSource {
    type UsernamePasswordLoginHandler (line 65) | interface UsernamePasswordLoginHandler {
      method login (line 75) | AuthenticatedIdentity login(HttpServletRequest request, String usern...
    method authenticate (line 87) | boolean authenticate(HttpServletRequest request, HttpServletResponse r...
    method authenticate (line 100) | default boolean authenticate(HttpServletRequest request, HttpServletRe...
    method declareRoles (line 112) | void declareRoles(String[] roles);
    method declareRoles (line 119) | default void declareRoles(Collection<String> roles) {
    method getAuthMethod (line 130) | default String getAuthMethod() {
    method getAuthenticatedRequest (line 145) | default HttpServletRequest getAuthenticatedRequest(HttpServletRequest ...
    method getAuthenticatedResponse (line 160) | default HttpServletResponse getAuthenticatedResponse(HttpServletReques...
    method getDenyUncoveredHttpMethods (line 169) | default boolean getDenyUncoveredHttpMethods() {
    method getFormErrorPage (line 178) | default String getFormErrorPage() {
    method getFormLoginPage (line 187) | default String getFormLoginPage() {
    method getRealmName (line 196) | default String getRealmName() {
    method getRoles (line 205) | Set<String> getRoles();
    method getSecurityConstraints (line 212) | List<SecurityConstraint> getSecurityConstraints();
    method getSecurityRoleReferences (line 219) | Map<String, List<SecurityRoleReference>> getSecurityRoleReferences();
    method getUsernamePasswordLoginHandler (line 227) | default UsernamePasswordLoginHandler getUsernamePasswordLoginHandler() {
    method getWebApplication (line 236) | WebApplication getWebApplication();
    method isCallerAuthorizedForResource (line 253) | default boolean isCallerAuthorizedForResource(HttpServletRequest reque...
    method isRequestSecurityAsRequired (line 270) | default boolean isRequestSecurityAsRequired(HttpServletRequest request...
    method isRequestedResourcePublic (line 282) | default boolean isRequestedResourcePublic(HttpServletRequest request) {
    method isUserInRole (line 293) | boolean isUserInRole(HttpServletRequest request, String role);
    method login (line 303) | void login(HttpServletRequest request, String username, String passwor...
    method logout (line 312) | void logout(HttpServletRequest request, HttpServletResponse response) ...
    method postRequestProcess (line 327) | default void postRequestProcess(HttpServletRequest request, HttpServle...
    method setAuthMethod (line 335) | default void setAuthMethod(String authMethod) {
    method setDenyUncoveredHttpMethods (line 343) | default void setDenyUncoveredHttpMethods(boolean denyUncoveredHttpMeth...
    method setFormErrorPage (line 351) | default void setFormErrorPage(String formErrorPage) {
    method setFormLoginPage (line 359) | default void setFormLoginPage(String formLoginPage) {
    method setRealmName (line 367) | default void setRealmName(String realmName) {
    method setSecurityConstraints (line 375) | void setSecurityConstraints(List<SecurityConstraint> securityConstrain...
    method setSecurityRoleReferences (line 382) | void setSecurityRoleReferences(Map<String, List<SecurityRoleReference>...
    method setUsernamePasswordLoginHandler (line 390) | default void setUsernamePasswordLoginHandler(UsernamePasswordLoginHand...
    method setWebApplication (line 399) | void setWebApplication(WebApplication webApplication);

FILE: core/api/src/main/java/cloud/piranha/core/api/SecurityRoleReference.java
  class SecurityRoleReference (line 35) | public class SecurityRoleReference {
    method SecurityRoleReference (line 50) | public SecurityRoleReference() {
    method getRoleLink (line 58) | public String getRoleLink() {
    method getRoleName (line 67) | public String getRoleName() {
    method setRoleLink (line 76) | public void setRoleLink(String roleLink) {
    method setRoleName (line 85) | public void setRoleName(String roleName) {

FILE: core/api/src/main/java/cloud/piranha/core/api/SecurityWebResourceCollection.java
  class SecurityWebResourceCollection (line 39) | public class SecurityWebResourceCollection {
    method SecurityWebResourceCollection (line 59) | public SecurityWebResourceCollection() {
    method getHttpMethods (line 70) | public List<String> getHttpMethods() {
    method getHttpMethodOmissions (line 79) | public List<String> getHttpMethodOmissions() {
    method getUrlPatterns (line 88) | public List<String> getUrlPatterns() {
    method setHttpMethods (line 97) | public void setHttpMethods(List<String> httpMethods) {
    method setHttpMethodOmissions (line 106) | public void setHttpMethodOmissions(List<String> httpMethodOmissions) {
    method setUrlPatterns (line 115) | public void setUrlPatterns(List<String> urlPatterns) {

FILE: core/api/src/main/java/cloud/piranha/core/api/ServletEnvironment.java
  type ServletEnvironment (line 40) | public interface ServletEnvironment extends Dynamic, ServletConfig {
    method getLoadOnStartup (line 51) | int getLoadOnStartup();
    method getMultipartConfig (line 56) | MultipartConfigElement getMultipartConfig();
    method getServlet (line 61) | Servlet getServlet();
    method getServletClass (line 67) | Class<? extends Servlet> getServletClass();
    method getStatus (line 72) | int getStatus();
    method getWebApplication (line 77) | WebApplication getWebApplication();
    method isAsyncSupported (line 84) | boolean isAsyncSupported();
    method setClassName (line 92) | void setClassName(String className);
    method setServlet (line 99) | void setServlet(Servlet servlet);
    method setStatus (line 106) | void setStatus(int status);
    method getUnavailableException (line 113) | Throwable getUnavailableException();
    method setUnavailableException (line 120) | void setUnavailableException(Throwable unavailableException);

FILE: core/api/src/main/java/cloud/piranha/core/api/ServletInvocation.java
  type ServletInvocation (line 45) | public interface ServletInvocation {
    method getInvocationPath (line 52) | String getInvocationPath();
    method getServletName (line 57) | String getServletName();
    method getServletPath (line 62) | String getServletPath();
    method getOriginalServletPath (line 74) | default String getOriginalServletPath() {
    method getPathInfo (line 81) | String getPathInfo();
    method getApplicationRequestMapping (line 86) | WebApplicationRequestMapping getApplicationRequestMapping();
    method getServletEnvironment (line 91) | ServletEnvironment getServletEnvironment();
    method getFilterEnvironments (line 96) | List<FilterEnvironment> getFilterEnvironments();
    method getFilterChain (line 101) | FilterChain getFilterChain();
    method isFromNamed (line 106) | default boolean isFromNamed() {
    method setFromNamed (line 115) | default void setFromNamed(boolean fromNamed) {
    method hasServlet (line 124) | default boolean hasServlet() {
    method hasFilter (line 133) | default boolean hasFilter() {
    method isServletUnavailable (line 142) | default boolean isServletUnavailable() {
    method canInvoke (line 151) | default boolean canInvoke() {
    method getServletConfig (line 158) | default ServletConfig getServletConfig() {

FILE: core/api/src/main/java/cloud/piranha/core/api/ServletRequestManager.java
  type ServletRequestManager (line 40) | public interface ServletRequestManager {
    method addListener (line 48) | <T extends EventListener> void addListener(T listener);
    method attributeAdded (line 57) | void attributeAdded(HttpServletRequest request, String name, Object va...
    method attributeRemoved (line 66) | void attributeRemoved(HttpServletRequest request, String name, Object ...
    method attributeReplaced (line 75) | void attributeReplaced(HttpServletRequest request, String name, Object...
    method requestDestroyed (line 82) | void requestDestroyed(ServletRequest request);
    method requestInitialized (line 89) | void requestInitialized(ServletRequest request);

FILE: core/api/src/main/java/cloud/piranha/core/api/WebApplication.java
  type WebApplication (line 52) | public interface WebApplication extends ServletContext {
    type Status (line 57) | enum Status {
    method addFilterMapping (line 95) | default Set<String> addFilterMapping(String filterName, String... urlP...
    method addFilterMapping (line 110) | default Set<String> addFilterMapping(String filterName, boolean isMatc...
    method addFilterMapping (line 127) | Set<String> addFilterMapping(Set<DispatcherType> dispatcherTypes, Stri...
    method addInitializer (line 134) | void addInitializer(String className);
    method addInitializer (line 142) | void addInitializer(ServletContainerInitializer servletContainerInitia...
    method addMimeType (line 150) | void addMimeType(String extension, String mimeType);
    method addResource (line 157) | void addResource(Resource resource);
    method addServletMapping (line 167) | Set<String> addServletMapping(String servletName, String... urlPatterns);
    method destroy (line 174) | WebApplication destroy();
    method getDefaultServlet (line 181) | Servlet getDefaultServlet();
    method getInitializers (line 188) | List<ServletContainerInitializer> getInitializers();
    method getManager (line 195) | WebApplicationManager getManager();
    method getMappings (line 204) | Collection<String> getMappings(String servletName);
    method getRequest (line 212) | ServletRequest getRequest(ServletResponse response);
    method getResponse (line 220) | ServletResponse getResponse(ServletRequest request);
    method getServletContextId (line 228) | default String getServletContextId() {
    method getStatus (line 237) | Status getStatus();
    method initialize (line 244) | WebApplication initialize();
    method isDistributable (line 251) | boolean isDistributable();
    method isInitialized (line 258) | boolean isInitialized();
    method isMetadataComplete (line 265) | boolean isMetadataComplete();
    method isServicing (line 272) | boolean isServicing();
    method linkRequestAndResponse (line 280) | void linkRequestAndResponse(ServletRequest request, ServletResponse re...
    method removeServletMapping (line 289) | String removeServletMapping(String urlPattern);
    method service (line 299) | void service(ServletRequest request, ServletResponse response)
    method setClassLoader (line 307) | void setClassLoader(ClassLoader classLoader);
    method setContextPath (line 314) | void setContextPath(String contextPath);
    method setDefaultServlet (line 321) | void setDefaultServlet(Servlet defaultServlet);
    method setDistributable (line 328) | void setDistributable(boolean distributable);
    method setEffectiveMajorVersion (line 335) | void setEffectiveMajorVersion(int version);
    method setEffectiveMinorVersion (line 342) | void setEffectiveMinorVersion(int version);
    method setJspConfigDescriptor (line 349) | void setJspConfigDescriptor(JspConfigDescriptor descriptor);
    method setMetadataComplete (line 356) | void setMetadataComplete(boolean metadataComplete);
    method setServletContextName (line 363) | void setServletContextName(String servletContextName);
    method setStatus (line 370) | void setStatus(Status status);
    method setVirtualServerName (line 377) | void setVirtualServerName(String virtualServerName);
    method setWebApplicationRequestMapper (line 384) | void setWebApplicationRequestMapper(WebApplicationRequestMapper webApp...
    method start (line 391) | WebApplication start();
    method stop (line 398) | WebApplication stop();
    method unlinkRequestAndResponse (line 406) | void unlinkRequestAndResponse(ServletRequest request, ServletResponse ...

FILE: core/api/src/main/java/cloud/piranha/core/api/WebApplicationClassLoader.java
  type WebApplicationClassLoader (line 37) | public interface WebApplicationClassLoader extends ResourceManagerClassL...

FILE: core/api/src/main/java/cloud/piranha/core/api/WebApplicationExtension.java
  type WebApplicationExtension (line 41) | public interface WebApplicationExtension {
    method configure (line 48) | default void configure(WebApplication webApplication) {
    method extend (line 56) | default void extend(WebApplicationExtensionContext context) {

FILE: core/api/src/main/java/cloud/piranha/core/api/WebApplicationExtensionContext.java
  type WebApplicationExtensionContext (line 35) | public interface WebApplicationExtensionContext {
    method add (line 47) | void add(Class<? extends WebApplicationExtension> extension);
    method add (line 59) | void add(WebApplicationExtension extension);
    method remove (line 76) | void remove(Class<? extends WebApplicationExtension> extension);

FILE: core/api/src/main/java/cloud/piranha/core/api/WebApplicationInputStream.java
  class WebApplicationInputStream (line 50) | public abstract class WebApplicationInputStream extends ServletInputStre...
    method WebApplicationInputStream (line 85) | public WebApplicationInputStream() {
    method close (line 89) | @Override
    method getReadListener (line 100) | public ReadListener getReadListener() {
    method isFinished (line 104) | @Override
    method isReady (line 109) | @Override
    method read (line 123) | @Override
    method readWithTimeout (line 147) | private int readWithTimeout() {
    method run (line 173) | @Override
    method setInputStream (line 213) | public void setInputStream(InputStream inputStream) {
    method setReadListener (line 217) | @Override
    method setWebApplicationRequest (line 238) | public void setWebApplicationRequest(WebApplicationRequest webApplicat...

FILE: core/api/src/main/java/cloud/piranha/core/api/WebApplicationManager.java
  type WebApplicationManager (line 42) | public interface WebApplicationManager {
    method getAnnotationManager (line 49) | AnnotationManager getAnnotationManager();
    method getAsyncManager (line 56) | AsyncManager getAsyncManager();
    method getErrorPageManager (line 63) | ErrorPageManager getErrorPageManager();
    method getDispatcherManager (line 70) | DispatcherManager getDispatcherManager();
    method getHandlesTypesManager (line 77) | HandlesTypesManager getHandlesTypesManager();
    method getHttpSessionManager (line 84) | HttpSessionManager getHttpSessionManager();
    method getJspManager (line 91) | JspManager getJspManager();
    method getLocaleEncodingManager (line 98) | LocaleEncodingManager getLocaleEncodingManager();
    method getMultiPartManager (line 105) | MultiPartManager getMultiPartManager();
    method getObjectInstanceManager (line 112) | ObjectInstanceManager getObjectInstanceManager();
    method getResourceManager (line 119) | ResourceManager getResourceManager();
    method getSecurityManager (line 126) | SecurityManager getSecurityManager();
    method getServletRequestManager (line 133) | ServletRequestManager getServletRequestManager();
    method getWelcomeFileManager (line 140) | WelcomeFileManager getWelcomeFileManager();
    method setAnnotationManager (line 147) | void setAnnotationManager(AnnotationManager annotationManager);
    method setAsyncManager (line 154) | void setAsyncManager(AsyncManager asyncManager);
    method setErrorPageManager (line 161) | void setErrorPageManager(ErrorPageManager errorPageManager);
    method setHandlesTypesManager (line 168) | void setHandlesTypesManager(HandlesTypesManager handlesTypesManager);
    method setHttpSessionManager (line 175) | void setHttpSessionManager(HttpSessionManager httpSessionManager);
    method setJspManager (line 182) | void setJspManager(JspManager jspManager);
    method setLocaleEncodingManager (line 189) | void setLocaleEncodingManager(LocaleEncodingManager localeEncodingMana...
    method setMultiPartManager (line 196) | void setMultiPartManager(MultiPartManager multiPartManager);
    method setObjectInstanceManager (line 203) | void setObjectInstanceManager(ObjectInstanceManager objectInstanceMana...
    method setResourceManager (line 210) | void setResourceManager(ResourceManager resourceManager);
    method setSecurityManager (line 217) | void setSecurityManager(SecurityManager securityManager);
    method setServletRequestManager (line 224) | void setServletRequestManager(ServletRequestManager servletRequestMana...
    method setWelcomeFileManager (line 231) | void setWelcomeFileManager(WelcomeFileManager welcomeFileManager);

FILE: core/api/src/main/java/cloud/piranha/core/api/WebApplicationOutputStream.java
  class WebApplicationOutputStream (line 40) | public abstract class WebApplicationOutputStream extends ServletOutputSt...
    method WebApplicationOutputStream (line 45) | protected WebApplicationOutputStream() {
    method flushBuffer (line 53) | public abstract void flushBuffer() throws IOException;
    method getBufferSize (line 60) | public abstract int getBufferSize();
    method getOutputStream (line 67) | public abstract OutputStream getOutputStream();
    method getResponse (line 74) | public abstract WebApplicationResponse getResponse();
    method getWriteListener (line 81) | public abstract WriteListener getWriteListener();
    method resetBuffer (line 86) | public abstract void resetBuffer();
    method setBufferSize (line 93) | public abstract void setBufferSize(int bufferSize);
    method setOutputStream (line 100) | public abstract void setOutputStream(OutputStream outputStream);
    method setResponse (line 107) | public abstract void setResponse(WebApplicationResponse response);

FILE: core/api/src/main/java/cloud/piranha/core/api/WebApplicationPrintWriter.java
  class WebApplicationPrintWriter (line 38) | public class WebApplicationPrintWriter extends PrintWriter {
    method WebApplicationPrintWriter (line 52) | public WebApplicationPrintWriter(WebApplicationResponse response, Writ...

FILE: core/api/src/main/java/cloud/piranha/core/api/WebApplicationRequest.java
  type WebApplicationRequest (line 42) | public interface WebApplicationRequest extends HttpServletRequest {
    method getModifiableParameterMap (line 49) | Map<String, String[]> getModifiableParameterMap();
    method getMultipartConfig (line 54) | default MultipartConfigElement getMultipartConfig() {
    method getUpgradeHandler (line 61) | default HttpUpgradeHandler getUpgradeHandler() {
    method getWebApplicationInputStream (line 70) | default WebApplicationInputStream getWebApplicationInputStream() {
    method isUpgraded (line 77) | default boolean isUpgraded() {
    method setAsyncSupported (line 86) | void setAsyncSupported(boolean asyncSupported);
    method setAuthType (line 93) | void setAuthType(String authType);
    method setContextPath (line 100) | void setContextPath(String contextPath);
    method setDispatcherType (line 107) | void setDispatcherType(DispatcherType dispatcherType);
    method setRequestedSessionId (line 114) | default void setRequestedSessionId(String requestedSessionId) {
    method setServletPath (line 122) | void setServletPath(String servletPath);
    method setUserPrincipal (line 129) | void setUserPrincipal(Principal userPrincipal);
    method setWebApplication (line 136) | void setWebApplication(WebApplication webApplication);
    method setPathInfo (line 143) | default void setPathInfo(String pathInfo) {
    method setQueryString (line 151) | default void setQueryString(String queryString) {
    method setWebApplicationInputStream (line 159) | default void setWebApplicationInputStream(

FILE: core/api/src/main/java/cloud/piranha/core/api/WebApplicationRequestMapper.java
  type WebApplicationRequestMapper (line 40) | public interface WebApplicationRequestMapper {
    method addServletMapping (line 59) | Set<String> addServletMapping(String servletName, String... urlPatterns);
    method removeServletMapping (line 67) | String removeServletMapping(String urlPattern);
    method addFilterMapping (line 79) | default Set<String> addFilterMapping(String filterName, String... urlP...
    method addFilterMapping (line 94) | Set<String> addFilterMapping(Set<DispatcherType> dispatcherTypes, Stri...
    method addFilterMappingBeforeExisting (line 107) | default Set<String> addFilterMappingBeforeExisting(String filterName, ...
    method addFilterMappingBeforeExisting (line 123) | Set<String> addFilterMappingBeforeExisting(Set<DispatcherType> dispatc...
    method findFilterMappings (line 132) | default Collection<String> findFilterMappings(String path) {
    method findFilterMappings (line 143) | Collection<String> findFilterMappings(DispatcherType dispatcherType, S...
    method findServletMapping (line 151) | WebApplicationRequestMapping findServletMapping(String path);
    method getServletMappings (line 159) | Collection<String> getServletMappings(String servletName);
    method getDefaultServlet (line 166) | default String getDefaultServlet() {
    method getServletName (line 176) | String getServletName(String mapping);

FILE: core/api/src/main/java/cloud/piranha/core/api/WebApplicationRequestMapping.java
  type WebApplicationRequestMapping (line 35) | public interface WebApplicationRequestMapping {
    method getMatchValue (line 40) | String getMatchValue();
    method getPattern (line 45) | String getPattern();
    method isExact (line 52) | boolean isExact();
    method isExtension (line 59) | boolean isExtension();

FILE: core/api/src/main/java/cloud/piranha/core/api/WebApplicationResponse.java
  type WebApplicationResponse (line 39) | public interface WebApplicationResponse extends HttpServletResponse {
    method closeAsyncResponse (line 44) | void closeAsyncResponse();
    method getContentLanguage (line 51) | String getContentLanguage();
    method getContentLength (line 58) | long getContentLength();
    method getCookies (line 63) | Collection<Cookie> getCookies();
    method getResponseCloser (line 68) | Runnable getResponseCloser();
    method getStatusMessage (line 75) | String getStatusMessage();
    method getWebApplication (line 82) | WebApplication getWebApplication();
    method getWebApplicationOutputStream (line 87) | WebApplicationOutputStream getWebApplicationOutputStream();
    method isBodyOnly (line 94) | boolean isBodyOnly();
    method isBufferResetting (line 101) | boolean isBufferResetting();
    method isWriterAcquired (line 108) | boolean isWriterAcquired();
    method setCommitted (line 115) | void setCommitted(boolean committed);
    method setBodyOnly (line 122) | void setBodyOnly(boolean bodyOnly);
    method setResponseCloser (line 129) | void setResponseCloser(Runnable responseCloser);
    method setWebApplication (line 136) | void setWebApplication(WebApplication webApplication);
    method setWebApplicationOutputStream (line 143) | void setWebApplicationOutputStream(WebApplicationOutputStream outputSt...

FILE: core/api/src/main/java/cloud/piranha/core/api/WebApplicationServer.java
  type WebApplicationServer (line 38) | public interface WebApplicationServer {
    method addWebApplication (line 45) | void addWebApplication(WebApplication webApplication);
    method getRequestMapper (line 50) | WebApplicationServerRequestMapper getRequestMapper();
    method service (line 60) | void service(WebApplicationRequest request, WebApplicationResponse res...
    method initialize (line 66) | void initialize();
    method setRequestMapper (line 73) | void setRequestMapper(WebApplicationServerRequestMapper requestMapper);
    method start (line 78) | void start();
    method stop (line 83) | void stop();

FILE: core/api/src/main/java/cloud/piranha/core/api/WebApplicationServerRequestMapper.java
  type WebApplicationServerRequestMapper (line 37) | public interface WebApplicationServerRequestMapper {
    method addMapping (line 46) | Set<String> addMapping(WebApplication webApplication, String... urlPat...
    method findMapping (line 54) | WebApplication findMapping(String path);

FILE: core/api/src/main/java/cloud/piranha/core/api/WelcomeFileManager.java
  type WelcomeFileManager (line 37) | public interface WelcomeFileManager {
    method addWelcomeFile (line 44) | void addWelcomeFile(String welcomeFile);
    method getWelcomeFileList (line 49) | List<String> getWelcomeFileList();

FILE: core/api/src/test/java/cloud/piranha/core/api/AttributeManagerTest.java
  class AttributeManagerTest (line 42) | class AttributeManagerTest {
    method setUp (line 47) | @BeforeEach
    method testGetAttribute (line 73) | @Test
    method testGetAttributeNames (line 79) | @Test
    method testRemoveAttribute (line 89) | @Test
    method testSetAttribute (line 96) | @Test
    method testContainsAttribute (line 102) | @Test

FILE: core/impl/src/main/java/cloud/piranha/core/impl/AsyncHttpDispatchWrapper.java
  class AsyncHttpDispatchWrapper (line 59) | public class AsyncHttpDispatchWrapper extends HttpServletRequestWrapper ...
    method AsyncHttpDispatchWrapper (line 111) | public AsyncHttpDispatchWrapper(HttpServletRequest request) {
    method getModifiableParameterMap (line 116) | @Override
    method getRequest (line 121) | @Override
    method getDispatcherType (line 126) | @Override
    method getServletPath (line 131) | @Override
    method getPathInfo (line 136) | @Override
    method setPathInfo (line 141) | @Override
    method getRequestURI (line 146) | @Override
    method setRequestURI (line 156) | public void setRequestURI(String requestURI) {
    method getQueryString (line 160) | @Override
    method startAsync (line 165) | @Override
    method startAsync (line 170) | @Override
    method isAsyncStarted (line 183) | @Override
    method getAttributeNames (line 188) | @Override
    method getAttribute (line 197) | @Override
    method setAttribute (line 206) | @Override
    method removeAttribute (line 215) | @Override
    method getParameter (line 230) | @Override
    method getParameterMap (line 242) | @Override
    method getParameterNames (line 254) | @Override
    method getParameterValues (line 267) | @Override
    method setQueryString (line 276) | @Override
    method setAsWrapperAttribute (line 287) | public void setAsWrapperAttribute(String name, Object value) {
    method getWrapperAttributes (line 294) | public List<String> getWrapperAttributes() {
    method getWrapperParameters (line 301) | public Map<String, String[]> getWrapperParameters() {
    method setDispatcherType (line 305) | @Override
    method toString (line 310) | @Override
    method getRequestURIWithQueryString (line 318) | public String getRequestURIWithQueryString() {
    method setContextPath (line 327) | @Override
    method setServletPath (line 332) | @Override
    method setAuthType (line 337) | @Override
    method setUserPrincipal (line 342) | @Override
    method setWebApplication (line 347) | @Override
    method getMultipartConfig (line 352) | @Override
    method setAsyncSupported (line 357) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/AsyncNonHttpDispatchWrapper.java
  class AsyncNonHttpDispatchWrapper (line 40) | public class AsyncNonHttpDispatchWrapper extends ServletRequestWrapper {
    method AsyncNonHttpDispatchWrapper (line 47) | public AsyncNonHttpDispatchWrapper(ServletRequest request) {
    method getDispatcherType (line 51) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/CookieParser.java
  class CookieParser (line 39) | public class CookieParser {
    method CookieParser (line 46) | private CookieParser() {
    method parse (line 58) | public static Cookie[] parse(String cookieValues) {
    method parseNetscape (line 66) | private static Cookie[] parseNetscape(String cookiesValue) {
    method parseRFC2109 (line 84) | @SuppressWarnings({"removal"})
    method removeQuotes (line 117) | private static String removeQuotes(String value) {

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultAnnotationManager.java
  class DefaultAnnotationManager (line 45) | public class DefaultAnnotationManager implements AnnotationManager {
    method DefaultAnnotationManager (line 55) | public DefaultAnnotationManager() {
    method addAnnotatedClass (line 58) | @Override
    method addAnnotation (line 74) | @Override
    method addInstance (line 81) | @Override
    method getAnnotations (line 88) | @Override
    method getAnnotations (line 93) | @Override
    method getInstances (line 98) | @Override
    method getInstances (line 103) | @Override
    method getAnnotationsByTarget (line 108) | @Override
    method getAnnotatedClass (line 113) | @Override
    method getAnnotatedClasses (line 118) | @SuppressWarnings("unchecked")

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultAsyncContext.java
  class DefaultAsyncContext (line 59) | public class DefaultAsyncContext implements AsyncContext {
    method DefaultAsyncContext (line 139) | public DefaultAsyncContext(ServletRequest asyncStartRequest, ServletRe...
    method addListener (line 149) | @Override
    method addListener (line 154) | @Override
    method createListener (line 159) | @Override
    method dispatch (line 172) | @Override
    method dispatch (line 186) | @Override
    method dispatch (line 197) | @Override
    method complete (line 210) | @Override
    method onTimeOut (line 241) | public void onTimeOut() {
    method getRequest (line 267) | @Override
    method getResponse (line 272) | @Override
    method getTimeout (line 277) | @Override
    method hasOriginalRequestAndResponse (line 282) | @Override
    method setTimeout (line 287) | @Override
    method start (line 297) | @Override
    method unwrapFully (line 311) | @SuppressWarnings("unchecked")
    method unwrapFully (line 327) | @SuppressWarnings("unchecked")

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultAsyncDispatcher.java
  class DefaultAsyncDispatcher (line 45) | public class DefaultAsyncDispatcher implements AsyncDispatcher {
    method DefaultAsyncDispatcher (line 80) | public DefaultAsyncDispatcher(WebApplication webApplication, String pa...
    method dispatch (line 87) | @Override
    method addAsyncWrapper (line 109) | private ServletRequest addAsyncWrapper(ServletRequest request) {

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultAsyncManager.java
  class DefaultAsyncManager (line 41) | public class DefaultAsyncManager implements AsyncManager {
    method DefaultAsyncManager (line 46) | public DefaultAsyncManager() {
    method getDispatcher (line 49) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultAttributeManager.java
  class DefaultAttributeManager (line 41) | public class DefaultAttributeManager implements AttributeManager {
    method DefaultAttributeManager (line 51) | public DefaultAttributeManager() {
    method getAttribute (line 55) | @Override
    method getAttributeNames (line 60) | @Override
    method removeAttribute (line 65) | @Override
    method setAttribute (line 70) | @Override
    method containsAttribute (line 79) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultAuthenticatedIdentity.java
  class DefaultAuthenticatedIdentity (line 54) | public class DefaultAuthenticatedIdentity implements AuthenticatedIdenti...
    method DefaultAuthenticatedIdentity (line 82) | public DefaultAuthenticatedIdentity(Principal callerPrincipal, Set<Str...
    method setCurrentIdentity (line 93) | public static void setCurrentIdentity(Principal callerPrincipal, Set<S...
    method setCurrentIdentity (line 102) | public static void setCurrentIdentity(AuthenticatedIdentity identity) {
    method getCurrentSubject (line 116) | public static Subject getCurrentSubject() {
    method getCurrentIdentity (line 123) | public static AuthenticatedIdentity getCurrentIdentity() {
    method clear (line 130) | public static void clear() {
    method getCallerPrincipal (line 135) | @Override
    method getGroups (line 140) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultCurrentRequestHolder.java
  class DefaultCurrentRequestHolder (line 39) | public class DefaultCurrentRequestHolder implements CurrentRequestHolder {
    method DefaultCurrentRequestHolder (line 51) | public DefaultCurrentRequestHolder(HttpServletRequest request) {
    method getRequest (line 55) | @SuppressWarnings("unchecked")
    method setRequest (line 61) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultDispatcherManager.java
  class DefaultDispatcherManager (line 40) | public class DefaultDispatcherManager implements DispatcherManager {
    method DefaultDispatcherManager (line 50) | public DefaultDispatcherManager() {
    method getNamedDispatcher (line 53) | @Override
    method setWebApplication (line 64) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultErrorPageManager.java
  class DefaultErrorPageManager (line 42) | public class DefaultErrorPageManager implements ErrorPageManager {
    method DefaultErrorPageManager (line 57) | public DefaultErrorPageManager() {
    method addErrorPage (line 60) | @Override
    method addErrorPage (line 65) | @Override
    method getErrorPage (line 70) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultFilterChain.java
  class DefaultFilterChain (line 49) | public class DefaultFilterChain implements FilterChain {
    method DefaultFilterChain (line 80) | public DefaultFilterChain() {
    method DefaultFilterChain (line 89) | public DefaultFilterChain(ServletInvocation servletInvocation, Servlet...
    method DefaultFilterChain (line 100) | public DefaultFilterChain(Filter filter, FilterChain nextFilterChain) {
    method doFilter (line 113) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultFilterEnvironment.java
  class DefaultFilterEnvironment (line 53) | public class DefaultFilterEnvironment implements FilterEnvironment {
    method DefaultFilterEnvironment (line 101) | public DefaultFilterEnvironment() {
    method DefaultFilterEnvironment (line 114) | public DefaultFilterEnvironment(WebApplication webApp, String filterNa...
    method addMappingForServletNames (line 122) | @Override
    method addMappingForUrlPatterns (line 129) | @Override
    method getClassName (line 135) | @Override
    method getFilter (line 140) | @Override
    method getFilterName (line 145) | @Override
    method getInitParameter (line 150) | @Override
    method getInitParameterNames (line 155) | @Override
    method getInitParameters (line 160) | @Override
    method getName (line 165) | @Override
    method getServletContext (line 170) | @Override
    method getServletNameMappings (line 175) | @Override
    method getStatus (line 185) | public int getStatus() {
    method getUrlPatternMappings (line 189) | @Override
    method getWebApplication (line 194) | @Override
    method initialize (line 199) | @Override
    method isAsyncSupported (line 211) | @Override
    method setAsyncSupported (line 216) | @Override
    method setClassName (line 221) | @Override
    method setFilterName (line 226) | @Override
    method setInitParameter (line 231) | @Override
    method setInitParameters (line 241) | @Override
    method setStatus (line 262) | @Override
    method setWebApplication (line 267) | @Override
    method toString (line 272) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultFilterMapping.java
  class DefaultFilterMapping (line 40) | public class DefaultFilterMapping implements FilterMapping {
    method DefaultFilterMapping (line 63) | public DefaultFilterMapping(String filterName, String urlPattern) {
    method DefaultFilterMapping (line 74) | public DefaultFilterMapping(DispatcherType dispatcherType, String filt...
    method equals (line 80) | @Override
    method getDispatcherType (line 94) | @Override
    method getFilterName (line 99) | @Override
    method getUrlPattern (line 104) | @Override
    method hashCode (line 109) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultHttpHeader.java
  class DefaultHttpHeader (line 40) | public class DefaultHttpHeader implements HttpHeader {
    method DefaultHttpHeader (line 57) | public DefaultHttpHeader(String name, String value) {
    method addValue (line 67) | @Override
    method getName (line 75) | @Override
    method getValue (line 83) | @Override
    method getValues (line 91) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultHttpHeaderManager.java
  class DefaultHttpHeaderManager (line 45) | public class DefaultHttpHeaderManager implements HttpHeaderManager {
    method DefaultHttpHeaderManager (line 60) | @SuppressWarnings("deprecation")
    method addHeader (line 66) | @Override
    method containsHeader (line 76) | @Override
    method getDateHeader (line 81) | @Override
    method getHeader (line 98) | @Override
    method getHeaderNames (line 107) | @Override
    method getHeaders (line 116) | @Override
    method getIntHeader (line 125) | @Override
    method removeHeader (line 140) | @Override
    method setHeader (line 145) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultHttpServletMapping.java
  class DefaultHttpServletMapping (line 38) | public class DefaultHttpServletMapping implements HttpServletMapping {
    method DefaultHttpServletMapping (line 64) | public DefaultHttpServletMapping() {
    method getMappingMatch (line 67) | @Override
    method setMappingMatch (line 77) | public void setMappingMatch(MappingMatch mappingMatch) {
    method getMatchValue (line 81) | @Override
    method setMatchValue (line 91) | public void setMatchValue(String matchValue) {
    method getPattern (line 96) | @Override
    method setPattern (line 106) | public void setPattern(String pattern) {
    method getServletName (line 111) | @Override
    method setServletName (line 121) | public void setServletName(String servletName) {

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultHttpSession.java
  class DefaultHttpSession (line 43) | public class DefaultHttpSession implements HttpSession {
    method DefaultHttpSession (line 95) | public DefaultHttpSession(ServletContext servletContext) {
    method DefaultHttpSession (line 110) | public DefaultHttpSession(ServletContext servletContext, String id, bo...
    method getAttribute (line 119) | @Override
    method getAttributeNames (line 125) | @Override
    method getCreationTime (line 131) | @Override
    method getId (line 137) | @Override
    method getLastAccessedTime (line 142) | @Override
    method getMaxInactiveInterval (line 148) | @Override
    method getServletContext (line 153) | @Override
    method invalidate (line 158) | @Override
    method isNew (line 165) | @Override
    method removeAttribute (line 171) | @Override
    method setAttribute (line 177) | @Override
    method setId (line 201) | public void setId(String id) {
    method setMaxInactiveInterval (line 205) | @Override
    method setNew (line 215) | public void setNew(boolean newFlag) {
    method setSessionManager (line 225) | public void setSessionManager(HttpSessionManager sessionManager) {
    method verifyValid (line 234) | private void verifyValid(String methodName) {
    method setLastAccessedTime (line 245) | public void setLastAccessedTime(long lastAccessedTime) {

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultHttpSessionManager.java
  class DefaultHttpSessionManager (line 72) | public class DefaultHttpSessionManager implements HttpSessionManager, Se...
    method DefaultHttpSessionManager (line 162) | public DefaultHttpSessionManager() {
    method addListener (line 182) | @Override
    method attributeAdded (line 195) | @Override
    method attributeRemoved (line 203) | @Override
    method attributeReplaced (line 211) | @Override
    method changeSessionId (line 222) | @Override
    method createSession (line 238) | @Override
    method destroySession (line 266) | @Override
    method encodeRedirectURL (line 280) | @Override
    method encodeURL (line 285) | @Override
    method getComment (line 290) | @Override
    method getDefaultSessionTrackingModes (line 296) | @Override
    method getDomain (line 301) | @Override
    method getEffectiveSessionTrackingModes (line 306) | @Override
    method getMaxAge (line 311) | @Override
    method getName (line 316) | @Override
    method getPath (line 321) | @Override
    method getSession (line 326) | @Override
    method getSessionCookieConfig (line 331) | @Override
    method getSessionTimeout (line 336) | @Override
    method hasSession (line 341) | @Override
    method isHttpOnly (line 350) | @Override
    method isSecure (line 355) | @Override
    method reapSessions (line 363) | protected void reapSessions() {
    method setComment (line 384) | @Override
    method setDomain (line 392) | @Override
    method setHttpOnly (line 400) | @Override
    method setMaxAge (line 408) | @Override
    method setName (line 416) | @Override
    method setPath (line 424) | @Override
    method setSecure (line 432) | @Override
    method setSessionTimeout (line 440) | @Override
    method setSessionTrackingModes (line 445) | @Override
    method setWebApplication (line 453) | @Override
    method requestInitialized (line 458) | @Override
    method requestDestroyed (line 473) | @Override
    method setAttribute (line 492) | @Override
    method getAttribute (line 517) | @Override
    method getAttributes (line 532) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultInvocationFinder.java
  class DefaultInvocationFinder (line 64) | public class DefaultInvocationFinder {
    method DefaultInvocationFinder (line 82) | public DefaultInvocationFinder(DefaultWebApplication webApplication) {
    method findServletInvocationByPath (line 95) | public DefaultServletInvocation findServletInvocationByPath(String ser...
    method findServletInvocationByPath (line 109) | public DefaultServletInvocation findServletInvocationByPath(Dispatcher...
    method addFilters (line 151) | public DefaultServletInvocation addFilters(DispatcherType dispatcherTy...
    method findServletInvocationByName (line 187) | public DefaultServletInvocation findServletInvocationByName(String ser...
    method getDirectServletInvocationByPath (line 203) | private DefaultServletInvocation getDirectServletInvocationByPath(Stri...
    method getWelcomeFileServletInvocation (line 252) | private DefaultServletInvocation getWelcomeFileServletInvocation(Strin...
    method isStaticResource (line 289) | private boolean isStaticResource(String servletPath, String pathInfo) ...
    method isJsp (line 293) | private static boolean isJsp(String welcomeFile) {
    method addOrRemoveSlashIfNeeded (line 297) | private String addOrRemoveSlashIfNeeded(String string) {
    method getDefaultServletInvocation (line 309) | private DefaultServletInvocation getDefaultServletInvocation(String se...
    method findFilterEnvironments (line 356) | protected List<FilterEnvironment> findFilterEnvironments(DispatcherTyp...
    method findFilterChain (line 379) | private FilterChain findFilterChain(List<FilterEnvironment> filterEnvi...
    method sortOnPriority (line 405) | private int sortOnPriority(FilterEnvironment x, FilterEnvironment y) {

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultJspConfigDescriptor.java
  class DefaultJspConfigDescriptor (line 42) | public class DefaultJspConfigDescriptor implements JspConfigDescriptor {
    method DefaultJspConfigDescriptor (line 52) | public DefaultJspConfigDescriptor() {
    method getTaglibs (line 55) | @Override
    method getJspPropertyGroups (line 60) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultJspManager.java
  class DefaultJspManager (line 40) | public class DefaultJspManager implements JspManager {
    method DefaultJspManager (line 50) | public DefaultJspManager() {
    method addJspFile (line 53) | @Override
    method getJspConfigDescriptor (line 58) | @Override
    method setJspConfigDescriptor (line 63) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultLocaleEncodingManager.java
  class DefaultLocaleEncodingManager (line 39) | public class DefaultLocaleEncodingManager implements LocaleEncodingManag...
    method DefaultLocaleEncodingManager (line 49) | public DefaultLocaleEncodingManager() {
    method addCharacterEncoding (line 62) | @Override
    method getCharacterEncoding (line 67) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultModuleFinder.java
  class DefaultModuleFinder (line 62) | public class DefaultModuleFinder implements ModuleFinder {
    method DefaultModuleFinder (line 119) | public DefaultModuleFinder(List<Resource> resources) {
    method find (line 123) | @Override
    method getModuleName (line 136) | private String getModuleName(Resource resource, String resourceName) {
    method moduleDescriptorFromResource (line 142) | private ModuleDescriptor moduleDescriptorFromResource(Resource resourc...
    method addProviders (line 194) | private void addProviders(ModuleDescriptor.Builder builder, Resource r...
    method packages (line 217) | private Set<String> packages(Resource resource) {
    method normalizeModuleName (line 228) | private String normalizeModuleName(String module) {
    method toPackageName (line 241) | private Optional<String> toPackageName(String name) {
    method moduleInfo (line 251) | private ModuleDescriptor moduleInfo(Resource resource) {
    method deriveAutomaticModuleNameFromManifest (line 264) | private String deriveAutomaticModuleNameFromManifest(Resource resource) {
    method searchAllModules (line 281) | private void searchAllModules() {
    method hasSplitPackages (line 301) | private boolean hasSplitPackages(Map<String, String> packageToExporter...
    method findAll (line 318) | @Override
    method cleanModuleName (line 330) | private static String cleanModuleName(String mn) {

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultModuleLayerProcessor.java
  type DefaultModuleLayerProcessor (line 40) | public enum DefaultModuleLayerProcessor implements ModuleLayerProcessor {
    method processModuleLayerOptions (line 75) | @Override
    method logModuleNotFound (line 96) | private static void logModuleNotFound(String option, String module) {
    method addReads (line 100) | private static void addReads(String property, ModuleLayer moduleLayer,...
    method addExportsOrOpens (line 123) | private static void addExportsOrOpens(String property, ModuleLayer mod...

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultModuleReader.java
  class DefaultModuleReader (line 45) | public class DefaultModuleReader implements ModuleReader {
    method DefaultModuleReader (line 56) | public DefaultModuleReader(Resource resource) {
    method find (line 60) | @Override
    method open (line 69) | @Override
    method list (line 81) | @Override
    method close (line 86) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultModuleReference.java
  class DefaultModuleReference (line 43) | public class DefaultModuleReference extends ModuleReference {
    method DefaultModuleReference (line 57) | public DefaultModuleReference(ModuleDescriptor descriptor, URI locatio...
    method open (line 62) | @Override
    method getResource (line 67) | Resource getResource() {

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultMultiPartManager.java
  class DefaultMultiPartManager (line 47) | public class DefaultMultiPartManager implements MultiPartManager {
    method DefaultMultiPartManager (line 52) | public DefaultMultiPartManager() {
    method getParts (line 55) | @Override
    method getPart (line 60) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultNamedRequestDispatcher.java
  class DefaultNamedRequestDispatcher (line 50) | public class DefaultNamedRequestDispatcher implements RequestDispatcher {
    method DefaultNamedRequestDispatcher (line 62) | public DefaultNamedRequestDispatcher(ServletEnvironment environment) {
    method forward (line 66) | @Override
    method include (line 109) | @Override
    method unwrap (line 133) | private WebApplicationRequest unwrap(ServletRequest servletRequest) {
    method unwrap (line 147) | private WebApplicationResponse unwrap(ServletResponse servletResponse) {

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultObjectInstanceManager.java
  class DefaultObjectInstanceManager (line 47) | public class DefaultObjectInstanceManager implements ObjectInstanceManag...
    method DefaultObjectInstanceManager (line 52) | public DefaultObjectInstanceManager() {
    method createFilter (line 63) | @Override
    method createListener (line 82) | @Override
    method createServlet (line 101) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultPiranha.java
  class DefaultPiranha (line 38) | public class DefaultPiranha implements Piranha {
    method DefaultPiranha (line 48) | public DefaultPiranha() {
    method getConfiguration (line 52) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultPiranhaBuilder.java
  class DefaultPiranhaBuilder (line 41) | public class DefaultPiranhaBuilder<T> implements PiranhaBuilder<T> {
    method DefaultPiranhaBuilder (line 56) | public DefaultPiranhaBuilder() {
    method build (line 59) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultPiranhaConfiguration.java
  class DefaultPiranhaConfiguration (line 40) | public class DefaultPiranhaConfiguration implements PiranhaConfiguration {
    method DefaultPiranhaConfiguration (line 50) | public DefaultPiranhaConfiguration() {
    method getBoolean (line 53) | @Override
    method getClass (line 61) | @Override
    method getFile (line 66) | @Override
    method getInteger (line 71) | @Override
    method getLong (line 76) | @Override
    method getString (line 81) | @Override
    method setBoolean (line 86) | @Override
    method setClass (line 91) | @Override
    method setFile (line 96) | @Override
    method setInteger (line 101) | @Override
    method setLong (line 106) | @Override
    method setString (line 111) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultPushBuilder.java
  class DefaultPushBuilder (line 40) | @SuppressWarnings("deprecation")
    method DefaultPushBuilder (line 79) | public DefaultPushBuilder(WebApplicationRequest request) {
    method method (line 83) | @Override
    method queryString (line 89) | @Override
    method sessionId (line 95) | @Override
    method setHeader (line 101) | @Override
    method addHeader (line 107) | @Override
    method removeHeader (line 113) | @Override
    method path (line 119) | @Override
    method push (line 125) | @Override
    method getMethod (line 130) | @Override
    method getQueryString (line 135) | @Override
    method getSessionId (line 140) | @Override
    method getHeaderNames (line 145) | @Override
    method getHeader (line 154) | @Override
    method getPath (line 159) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultSecurityManager.java
  class DefaultSecurityManager (line 53) | public class DefaultSecurityManager implements cloud.piranha.core.api.Se...
    method DefaultSecurityManager (line 68) | public DefaultSecurityManager() {
    method authenticate (line 73) | @Override
    method declareRoles (line 78) | @Override
    method getRoles (line 82) | @Override
    method getSecurityConstraints (line 87) | @Override
    method getSecurityRoleReferences (line 92) | @Override
    method getWebApplication (line 97) | @Override
    method isUserInRole (line 102) | @Override
    method login (line 107) | @Override
    method logout (line 112) | @Override
    method setSecurityConstraints (line 116) | @Override
    method setSecurityRoleReferences (line 121) | @Override
    method setWebApplication (line 126) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultServlet.java
  class DefaultServlet (line 49) | public class DefaultServlet extends HttpServlet {
    method DefaultServlet (line 56) | public DefaultServlet() {
    method doGet (line 67) | @Override
    method getResource (line 91) | private InputStream getResource(HttpServletRequest request) {
    method getPath (line 99) | private String getPath(HttpServletRequest request) {
    method setContentType (line 114) | private void setContentType(HttpServletRequest request, HttpServletRes...

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultServletConnection.java
  class DefaultServletConnection (line 37) | public class DefaultServletConnection implements ServletConnection {
    method DefaultServletConnection (line 42) | public DefaultServletConnection() {
    method getConnectionId (line 45) | @Override
    method getProtocol (line 50) | @Override
    method getProtocolConnectionId (line 55) | @Override
    method isSecure (line 60) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultServletEnvironment.java
  class DefaultServletEnvironment (line 50) | public class DefaultServletEnvironment implements ServletEnvironment {
    method DefaultServletEnvironment (line 118) | public DefaultServletEnvironment(DefaultWebApplication webApp, String ...
    method DefaultServletEnvironment (line 133) | public DefaultServletEnvironment(DefaultWebApplication webApp, String ...
    method addMapping (line 139) | @Override
    method getClassName (line 144) | @Override
    method getInitParameter (line 149) | @Override
    method getInitParameterNames (line 154) | @Override
    method getInitParameters (line 159) | @Override
    method getLoadOnStartup (line 164) | @Override
    method getMappings (line 169) | @Override
    method getMultipartConfig (line 179) | @Override
    method getName (line 184) | @Override
    method getRunAsRole (line 189) | @Override
    method getServlet (line 194) | @Override
    method getServletContext (line 199) | @Override
    method getServletClass (line 204) | @Override
    method getServletName (line 209) | @Override
    method getStatus (line 214) | @Override
    method getWebApplication (line 219) | @Override
    method isAsyncSupported (line 224) | @Override
    method setAsyncSupported (line 229) | @Override
    method setClassName (line 234) | @Override
    method setInitParameter (line 239) | @Override
    method setInitParameters (line 249) | @Override
    method setLoadOnStartup (line 270) | @Override
    method setMultipartConfig (line 275) | @Override
    method setRunAsRole (line 280) | @Override
    method setServlet (line 285) | @Override
    method setServletSecurity (line 290) | @Override
    method setStatus (line 295) | @Override
    method getUnavailableException (line 300) | @Override
    method setUnavailableException (line 305) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultServletInvocation.java
  class DefaultServletInvocation (line 43) | public class DefaultServletInvocation implements ServletInvocation {
    method DefaultServletInvocation (line 107) | public DefaultServletInvocation() {
    method getInvocationPath (line 110) | @Override
    method setInvocationPath (line 120) | public void setInvocationPath(String invocationPath) {
    method getServletName (line 124) | @Override
    method setServletName (line 134) | public void setServletName(String servletName) {
    method getServletPath (line 138) | @Override
    method setServletPath (line 148) | public void setServletPath(String servletPath) {
    method getOriginalServletPath (line 152) | @Override
    method setOriginalServletPath (line 162) | public void setOriginalServletPath(String originalServletPath) {
    method getPathInfo (line 166) | @Override
    method setPathInfo (line 176) | public void setPathInfo(String pathInfo) {
    method getApplicationRequestMapping (line 180) | @Override
    method setApplicationRequestMapping (line 190) | public void setApplicationRequestMapping(WebApplicationRequestMapping ...
    method getHttpServletMapping (line 199) | public DefaultHttpServletMapping getHttpServletMapping() {
    method getServletEnvironment (line 203) | @Override
    method setServletEnvironment (line 213) | public void setServletEnvironment(ServletEnvironment servletEnvironmen...
    method getFilterEnvironments (line 217) | @Override
    method setFilterEnvironments (line 227) | public void setFilterEnvironments(List<FilterEnvironment> filterEnviro...
    method getFilterChain (line 231) | @Override
    method setFilterChain (line 241) | public void setFilterChain(FilterChain filterChain) {
    method isFromNamed (line 245) | @Override
    method setFromNamed (line 250) | @Override
    method seedFilterChain (line 258) | public void seedFilterChain() {

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultServletRequestDispatcher.java
  class DefaultServletRequestDispatcher (line 75) | public class DefaultServletRequestDispatcher implements RequestDispatcher {
    method DefaultServletRequestDispatcher (line 129) | public DefaultServletRequestDispatcher(DefaultServletInvocation servle...
    method request (line 147) | public void request(DefaultWebApplicationRequest webappRequest, Defaul...
    method forward (line 236) | @Override
    method include (line 258) | @Override
    method error (line 364) | public void error(String servletName, ServletRequest servletRequest, S...
    method isAsyncSupportedInChain (line 437) | private boolean isAsyncSupportedInChain() {
    method setForwardAttributes (line 443) | private void setForwardAttributes(HttpServletRequest originalRequest, ...
    method setForwardAttribute (line 456) | private void setForwardAttribute(HttpServletRequest originalRequest, H...
    method updateCurrentRequest (line 482) | private CurrentRequestHolder updateCurrentRequest(HttpServletRequest o...
    method copyAttributesFromRequest (line 494) | private void copyAttributesFromRequest(ServletRequest fromRequest, Ser...
    method restoreCurrentRequest (line 501) | private void restoreCurrentRequest(CurrentRequestHolder currentRequest...
    method asyncForward (line 508) | private void asyncForward(ServletRequest servletRequest, ServletRespon...
    method asyncHttpForward (line 526) | private void asyncHttpForward(AsyncHttpDispatchWrapper asyncHttpDispat...
    method asyncNonHttpForward (line 557) | private void asyncNonHttpForward(AsyncNonHttpDispatchWrapper asyncNonH...
    method invokeTargetAsyncServlet (line 585) | private void invokeTargetAsyncServlet(AsyncHttpDispatchWrapper asyncHt...
    method invokeTargetAsyncServlet (line 589) | private void invokeTargetAsyncServlet(HttpServletRequest invokeServlet...
    method invokeTargetAsyncServlet (line 593) | private void invokeTargetAsyncServlet(ServletRequest invokeServletRequ...
    method setAsyncAttributes (line 622) | private void setAsyncAttributes(HttpServletRequest asyncStartRequest, ...
    method setAsyncAttribute (line 629) | private void setAsyncAttribute(HttpServletRequest originalRequest, Asy...
    method setRequestParameters (line 655) | private void setRequestParameters(String queryString, AsyncHttpDispatc...
    method getServletPath (line 681) | private String getServletPath(String path) {
    method getQueryString (line 685) | private String getQueryString(String path) {
    method findHttpServletRequestInChain (line 689) | private HttpServletRequest findHttpServletRequestInChain(ServletReques...
    method rethrow (line 701) | private void rethrow(Throwable exception) throws ServletException, IOE...
    method dispatchSyncForward (line 723) | private void dispatchSyncForward(

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultServletRequestManager.java
  class DefaultServletRequestManager (line 49) | public class DefaultServletRequestManager implements ServletRequestManag...
    method DefaultServletRequestManager (line 70) | public DefaultServletRequestManager() {
    method addListener (line 73) | @Override
    method attributeAdded (line 89) | @Override
    method attributeRemoved (line 99) | @Override
    method attributeReplaced (line 109) | @Override
    method requestDestroyed (line 119) | @Override
    method requestInitialized (line 129) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultTaglibDescriptor.java
  class DefaultTaglibDescriptor (line 37) | public class DefaultTaglibDescriptor implements TaglibDescriptor {
    method DefaultTaglibDescriptor (line 52) | public DefaultTaglibDescriptor() {
    method getTaglibLocation (line 55) | @Override
    method getTaglibURI (line 60) | @Override
    method setTaglibLocation (line 70) | public void setTaglibLocation(String taglibLocation) {
    method setTaglibURI (line 79) | public void setTaglibURI(String taglibURI) {

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplication.java
  class DefaultWebApplication (line 121) | public class DefaultWebApplication implements WebApplication {
    method DefaultWebApplication (line 288) | public DefaultWebApplication() {
    method addFilter (line 320) | @Override
    method addFilter (line 325) | @Override
    method addFilter (line 349) | @Override
    method addFilterMapping (line 365) | @Override
    method addInitializer (line 373) | @Override
    method addInitializer (line 385) | @Override
    method addJspFile (line 390) | @Override
    method addListener (line 401) | @SuppressWarnings("unchecked")
    method addListener (line 417) | @Override
    method addListener (line 430) | @Override
    method addMimeType (line 467) | @Override
    method addResource (line 472) | @Override
    method addServlet (line 477) | @Override
    method addServlet (line 482) | @Override
    method addServlet (line 505) | @Override
    method addServletMapping (line 521) | @Override
    method attributeAdded (line 532) | private void attributeAdded(String name, Object value) {
    method attributeRemoved (line 542) | private void attributeRemoved(String name, Object previousValue) {
    method attributeReplaced (line 552) | private void attributeReplaced(String name, Object value) {
    method checkServicing (line 559) | private void checkServicing() {
    method checkTainted (line 568) | private void checkTainted() {
    method createFilter (line 575) | @Override
    method createListener (line 581) | @Override
    method createServlet (line 601) | @Override
    method declareRoles (line 607) | @Override
    method destroy (line 612) | @Override
    method getAttribute (line 630) | @Override
    method getAttributeNames (line 636) | @Override
    method getClassLoader (line 641) | @Override
    method getContext (line 646) | @Override
    method getContextPath (line 651) | @Override
    method getDefaultServlet (line 656) | @Override
    method getDefaultSessionTrackingModes (line 661) | @Override
    method getEffectiveMajorVersion (line 666) | @Override
    method getEffectiveMinorVersion (line 674) | @Override
    method getEffectiveSessionTrackingModes (line 682) | @Override
    method getFileOrFirstFolder (line 710) | private String getFileOrFirstFolder(String path, String resource) {
    method getFilterRegistration (line 721) | @Override
    method getFilterRegistrations (line 727) | @Override
    method getInitParameter (line 733) | @Override
    method getInitParameterNames (line 738) | @Override
    method getInitializers (line 743) | @Override
    method getInvocationDispatcher (line 754) | private DefaultServletRequestDispatcher getInvocationDispatcher(Defaul...
    method getJspConfigDescriptor (line 758) | @Override
    method getMajorVersion (line 764) | @Override
    method getManager (line 769) | @Override
    method getMappings (line 774) | @Override
    method getMimeType (line 779) | @Override
    method getMinorVersion (line 788) | @Override
    method getNamedDispatcher (line 793) | @Override
    method getRealPath (line 798) | @Override
    method getRequest (line 815) | @Override
    method getRequestCharacterEncoding (line 820) | @Override
    method getRequestDispatcher (line 825) | @Override
    method getResource (line 839) | @Override
    method getResourceAsStream (line 847) | @Override
    method getResourcePaths (line 852) | @Override
    method getResourcePathsImpl (line 873) | private Set<String> getResourcePathsImpl(String path) {
    method getResponse (line 888) | @Override
    method getResponseCharacterEncoding (line 893) | @Override
    method getServerInfo (line 898) | @Override
    method getServletContextName (line 903) | @Override
    method getServletRegistration (line 908) | @Override
    method getServletRegistrations (line 914) | @Override
    method getSessionCookieConfig (line 920) | @Override
    method getSessionTimeout (line 926) | @Override
    method getStatus (line 931) | @Override
    method getVirtualServerName (line 936) | @Override
    method initialize (line 941) | @Override
    method initializeFilters (line 963) | protected void initializeFilters() {
    method initializeFinish (line 987) | protected void initializeFinish() {
    method initializeInitializers (line 1002) | protected void initializeInitializers() {
    method initializeServlet (line 1094) | protected void initializeServlet(DefaultServletEnvironment environment) {
    method initializeServlets (line 1140) | protected void initializeServlets() {
    method isDistributable (line 1161) | @Override
    method isEmpty (line 1172) | private boolean isEmpty(String string) {
    method isInitialized (line 1176) | @Override
    method isMetadataComplete (line 1182) | @Override
    method isPermanentlyUnavailable (line 1193) | private boolean isPermanentlyUnavailable(DefaultServletEnvironment env...
    method isServicing (line 1201) | @Override
    method linkRequestAndResponse (line 1206) | @Override
    method log (line 1212) | @Override
    method log (line 1217) | @Override
    method removeAttribute (line 1222) | @Override
    method removeServletMapping (line 1227) | @Override
    method service (line 1232) | @Override
    method setAttribute (line 1271) | @Override
    method setClassLoader (line 1290) | @Override
    method setContextPath (line 1295) | @Override
    method setDefaultServlet (line 1301) | @Override
    method setDistributable (line 1306) | @Override
    method setEffectiveMajorVersion (line 1311) | @Override
    method setEffectiveMinorVersion (line 1316) | @Override
    method setInitParameter (line 1321) | @Override
    method setJspConfigDescriptor (line 1337) | @Override
    method setMetadataComplete (line 1342) | @Override
    method setRequestCharacterEncoding (line 1347) | @Override
    method setResponseCharacterEncoding (line 1352) | @Override
    method setSessionTimeout (line 1357) | @Override
    method setServletContextName (line 1366) | @Override
    method setSessionTrackingModes (line 1371) | @Override
    method setStatus (line 1378) | @Override
    method setVirtualServerName (line 1383) | @Override
    method setWebApplicationRequestMapper (line 1388) | @Override
    method start (line 1393) | @Override
    method stop (line 1406) | @Override
    method unlinkRequestAndResponse (line 1419) | @Override
    method verifyRequestResponseTypes (line 1432) | protected void verifyRequestResponseTypes(ServletRequest request, Serv...
    method verifyState (line 1444) | protected void verifyState(Status desiredStatus, String message) {

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationBuilder.java
  class DefaultWebApplicationBuilder (line 48) | public class DefaultWebApplicationBuilder {
    method DefaultWebApplicationBuilder (line 93) | public DefaultWebApplicationBuilder() {
    method build (line 101) | @SuppressWarnings("unchecked")
    method directoryResource (line 173) | public DefaultWebApplicationBuilder directoryResource(String directory) {
    method filter (line 185) | public DefaultWebApplicationBuilder filter(String name, String classNa...
    method filter (line 197) | public DefaultWebApplicationBuilder filter(String name, Class<? extend...
    method filter (line 209) | public DefaultWebApplicationBuilder filter(String name, Filter filter) {
    method filterInitParam (line 222) | public DefaultWebApplicationBuilder filterInitParam(String filterName,...
    method initParam (line 239) | public DefaultWebApplicationBuilder initParam(String name, String valu...
    method servlet (line 251) | public DefaultWebApplicationBuilder servlet(String name, String classN...
    method servlet (line 263) | public DefaultWebApplicationBuilder servlet(String name, Class<? exten...
    method servlet (line 275) | public DefaultWebApplicationBuilder servlet(String name, Servlet servl...
    method servletInitParam (line 288) | public DefaultWebApplicationBuilder servletInitParam(String servletNam...
    method servletMapping (line 305) | public DefaultWebApplicationBuilder servletMapping(String servletName,...
    method sessionTrackingModes (line 316) | public DefaultWebApplicationBuilder sessionTrackingModes(Set<SessionTr...

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationClassLoader.java
  class DefaultWebApplicationClassLoader (line 45) | public class DefaultWebApplicationClassLoader extends DefaultResourceMan...
    method DefaultWebApplicationClassLoader (line 50) | public DefaultWebApplicationClassLoader() {
    method DefaultWebApplicationClassLoader (line 58) | public DefaultWebApplicationClassLoader(File baseDirectory) {

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationExtensionContext.java
  class DefaultWebApplicationExtensionContext (line 43) | public class DefaultWebApplicationExtensionContext implements WebApplica...
    method DefaultWebApplicationExtensionContext (line 63) | public DefaultWebApplicationExtensionContext() {
    method add (line 73) | @Override
    method add (line 90) | @Override
    method configure (line 102) | public void configure(WebApplication webApplication) {
    method remove (line 113) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationInputStream.java
  class DefaultWebApplicationInputStream (line 40) | public class DefaultWebApplicationInputStream extends WebApplicationInpu...
    method DefaultWebApplicationInputStream (line 51) | public DefaultWebApplicationInputStream() {
    method close (line 55) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationManager.java
  class DefaultWebApplicationManager (line 52) | public class DefaultWebApplicationManager implements WebApplicationManag...
    method DefaultWebApplicationManager (line 127) | public DefaultWebApplicationManager() {
    method getAnnotationManager (line 130) | @Override
    method getAsyncManager (line 135) | @Override
    method getDispatcherManager (line 140) | @Override
    method getErrorPageManager (line 145) | @Override
    method getHandlesTypesManager (line 150) | @Override
    method getHttpSessionManager (line 155) | @Override
    method getJspManager (line 160) | @Override
    method getLocaleEncodingManager (line 165) | @Override
    method getMultiPartManager (line 170) | @Override
    method getObjectInstanceManager (line 175) | @Override
    method getResourceManager (line 180) | @Override
    method getSecurityManager (line 185) | @Override
    method getServletRequestManager (line 190) | @Override
    method getWelcomeFileManager (line 195) | @Override
    method setAnnotationManager (line 200) | @Override
    method setAsyncManager (line 205) | @Override
    method setErrorPageManager (line 210) | @Override
    method setHandlesTypesManager (line 215) | @Override
    method setHttpSessionManager (line 220) | @Override
    method setJspManager (line 225) | @Override
    method setLocaleEncodingManager (line 230) | @Override
    method setMultiPartManager (line 235) | @Override
    method setObjectInstanceManager (line 240) | @Override
    method setResourceManager (line 245) | @Override
    method setSecurityManager (line 250) | @Override
    method setServletRequestManager (line 255) | @Override
    method setWelcomeFileManager (line 260) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationOutputStream.java
  class DefaultWebApplicationOutputStream (line 52) | public class DefaultWebApplicationOutputStream extends WebApplicationOut...
    method DefaultWebApplicationOutputStream (line 98) | public DefaultWebApplicationOutputStream() {
    method close (line 103) | @Override
    method flush (line 115) | @Override
    method flushBuffer (line 146) | @Override
    method formatDateToGMT (line 168) | private String formatDateToGMT(long timestamp) {
    method getBufferSize (line 173) | @Override
    method getOutputStream (line 178) | @Override
    method getWriteListener (line 183) | @Override
    method getResponse (line 188) | @Override
    method isReady (line 193) | @Override
    method resetBuffer (line 203) | @Override
    method run (line 211) | @Override
    method setBufferSize (line 238) | @Override
    method setOutputStream (line 246) | @Override
    method setResponse (line 251) | @Override
    method setWriteListener (line 256) | @Override
    method write (line 276) | @Override
    method writeContentLanguage (line 336) | private void writeContentLanguage() throws IOException {
    method writeContentType (line 353) | private void writeContentType() throws IOException {
    method writeCookie (line 381) | @SuppressWarnings({"removal"})
    method writeCookies (line 436) | private void writeCookies() throws IOException {
    method writeHeader (line 451) | private void writeHeader(String name) throws IOException {
    method writeHeaders (line 475) | public void writeHeaders() throws IOException {
    method writeStatusLine (line 493) | public void writeStatusLine() throws IOException {

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationPrintWriter.java
  class DefaultWebApplicationPrintWriter (line 40) | public class DefaultWebApplicationPrintWriter extends WebApplicationPrin...
    method DefaultWebApplicationPrintWriter (line 59) | public DefaultWebApplicationPrintWriter(WebApplicationResponse respons...
    method write (line 64) | @Override
    method write (line 73) | @Override
    method write (line 80) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationRequest.java
  class DefaultWebApplicationRequest (line 88) | public class DefaultWebApplicationRequest implements WebApplicationReque...
    method DefaultWebApplicationRequest (line 343) | public DefaultWebApplicationRequest() {
    method addHeader (line 377) | public void addHeader(String name, String value) {
    method addOrRemoveSlashIfNeeded (line 387) | private String addOrRemoveSlashIfNeeded(String string) {
    method authenticate (line 398) | @Override
    method changeSessionId (line 407) | @Override
    method coalesce (line 415) | @SafeVarargs
    method getAsyncContext (line 426) | @Override
    method getAttribute (line 434) | @Override
    method getAttributeNames (line 439) | @Override
    method getAuthType (line 444) | @Override
    method getCharacterEncoding (line 449) | @Override
    method getContentLength (line 454) | @Override
    method getContentLengthLong (line 459) | @Override
    method getContentType (line 464) | @Override
    method getContextPath (line 469) | @Override
    method getCookies (line 474) | @Override
    method getCurrentSessionId (line 489) | public String getCurrentSessionId() {
    method getDateHeader (line 493) | @Override
    method getDispatcherType (line 498) | @Override
    method getHeader (line 503) | @Override
    method getHeaderNames (line 508) | @Override
    method getHeaders (line 513) | @Override
    method getHttpServletMapping (line 518) | @Override
    method getInputStream (line 526) | @Override
    method getIntHeader (line 539) | @Override
    method getLocalAddr (line 544) | @Override
    method getLocalName (line 549) | @Override
    method getLocalPort (line 554) | @Override
    method getLocale (line 559) | @SuppressWarnings("deprecation")
    method getLocales (line 577) | @SuppressWarnings("deprecation")
    method getMethod (line 600) | @Override
    method getModifiableParameterMap (line 605) | @Override
    method getMultipartConfig (line 610) | @Override
    method getOriginalServletPath (line 620) | public String getOriginalServletPath() {
    method getParameter (line 624) | @Override
    method getParameterMap (line 634) | @Override
    method getParameterNames (line 640) | @Override
    method getParameterValues (line 646) | @Override
    method getParametersFromRequest (line 655) | protected void getParametersFromRequest() {
    method getPart (line 736) | @Override
    method getParts (line 743) | @Override
    method getPathInfo (line 750) | @Override
    method getPathTranslated (line 755) | @Override
    method getProtocol (line 760) | @Override
    method getProtocolRequestId (line 765) | @Override
    method getQueryString (line 770) | @Override
    method getReader (line 775) | @Override
    method getRemoteAddr (line 794) | @Override
    method getRemoteHost (line 799) | @Override
    method getRemotePort (line 804) | @Override
    method getRemoteUser (line 809) | @Override
    method getRequestDispatcher (line 818) | @Override
    method getRequestId (line 829) | @Override
    method getRequestURI (line 834) | @Override
    method getRequestURIWithQueryString (line 845) | public String getRequestURIWithQueryString() {
    method getRequestURL (line 851) | @Override
    method getRequestedSessionId (line 863) | @Override
    method getScheme (line 868) | @Override
    method getServerName (line 873) | @Override
    method getServerPort (line 878) | @Override
    method getServletConnection (line 883) | @Override
    method getServletContext (line 888) | @Override
    method getServletPath (line 893) | @Override
    method getSession (line 898) | @Override
    method getSession (line 903) | @Override
    method getUpgradeHandler (line 925) | @Override
    method getUserPrincipal (line 930) | @Override
    method getWebApplicationInputStream (line 935) | @Override
    method isAsyncStarted (line 940) | @Override
    method isAsyncSupported (line 945) | @Override
    method isRequestedSessionIdFromCookie (line 950) | @Override
    method isRequestedSessionIdFromURL (line 955) | @Override
    method isRequestedSessionIdValid (line 960) | @Override
    method isSecure (line 970) | @Override
    method isSupported (line 975) | private boolean isSupported(String csn) {
    method isUpgraded (line 983) | @Override
    method isUserInRole (line 988) | @Override
    method login (line 997) | @Override
    method logout (line 1006) | @Override
    method mergeQueryFromAttributes (line 1021) | private String mergeQueryFromAttributes() {
    method removeAttribute (line 1034) | @Override
    method setAsyncStarted (line 1048) | public void setAsyncStarted(boolean asyncStarted) {
    method setAsyncSupported (line 1052) | @Override
    method setAttribute (line 1057) | @Override
    method setAuthType (line 1083) | @Override
    method setCharacterEncoding (line 1088) | @Override
    method setContentLength (line 1109) | public void setContentLength(int contentLength) {
    method setContentType (line 1120) | public void setContentType(String contentType) {
    method setContextPath (line 1143) | @Override
    method setCookies (line 1153) | public void setCookies(Cookie[] cookies) {
    method setCurrentSessionId (line 1169) | public void setCurrentSessionId(String currentSessionId) {
    method setDispatcherType (line 1173) | @Override
    method setHeader (line 1184) | public void setHeader(String name, String value) {
    method setHttpServletMapping (line 1203) | public void setHttpServletMapping(HttpServletMapping httpServletMappin...
    method setLocalAddr (line 1212) | public void setLocalAddr(String localAddress) {
    method setLocalName (line 1221) | public void setLocalName(String localName) {
    method setLocalPort (line 1230) | public void setLocalPort(int localPort) {
    method setMethod (line 1239) | public void setMethod(String method) {
    method setMultipartConfig (line 1248) | public void setMultipartConfig(MultipartConfigElement multipartConfig) {
    method setOriginalServletPath (line 1257) | public void setOriginalServletPath(String originalServletPath) {
    method setParameter (line 1267) | public void setParameter(String name, String[] values) {
    method setPathInfo (line 1271) | @Override
    method setProtocol (line 1281) | public void setProtocol(String protocol) {
    method setQueryString (line 1285) | @Override
    method setRemoteAddr (line 1295) | public void setRemoteAddr(String remoteAddr) {
    method setRemoteHost (line 1304) | public void setRemoteHost(String remoteHost) {
    method setRemotePort (line 1313) | public void setRemotePort(int remotePort) {
    method setRequestedSessionId (line 1317) | @Override
    method setRequestedSessionIdFromCookie (line 1327) | public void setRequestedSessionIdFromCookie(boolean requestedSessionId...
    method setRequestedSessionIdFromURL (line 1336) | public void setRequestedSessionIdFromURL(boolean requestedSessionIdFro...
    method setScheme (line 1345) | public void setScheme(String scheme) {
    method setServerName (line 1354) | public void setServerName(String serverName) {
    method setServerPort (line 1363) | public void setServerPort(int serverPort) {
    method setServletPath (line 1367) | @Override
    method setUpgraded (line 1377) | public void setUpgraded(boolean upgraded) {
    method setUserPrincipal (line 1381) | @Override
    method setWebApplication (line 1386) | @Override
    method setWebApplicationInputStream (line 1391) | @Override
    method startAsync (line 1397) | @Override
    method startAsync (line 1406) | @Override
    method unwrap (line 1448) | public static <T> T unwrap(ServletRequest request, Class<T> type) {
    method upgrade (line 1456) | @SuppressWarnings("unchecked")
    method verifyMultipartFormData (line 1473) | protected void verifyMultipartFormData() throws ServletException {
    method toString (line 1479) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationRequestBuilder.java
  class DefaultWebApplicationRequestBuilder (line 37) | public class DefaultWebApplicationRequestBuilder {
    method DefaultWebApplicationRequestBuilder (line 57) | public DefaultWebApplicationRequestBuilder() {
    method build (line 65) | public DefaultWebApplicationRequest build() {
    method queryString (line 79) | public DefaultWebApplicationRequestBuilder queryString(String queryStr...
    method servletPath (line 90) | public DefaultWebApplicationRequestBuilder servletPath(String servletP...
    method webApplication (line 101) | public DefaultWebApplicationRequestBuilder webApplication(WebApplicati...

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationRequestMapper.java
  class DefaultWebApplicationRequestMapper (line 52) | public class DefaultWebApplicationRequestMapper implements WebApplicatio...
    method DefaultWebApplicationRequestMapper (line 72) | public DefaultWebApplicationRequestMapper() {
    method addFilterMapping (line 75) | @Override
    method addFilterMappingBeforeExisting (line 80) | @Override
    method addServletMapping (line 85) | @Override
    method removeServletMapping (line 118) | @Override
    method findFilterMappings (line 129) | @Override
    method doAddFilterMapping (line 167) | private Set<String> doAddFilterMapping(Set<DispatcherType> dispatcherT...
    method doAddFilterMappingBeforeExisting (line 184) | private Set<String> doAddFilterMappingBeforeExisting(Set<DispatcherTyp...
    method findServletExactMatch (line 207) | private DefaultWebApplicationRequestMapping findServletExactMatch(Stri...
    method findServletExtensionMatch (line 229) | private DefaultWebApplicationRequestMapping findServletExtensionMatch(...
    method findServletMapping (line 258) | @Override
    method findServletPrefixMatch (line 279) | private DefaultWebApplicationRequestMapping findServletPrefixMatch(Str...
    method findServletPrefixMatch (line 304) | private DefaultWebApplicationRequestMapping findServletPrefixMatch(Str...
    method getServletMappings (line 333) | @Override
    method getServletName (line 347) | @Override
    method getDefaultServlet (line 352) | @Override
    method isEmpty (line 357) | private boolean isEmpty(Collection<?> collection) {
    method isEmpty (line 361) | private boolean isEmpty(String[] strings) {

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationRequestMapping.java
  class DefaultWebApplicationRequestMapping (line 37) | public class DefaultWebApplicationRequestMapping implements WebApplicati...
    method DefaultWebApplicationRequestMapping (line 65) | public DefaultWebApplicationRequestMapping(String pattern) {
    method getMatchValue (line 73) | @Override
    method getPattern (line 81) | @Override
    method isExact (line 91) | @Override
    method isExtension (line 101) | @Override
    method setExact (line 111) | public void setExact(boolean exact) {
    method setExtension (line 120) | public void setExtension(boolean extension) {
    method setMatchValue (line 129) | public void setMatchValue(String matchValue) {
    method setPattern (line 138) | public void setPattern(String pattern) {

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationResponse.java
  class DefaultWebApplicationResponse (line 62) | public class DefaultWebApplicationResponse implements WebApplicationResp...
    method DefaultWebApplicationResponse (line 182) | public DefaultWebApplicationResponse() {
    method addCookie (line 207) | @Override
    method addDateHeader (line 216) | @Override
    method addHeader (line 221) | @Override
    method addIntHeader (line 243) | @Override
    method closeAsyncResponse (line 248) | @Override
    method containsHeader (line 253) | @Override
    method encodeRedirectURL (line 258) | @Override
    method encodeURL (line 267) | @Override
    method flushBuffer (line 276) | @Override
    method formatDateToGMT (line 296) | private String formatDateToGMT(long timestamp) {
    method getBufferSize (line 301) | @Override
    method getCharacterEncoding (line 306) | @Override
    method getContentLanguage (line 315) | @Override
    method getContentLength (line 320) | @Override
    method getContentType (line 325) | @Override
    method getCookies (line 334) | @Override
    method getHeader (line 339) | @Override
    method getHeaderNames (line 344) | @Override
    method getHeaders (line 354) | @Override
    method getLocale (line 364) | @Override
    method getOutputStream (line 369) | @Override
    method getResponseCloser (line 378) | @Override
    method getStatus (line 383) | @Override
    method getStatusMessage (line 388) | @Override
    method getTrailerFields (line 393) | @Override
    method getWebApplication (line 398) | @Override
    method getWebApplicationOutputStream (line 403) | @Override
    method getWriter (line 408) | @Override
    method isBodyOnly (line 426) | @Override
    method isBufferResetting (line 431) | @Override
    method isCommitted (line 436) | @Override
    method isInclude (line 446) | private boolean isInclude() {
    method isWriterAcquired (line 454) | @Override
    method reset (line 459) | @Override
    method resetBuffer (line 479) | @Override
    method sendError (line 501) | @Override
    method sendError (line 516) | @Override
    method sendRedirect (line 533) | @Override
    method sendRedirect (line 538) | @SuppressWarnings("deprecation")
    method setBodyOnly (line 567) | @Override
    method setBufferSize (line 572) | @Override
    method setCharacterEncoding (line 578) | @Override
    method setCommitted (line 592) | @Override
    method setContentLength (line 597) | @Override
    method setContentLengthLong (line 602) | @Override
    method setContentType (line 614) | @Override
    method setDateHeader (line 643) | @Override
    method setErrorMessageAttribute (line 651) | private void setErrorMessageAttribute() {
    method setHeader (line 660) | @Override
    method setIntHeader (line 679) | @Override
    method setLocale (line 684) | @Override
    method setResponseCloser (line 708) | @Override
    method setStatus (line 713) | @Override
    method setTrailerFields (line 726) | @Override
    method setWebApplication (line 741) | @Override
    method setWebApplicationOutputStream (line 746) | @Override
    method verifyNotCommitted (line 756) | protected void verifyNotCommitted(String methodName) {

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationResponseBuilder.java
  class DefaultWebApplicationResponseBuilder (line 38) | public class DefaultWebApplicationResponseBuilder {
    method DefaultWebApplicationResponseBuilder (line 58) | public DefaultWebApplicationResponseBuilder() {
    method bodyOnly (line 67) | public DefaultWebApplicationResponseBuilder bodyOnly(boolean bodyOnly) {
    method build (line 77) | public DefaultWebApplicationResponse build() {
    method underlyingOutputStream (line 95) | public DefaultWebApplicationResponseBuilder underlyingOutputStream(Out...
    method webApplication (line 106) | public DefaultWebApplicationResponseBuilder webApplication(WebApplicat...

FILE: core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebConnection.java
  class DefaultWebConnection (line 42) | public class DefaultWebConnection implements WebConnection {
    method DefaultWebConnection (line 60) | public DefaultWebConnection(
    method getInputStream (line 66) | @Override
    method getOutputStream (line 71) | @Override
    method close (line 76) | @Override

FILE: core/impl/src/main/java/cloud/piranha/core/impl/WarFileExtractor.java
  class WarFileExtractor (line 44) | public class WarFileExtractor {
    method WarFileExtractor (line 54) | private WarFileExtractor() {
    method extractWarFile (line 63) | public static void extractWarFile(File warFile, File directory) {
    method extractZipInputStream (line 93) | private static void extractZipInputStream(ZipInputStream zipInput, Str...

FILE: core/impl/src/test/java/cloud/piranha/core/impl/AsyncContextTest.java
  class AsyncContextTest (line 54) | class AsyncContextTest {
    method createWebApplication (line 56) | private WebApplication createWebApplication() {
    method createWebApplicationRequest (line 60) | private WebApplicationRequest createWebApplicationRequest() {
    method createWebApplicationResponse (line 64) | private WebApplicationResponse createWebApplicationResponse() {
    method testAddListener (line 71) | @Test
    method testComplete (line 106) | @Test
    method testCreateListener (line 125) | @Test
    method testCreateListener2 (line 143) | @Test
    method testDispatch (line 162) | @Test
    method testGetRequest (line 191) | @Test
    method testGetResponse (line 207) | @Test
    method testGetTimeout (line 223) | @Test
    method testHasOriginalRequestAndResponse (line 239) | @Test
    method testSetTimeout (line 257) | @Test
    class TestCreateListenerListener (line 274) | public static class TestCreateListenerListener implements AsyncListener {
      method TestCreateListenerListener (line 279) | public TestCreateListenerListener() {
      method onComplete (line 282) | @Override
      method onTimeout (line 286) | @Override
      method onError (line 290) | @Override
      method onStartAsync (line 294) | @Override
    class TestCreateListener2Listener (line 302) | public static class TestCreateListener2Listener implements AsyncListen...
      method TestCreateListener2Listener (line 309) | public TestCreateListener2Listener() throws ServletException {
      method onComplete (line 313) | @Override
      method onTimeout (line 317) | @Override
      method onError (line 321) | @Override
      method onStartAsync (line 325) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/CookieParserTest.java
  class CookieParserTest (line 37) | class CookieParserTest {
    class Netscape (line 77) | @Nested
      method parseSingleCookie (line 80) | @Test
      method parseMultipleCookies (line 91) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultAnnotationManagerTest.java
  class DefaultAnnotationManagerTest (line 41) | class DefaultAnnotationManagerTest {
    method testAddAnnotatedClass (line 47) | @Test
    method testAddAnnotatedClass2 (line 61) | @Test
    method testAddAnnotation (line 78) | @Test
    method testAddInstance (line 92) | @Test
    method testGetAnnotations (line 106) | @Test
    method testGetAnnotations2 (line 115) | @Test
    method testGetInstances (line 124) | @Test
    method testGetInstances2 (line 133) | @Test
    method testGetAnnotationsByTarget (line 142) | @Test
    method testGetAnnotatedClass (line 151) | @Test
    method testGetAnnotatedClasses (line 160) | @Test
    method testGetAnnotatedClasses2 (line 169) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultErrorPageManagerTest.java
  class DefaultErrorPageManagerTest (line 37) | class DefaultErrorPageManagerTest {
    method testPagesByCode (line 38) | @Test
    method testPagesByCode2 (line 58) | @Test
    method testPagesByCode3 (line 75) | @Test
    method testPagesByException (line 92) | @Test
    method testPagesByException2 (line 99) | @Test
    method testPagesByException3 (line 106) | @Test
    method testPagesByException4 (line 113) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultFilterEnvironmentTest.java
  class DefaultFilterEnvironmentTest (line 52) | class DefaultFilterEnvironmentTest {
    method createNoopFilter (line 59) | private Filter createNoopFilter() {
    method createWebApplication (line 78) | private WebApplication createWebApplication() {
    method testGetName (line 85) | @Test
    method testGetClassName (line 97) | @Test
    method testGetInitParameterNames (line 110) | @Test
    method testGetInitParameters (line 125) | @Test
    method testGetUrlPatternMappings (line 137) | @Test
    method testSetInitParameters (line 149) | @Test
    method testSetInitParameters2 (line 162) | @Test
    method testSetInitParameters3 (line 176) | @Test
    method testSetInitParameters4 (line 190) | @Test
    method testSetInitParameters5 (line 204) | @Test
    class TestGetClassNameFilter (line 219) | public class TestGetClassNameFilter implements Filter {
      method doFilter (line 221) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultHttpHeaderManagerTest.java
  class DefaultHttpHeaderManagerTest (line 41) | class DefaultHttpHeaderManagerTest {
    method testAddHeader (line 46) | @Test
    method testAddHeader2 (line 56) | @Test
    method testContainsHeader (line 73) | @Test
    method testGetDateHeader (line 84) | @Test
    method testGetDateHeader2 (line 95) | @Test
    method testGetDateHeader3 (line 104) | @Test
    method testGetHeader (line 114) | @Test
    method testGetHeaderNames (line 123) | @Test
    method testGetHeaders (line 135) | @Test
    method testGetIntHeader (line 145) | @Test
    method testGetIntHeader2 (line 155) | @Test
    method testGetIntHeader3 (line 165) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultPiranhaConfigurationTest.java
  class DefaultPiranhaConfigurationTest (line 40) | public class DefaultPiranhaConfigurationTest {
    method testGetBoolean (line 45) | @Test
    method testGetClass (line 57) | @Test
    method testGetFile (line 69) | @Test
    method testGetInteger (line 81) | @Test
    method testGetLong (line 93) | @Test
    method testGetString (line 105) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultPushBuilderTest.java
  class DefaultPushBuilderTest (line 43) | public class DefaultPushBuilderTest {
    method testAddHeader (line 48) | @Test
    method testGetHeaderNames (line 61) | @Test
    method testMethod (line 74) | @Test
    method testPath (line 85) | @Test
    method testPush (line 96) | @Test
    method testQueryString (line 109) | @Test
    method testSessionId (line 120) | @Test
    method testSetHeader (line 131) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultSecurityManagerTest.java
  class DefaultSecurityManagerTest (line 38) | public class DefaultSecurityManagerTest {
    method testGetSecurityConstraints (line 43) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultServletEnvironmentTest.java
  class DefaultServletEnvironmentTest (line 43) | class DefaultServletEnvironmentTest {
    method testGetLoadOnStartup (line 48) | @Test
    method testSetAsyncSupported (line 59) | @Test
    method testMultipartConfig (line 71) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationBuilderTest.java
  class DefaultWebApplicationBuilderTest (line 50) | class DefaultWebApplicationBuilderTest {
    method testBuild (line 55) | @Test
    method testDirectoryResource (line 63) | @Test
    method testFilter (line 75) | @Test
    method testFilter2 (line 87) | @Test
    method testFilter3 (line 99) | @Test
    method testFilterInitParam (line 111) | @Test
    method testInitParam (line 124) | @Test
    method testServlet (line 135) | @Test
    method testServlet2 (line 147) | @Test
    method testServlet3 (line 159) | @Test
    method testServletInitParam (line 171) | @Test
    method testServletMapping (line 184) | @Test
    class TestFilter (line 197) | public class TestFilter implements Filter {
      method doFilter (line 199) | @Override
    class TestServlet (line 208) | public class TestServlet extends HttpServlet {

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationClassLoaderTest.java
  class DefaultWebApplicationClassLoaderTest (line 40) | class DefaultWebApplicationClassLoaderTest {
    method testLoadClass (line 47) | @Test
    method testLoadClass2 (line 58) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationExtensionContextTest.java
  class DefaultWebApplicationExtensionContextTest (line 50) | class DefaultWebApplicationExtensionContextTest {
    method testAdd (line 55) | @Test
    method testRemove (line 68) | @Test
    class TestExtension (line 81) | public static class TestExtension implements WebApplicationExtension {
      method configure (line 83) | @Override
    class Test2Extension (line 92) | public static class Test2Extension implements WebApplicationExtension {
      method extend (line 99) | @Override
    class Test3Extension (line 108) | public static class Test3Extension implements WebApplicationExtension {
      method extend (line 115) | @Override
    class TestInitializer (line 125) | public static class TestInitializer implements ServletContainerInitial...
      method TestInitializer (line 127) | public TestInitializer() {
      method onStartup (line 130) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationManagerTest.java
  class DefaultWebApplicationManagerTest (line 40) | class DefaultWebApplicationManagerTest {
    method testGetAnnotationManager (line 45) | @Test
    method testGetAsyncManager (line 56) | @Test
    method testGetDispatcherManager (line 67) | @Test
    method testGetErrorPageManager (line 76) | @Test
    method testGetHttpSessionManager (line 87) | @Test
    method testGetHttpSessionManager2 (line 97) | @Test
    method testGetJspManager (line 106) | @Test
    method testGetLocaleEncodingManager (line 117) | @Test
    method testGetMultiPartManager (line 128) | @Test
    method testGetObjectInstanceManager (line 139) | @Test
    method testGetResourceManager (line 150) | @Test
    method testGetSecurityManager (line 161) | @Test
    method testGetServletRequestManager (line 172) | @Test
    method testGetWelcomeFileManager (line 183) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationOutputStreamTest.java
  class DefaultWebApplicationOutputStreamTest (line 43) | class DefaultWebApplicationOutputStreamTest {
    method testIsReady (line 50) | @Test
    method testWriteListener (line 60) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationRequestMapperTest.java
  class DefaultWebApplicationRequestMapperTest (line 45) | class DefaultWebApplicationRequestMapperTest {
    method testAddServletMapping2 (line 54) | @Test
    method testAddServletMapping3 (line 69) | @Test
    method testAddServletMapping4 (line 84) | @Test
    method testAddServletMapping5 (line 98) | @Test
    method testFindServletMapping (line 112) | @Test
    method testFindExactServletMatch2 (line 125) | @Test
    method testFindExtensionServletMatch (line 149) | @Test
    method testFindPrefixServletMatch3 (line 176) | @Test
    method testFindPrefixServletMatch4 (line 203) | @Test
    method testFindPrefixServletMatch5 (line 225) | @Test
    method testFindExtensionServletMatch2 (line 252) | @Test
    method testFindPrefixServletMatch (line 279) | @Test
    method testFindPrefixServletMatch2 (line 307) | @Test
    method testAddFilterMapping (line 332) | @Test
    method testAddFilterMapping2 (line 344) | @Test
    method testAddFilterMapping3 (line 356) | @Test
    method testAddFilterMapping4 (line 368) | @Test
    method testAddFilterMapping5 (line 382) | @Test
    method testAddServletMapping (line 396) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationRequestMappingTest.java
  class DefaultWebApplicationRequestMappingTest (line 38) | class DefaultWebApplicationRequestMappingTest {
    method testGetMatchValue (line 43) | @Test
    method testGetPattern (line 54) | @Test
    method testIsExact (line 63) | @Test
    method testIsExtension (line 74) | @Test
    method testSetPattern (line 85) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationRequestTest.java
  class DefaultWebApplicationRequestTest (line 67) | class DefaultWebApplicationRequestTest {
    method testAuthenticate (line 72) | @Test
    method testAuthenticate2 (line 88) | @Test
    method testGetAsyncContext (line 104) | @Test
    method testGetAsyncContext2 (line 114) | @Test
    method testGetAttribute (line 130) | @Test
    method testGetAttributeNames (line 142) | @Test
    method testGetAuthType (line 159) | @Test
    method testGetCharacterEncoding (line 170) | @Test
    method testGetContentLength (line 181) | @Test
    method testGetContentLength2 (line 190) | @Test
    method testGetContentLengthLong (line 201) | @Test
    method testGetContentType (line 210) | @Test
    method testGetContentType2 (line 219) | @Test
    method testGetContextPath (line 230) | @Test
    method testGetCookies (line 239) | @Test
    method testGetDateHeader (line 248) | @Test
    method testGetDispatcherType (line 257) | @Test
    method testGetHeader (line 266) | @Test
    method testGetHeaderNames (line 275) | @Test
    method testGetHeaders (line 284) | @Test
    method testGetHttpServletMapping (line 293) | @Test
    method testGetInputStream (line 304) | @Test
    method testGetInputStream2 (line 315) | @Test
    method testGetIntHeader (line 326) | @Test
    method testGetLocalAddr (line 335) | @Test
    method testGetLocalName (line 344) | @Test
    method testGetLocalPort (line 353) | @Test
    method testGetLocale (line 362) | @Test
    method testGetLocale2 (line 372) | @Test
    method testGetLocales (line 381) | @Test
    method testGetLocales2 (line 391) | @Test
    method testGetMethod (line 400) | @Test
    method testGetMultipartConfig (line 409) | @Test
    method testGetParameter (line 418) | @Test
    method testGetParameterMap (line 427) | @Test
    method testGetParameterMap2 (line 441) | @Test
    method testGetParameterMap3 (line 455) | @Test
    method testGetParameterNames (line 464) | @Test
    method testGetParameterValues (line 473) | @Test
    method testGetPart (line 482) | @Test
    method testGetPart2 (line 495) | @Test
    method testGetPart3 (line 507) | @Test
    method testGetParts (line 520) | @Test
    method testGetPathInfo (line 531) | @Test
    method testGetPathTranslated (line 540) | @Test
    method testGetProtocol (line 549) | @Test
    method testGetProtocolRequestId (line 558) | @Test
    method testGetQueryString (line 567) | @Test
    method testGetReader (line 578) | @Test
    method testGetReader2 (line 589) | @Test
    method testGetRemoteAddr (line 600) | @Test
    method testGetRemoteHost (line 609) | @Test
    method testGetRemotePort (line 618) | @Test
    method testGetRemoteUser (line 627) | @Test
    method testGetRequestId (line 636) | @Test
    method testGetRequestURI (line 645) | @Test
    method testGetRequestURL (line 654) | @Test
    method testGetRequestedSessionId (line 663) | @Test
    method testGetScheme (line 672) | @Test
    method testGetServerName (line 681) | @Test
    method testGetServerPort (line 690) | @Test
    method testGetServletConnection (line 699) | @Test
    method testGetServletContext (line 708) | @Test
    method testGetServletPath (line 719) | @Test
    method testGetTrailerFields (line 728) | @Test
    method testGetUpgradeHandler (line 738) | @Test
    method testGetUserPrincipal (line 747) | @Test
    method testIsAsyncStarted (line 756) | @Test
    method testIsAsyncSupported (line 765) | @Test
    method testIsSecure (line 774) | @Test
    method testIsSecure2 (line 783) | @Test
    method testIsTrailerFieldsReady (line 793) | @Test
    method testIsUpgraded (line 802) | @Test
    method testIsUserInRole (line 811) | @Test
    method testLogin (line 822) | @Test
    method testLogout (line 837) | @Test
    method testNewPushBuilder (line 855) | @SuppressWarnings("deprecation")
    method testRemoveAttribute (line 865) | @Test
    method testSetAttribute (line 879) | @Test
    method testSetAuthType (line 891) | @Test
    method testSetCharacterEncoding (line 905) | @Test
    method testSetCharacterEncoding2 (line 918) | @Test
    method testSetCharacterEncoding3 (line 931) | @Test
    method testSetCharacterEncoding4 (line 942) | @Test
    method testSetContextPath (line 952) | @Test
    method testSetCookies (line 962) | @Test
    method testSetDispatcherType (line 979) | @Test
    method testSetLocalAddr (line 989) | @Test
    method testSetLocalName (line 1000) | @Test
    method testSetLocalPort (line 1011) | @Test
    method testSetProtocol (line 1022) | @Test
    method testSetRemoteAddr (line 1033) | @Test
    method testSetRemoteHost (line 1044) | @Test
    method testSetRemotePort (line 1055) | @Test
    method testSetServerName (line 1066) | @Test
    method testSetServerPort (line 1077) | @Test
    method testSetServletPath (line 1088) | @Test
    method testSetUserPrincipal (line 1098) | @Test
    method testSetWebApplication (line 1110) | @Test
    method testStartAsync (line 1121) | @Test
    method testStartAsync2 (line 1130) | @Test
    method testStartAsync3 (line 1142) | @Test
    method testStartAsync4 (line 1157) | @Test
    method testUpgrade (line 1173) | @Test
    method testUpgrade2 (line 1212) | @Test
    method testUpgrade3 (line 1221) | @Test
    class TestUpgrade2HttpUpgradeHandler (line 1231) | public static class TestUpgrade2HttpUpgradeHandler implements HttpUpgr...
      method TestUpgrade2HttpUpgradeHandler (line 1236) | public TestUpgrade2HttpUpgradeHandler() {
      method destroy (line 1239) | @Override
      method init (line 1243) | @Override
    class TestUpgrade3HttpUpgradeHandler (line 1260) | public static class TestUpgrade3HttpUpgradeHandler implements HttpUpgr...
      method TestUpgrade3HttpUpgradeHandler (line 1267) | public TestUpgrade3HttpUpgradeHandler() throws IllegalAccessException {
      method init (line 1271) | @Override
      method destroy (line 1275) | @Override
    class TestUpgradeHttpUpgradeHandler (line 1283) | public static class TestUpgradeHttpUpgradeHandler implements HttpUpgra...
      method TestUpgradeHttpUpgradeHandler (line 1288) | public TestUpgradeHttpUpgradeHandler() {
      method init (line 1291) | @Override
      method destroy (line 1295) | @Override
    class TestUpgradeReadListener (line 1303) | public static class TestUpgradeReadListener implements ReadListener {
      method TestUpgradeReadListener (line 1326) | public TestUpgradeReadListener(ServletInputStream inputStream, Servl...
      method onDataAvailable (line 1331) | @Override
      method onAllDataRead (line 1348) | @Override
      method onError (line 1357) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationResponseTest.java
  class DefaultWebApplicationResponseTest (line 55) | class DefaultWebApplicationResponseTest {
    method testAddCookie (line 60) | @Test
    method testAddDateHeader (line 70) | @Test
    method testAddHeader (line 85) | @Test
    method testAddIntHeader (line 102) | @Test
    method testAddIntHeader2 (line 117) | @Test
    method testCloseAsyncResponse (line 137) | @Test
    method testContainsHeader (line 148) | @Test
    method testEncodeRedirectUrl (line 164) | @Test
    method testEncodeUrl (line 175) | @Test
    method testFlushBuffer (line 186) | @Test
    method testFlushBuffer2 (line 201) | @Test
    method testGetBufferSize (line 218) | @Test
    method testGetCharacterEncoding (line 227) | @Test
    method testGetContentLanguage (line 243) | @Test
    method testGetContentType (line 252) | @Test
    method testGetContentType2 (line 268) | @Test
    method testGetCookies (line 285) | @Test
    method testGetHeader (line 295) | @Test
    method testGetHeaderNames (line 310) | @Test
    method testGetHeaders (line 327) | @Test
    method testGetLocale (line 344) | @Test
    method testGetOutputStream (line 357) | @Test
    method testGetOutputStream2 (line 368) | @Test
    method testGetResponseCloser (line 384) | @Test
    method testGetStatus (line 393) | @Test
    method testGetStatusMessage (line 402) | @Test
    method testGetTrailerFields (line 411) | @Test
    method testGetWebApplication (line 420) | @Test
    method testGetWebApplicationOutputStream (line 429) | @Test
    method testGetWriter (line 440) | @Test
    method testGetWriter2 (line 456) | @Test
    method testIsBodyOnly (line 467) | @Test
    method testIsBufferResetting (line 478) | @Test
    method testIsCommitted (line 489) | @Test
    method testReset (line 500) | @Test
    method testReset2 (line 511) | @Test
    method testResetBuffer (line 531) | @Test
    method testSendError (line 555) | @Test
    method testSendError2 (line 574) | @Test
    method testSendRedirect (line 592) | @Test
    method testSendRedirect2 (line 623) | @Test
    method testRedirect3 (line 664) | @Test
    method testSendRedirect4 (line 693) | @Test
    method testSendRedirect5 (line 723) | @Test
    method testSetBodyOnly (line 766) | @Test
    method testSetBufferSize (line 779) | @Test
    method testSetCharacterEncoding (line 791) | @Test
    method testSetCharacterEncoding2 (line 810) | @Test
    method testSetCharacterEncoding3 (line 829) | @Test
    method testSetCharacterEncoding4 (line 845) | @Test
    method testSetCharacterEncoding5 (line 864) | @Test
    method testSetCharacterEncoding6 (line 895) | @SuppressWarnings("deprecation")
    method testSetCommitted (line 911) | @Test
    method testSetContentLength (line 922) | @Test
    method testSetContentLengthLong (line 937) | @Test
    method testSetContentType (line 952) | @Test
    method testSetContentType2 (line 967) | @Test
    method testSetContentType3 (line 983) | @Test
    method testSetDateHeader (line 999) | @Test
    method testSetDateHeader2 (line 1016) | @Test
    method testSetHeader (line 1031) | @Test
    method testSetHeader2 (line 1048) | @Test
    method testSetHeader3 (line 1064) | @Test
    method testSetIntHeader (line 1079) | @Test
    method testSetLocale (line 1094) | @Test
    method testSetResponseCloser (line 1104) | @Test
    method testSetStatus (line 1115) | @Test
    method testSetTrailerFields (line 1130) | @Test
    method testSetWebApplication (line 1145) | @Test
    method testSetWebAplicationOutputStream (line 1156) | @Test
    method testVerifyNotCommitted (line 1226) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationTest.java
  class DefaultWebApplicationTest (line 83) | class DefaultWebApplicationTest {
    method testAddFilter (line 88) | @Test
    method testAddFilter2 (line 98) | @Test
    method testAddFilter3 (line 123) | @Test
    method testAddFilter4 (line 176) | @Test
    method testAddFilter5 (line 201) | @Test
    method testAddFilter6 (line 213) | @Test
    method testAddFilter7 (line 222) | @Test
    method testAddFilter8 (line 234) | @Test
    method testAddFilter9 (line 245) | @Test
    method testAddFilter10 (line 256) | @Test
    method testAddFilter11 (line 267) | @Test
    method testAddFilter12 (line 277) | @Test
    method testAddFilter13 (line 287) | @Test
    method testAddFilterMapping (line 307) | @Test
    method testAddInitializer (line 333) | @Test
    method testAddInitializer2 (line 346) | @Test
    method testAddInitializer3 (line 357) | @Test
    method testAddJspFile (line 375) | @Test
    method testAddJspFile2 (line 384) | @Test
    method testAddJspFile3 (line 396) | @Test
    method testAddMimeType (line 406) | @Test
    method testAddListener (line 417) | @Test
    method testAddListener2 (line 428) | @Test
    method testAddListener3 (line 445) | @Test
    method testAddListener4 (line 474) | @Test
    method testAddListener5 (line 501) | @Test
    method testAddListener6 (line 523) | @Test
    method testAddMapping (line 540) | @Test
    method testAddMapping2 (line 557) | @Test
    method testAddResource (line 572) | @Test
    method testAddServlet (line 584) | @Test
    method testAddServlet2 (line 613) | @Test
    method testAddServlet3 (line 638) | @Test
    method testAddServlet4 (line 649) | @Test
    method testAddServletMapping (line 662) | @Test
    method testCreateFilter (line 690) | @Test
    method testCreateListener (line 699) | @Test
    method testCreateListener2 (line 709) | @Test
    method testCreateListener3 (line 721) | @Test
    method testCreateServlet (line 731) | @Test
    method testDeclareRoles (line 740) | @Test
    method testDestroy (line 751) | @Test
    method testGetAsync (line 772) | @Test
    method testGetAsync2 (line 824) | @Test
    method testGetAttribute (line 871) | @Test
    method testGetAttributeNames (line 880) | @Test
    method testGetContext (line 889) | @Test
    method testGetContextPath (line 898) | @Test
    method testGetDefaultServlet (line 907) | @Test
    method testGetDefaultSessionTrackingModes (line 916) | @Test
    method testGetEffectiveMajorVersion (line 925) | @Test
    method testGetEffectiveMinorVersion (line 934) | @Test
    method testGetEffectiveSessionTrackingMode (line 943) | @Test
    method testGetEffectiveSessionTrackingModes2 (line 952) | @Test
    method testGetFilterRegistration (line 963) | @Test
    method testGetFilterRegistration2 (line 978) | @Test
    method testGetFilterRegistrations (line 988) | @Test
    method testGetInitParameter (line 998) | @Test
    method testGetInitParameterNames (line 1008) | @Test
    method testGetInitializers (line 1020) | @Test
    method testGetJspConfigDescriptor (line 1032) | @Test
    method testGetMajorVersion (line 1041) | @Test
    method testGetManager (line 1050) | @Test
    method testGetMappings (line 1059) | @Test
    method testGetMimeType (line 1069) | @Test
    method testGetMimeType2 (line 1079) | @Test
    method testGetMimeType3 (line 1089) | @Test
    method testGetMimeType4 (line 1098) | @Test
    method testGetMimeType5 (line 1108) | @Test
    method testGetMinorVersion (line 1117) | @Test
    method testGetRealPath (line 1126) | @Test
    method testGetRealPath2 (line 1135) | @Test
    method testGetRequest (line 1145) | @Test
    method testGetRequestCharacterEncoding (line 1157) | @Test
    method testGetResource (line 1170) | @Test
    method testGetResourceAsStream (line 1179) | @Test
    method testGetResourcePaths (line 1189) | @Test
    method testGetResourcePaths2 (line 1203) | @Test
    method testGetResourcePaths3 (line 1228) | @Test
    method testGetResourcePaths4 (line 1237) | @Test
    method testGetResponse (line 1251) | @Test
    method testGetResponseCharacterEncoding (line 1263) | @Test
    method testGetSecurityManager (line 1276) | @Test
    method testGetServerInfo (line 1285) | @Test
    method testGetServletContextId (line 1295) | @Test
    method testGetServletContextName (line 1304) | @Test
    method testGetServletRegistration (line 1313) | @Test
    method testGetServletRegistration2 (line 1323) | @Test
    method testGetServletRegistrations (line 1334) | @Test
    method testGetServletRegistrations2 (line 1344) | @Test
    method testGetVirtualServerName (line 1354) | @Test
    method testInclude2 (line 1367) | @Test
    method testInclude3 (line 1398) | @Test
    method testInitialize (line 1427) | @Test
    method testInitializeFilters (line 1437) | @Test
    method testInitializeFinish (line 1447) | @Test
    method testInitializeInitializers (line 1457) | @Test
    method testInitializeServlets (line 1467) | @Test
    method testIsDistributable (line 1477) | @Test
    method testIsInitialized (line 1486) | @Test
    method testIsMetadataComplete (line 1497) | @Test
    method testLinkRequestAndResponse (line 1506) | @Test
    method testLog (line 1521) | @Test
    method testLog2 (line 1530) | @Test
    method testService (line 1541) | @Test
    method testService2 (line 1568) | @Test
    method testService3 (line 1594) | @Test
    method testSetAttribute (line 1617) | @Test
    method testSetAttribute2 (line 1627) | @Test
    method testSetClassLoader (line 1636) | @Test
    method testSetContextPath (line 1647) | @Test
    method testSetDefaultServlet (line 1657) | @Test
    method testSetDistributable (line 1669) | @Test
    method testSetEffectiveMajorVersion (line 1680) | @Test
    method testSetEffectiveMinorVersion (line 1691) | @Test
    method testSetEffectiveSessionTrackingModes (line 1702) | @Test
    method testSetInitParameter (line 1715) | @Test
    method testSetInitParameter2 (line 1725) | @Test
    method testSetInitParameter3 (line 1737) | @Test
    method testSetInitParameter4 (line 1747) | @Test
    method testSetJspConfigDescriptor (line 1759) | @Test
    method testSetMetadataComplete (line 1780) | @Test
    method testSetRequestCharacterEncoding (line 1791) | @Test
    method testSetResponseCharacterEncoding (line 1802) | @Test
    method testSetServletContextName (line 1813) | @Test
    method testSetVirtualServerName (line 1824) | @Test
    method testSetWebApplicationRequestMapper (line 1836) | @Test
    method testStart (line 1851) | @Test
    method testStart2 (line 1862) | @Test
    method testStop (line 1879) | @Test
    method testRemoveAttribute (line 1892) | @Test
    method testRemoveServletMapping (line 1904) | @Test
    method testUnlinkRequestAndResponse (line 1919) | @Test
    class TestAddFilterFilter (line 1935) | class TestAddFilterFilter implements Filter {
      method doFilter (line 1937) | @Override
    class TestAddFilter5Filter (line 1945) | class TestAddFilter5Filter implements Filter {
      method doFilter (line 1947) | @Override
    class TestAddInitializer2Initializer (line 1956) | public static class TestAddInitializer2Initializer implements ServletC...
      method onStartup (line 1958) | @Override
    class TestAddInitializer3Initializer (line 1967) | public static class TestAddInitializer3Initializer implements ServletC...
      method TestAddInitializer3Initializer (line 1974) | public TestAddInitializer3Initializer() throws IOException {
      method onStartup (line 1978) | @Override
    class TestAddListener2Listener (line 1986) | public static class TestAddListener2Listener implements EventListener {
    class TestCreateListenerEventListener (line 1992) | public static class TestCreateListenerEventListener implements EventLi...
    class TestCreateListener2ServletContextListener (line 1998) | public static class TestCreateListener2ServletContextListener implemen...
    class TestCreateListener3ServletRequestListener (line 2004) | public static class TestCreateListener3ServletRequestListener implemen...
    class TestGetServletRegistration2Servlet (line 2010) | public static class TestGetServletRegistration2Servlet extends HttpSer...
    class TestGetServletRegistrationsServlet (line 2016) | public static class TestGetServletRegistrationsServlet extends HttpSer...

FILE: core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebConnectionTest.java
  class DefaultWebConnectionTest (line 39) | class DefaultWebConnectionTest {
    method testClose (line 44) | @Test
    method testGetInputStream (line 57) | @Test
    method testGetOutputStream (line 68) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/FilterTest.java
  class FilterTest (line 55) | class FilterTest {
    method setUp (line 67) | @BeforeEach
    method testDoFilter (line 77) | @Test
    method testAddFilterGetClassName (line 94) | @Test
    class TestMultiple1Filter (line 104) | class TestMultiple1Filter implements Filter {
      method destroy (line 109) | @Override
      method doFilter (line 122) | @Override
      method init (line 134) | @Override
    class TestMultiple2Filter (line 142) | class TestMultiple2Filter implements Filter {
      method destroy (line 147) | @Override
      method doFilter (line 160) | @Override
      method init (line 172) | @Override
    class TestEndServlet (line 180) | class TestEndServlet extends HttpServlet {
      method doGet (line 192) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/HttpSessionTest.java
  class HttpSessionTest (line 70) | public class HttpSessionTest {
    method testAttributeAdded (line 77) | @Test
    method testAttributeRemoved (line 116) | @Test
    method testAttributeReplaced (line 156) | @Test
    method testSessionCreated (line 197) | @Test
    method testSessionDestroyed (line 235) | @Test
    method testSessionIdChanged (line 273) | @Test
    method testValueBound (line 315) | @Test
    method testValueUnbound (line 338) | @Test
    method testValueBoundUnbound (line 365) | @Test
    method testGetAttribute (line 390) | @Test
    method testGetAttributeNames (line 404) | @Test
    method testGetCookies (line 415) | @SuppressWarnings({"removal"})
    method testGetCreationTime (line 449) | @Test
    method testGetId (line 460) | @Test
    method testGetLastAccessedTime (line 471) | @Test
    method testGetMaxInactiveInterval (line 482) | @Test
    method testGetServletContext (line 494) | @Test
    method testInvalidate (line 506) | @Test
    method testInvalidate2 (line 524) | @Test
    method testIsNew (line 537) | @Test
    method testRemoveAttribute (line 551) | @Test
    method testSetAttribute (line 565) | @Test
    method testSetAttribute2 (line 577) | @Test
    method testSetMaxInactiveInterval (line 590) | @Test
    class TestSetCommentListener (line 603) | public static class TestSetCommentListener implements ServletContextLi...
      method contextInitialized (line 605) | @SuppressWarnings({"removal"})
    class TestSetCommentServlet (line 616) | public static class TestSetCommentServlet extends HttpServlet {
      method service (line 618) | @SuppressWarnings({"removal"})
    method testCreateSession (line 632) | @Test
    method testDestroySession (line 642) | @Test
    method testEncodeRedirectURL (line 662) | @Test
    method testEncodeURL (line 671) | @Test
    method testGetComment (line 680) | @Test
    method testGetDomain (line 692) | @Test
    method testGetEffectiveSessionTrackingModes (line 704) | @Test
    method testGetMaxAge (line 714) | @Test
    method testGetName (line 727) | @Test
    method testGetPath (line 739) | @Test
    method testGetSession (line 751) | @Test
    method testGetSession2 (line 761) | @Test
    method testGetSessionCookieConfig (line 777) | @Test
    method testGetSessionTimeout (line 786) | @Test
    method testIsHttpOnly (line 799) | @Test
    method testIsSecure (line 812) | @Test
    method testSetComment (line 827) | @SuppressWarnings({"removal"})
    method testSetComment2 (line 839) | @SuppressWarnings({"removal"})
    method testSetDomain (line 859) | @Test
    method testSetHttpOnly (line 878) | @Test
    method testSetMaxAge (line 897) | @Test
    method testSetName (line 916) | @Test
    method testSetPath (line 935) | @Test
    method testSetSecure (line 954) | @Test
    method testSetSessionTrackingModes (line 968) | @Test
    method testChangeSessionId (line 982) | @Test
    method testChangeSessionId2 (line 1000) | @Test
    method testChangeSessionId3 (line 1018) | @Test
    method testChangeSessionId4 (line 1033) | @Test
    method testGetSession3 (line 1051) | @Test
    method testGetSession4 (line 1067) | @Test
    method testCreateListenerWithHttpSessionListener (line 1084) | @Test
    method testGetSessionCookieConfigIsNotNull (line 1096) | @Test
    method testGetSessionTimeoutToSeeIfValueIsGreaterThanZero (line 1107) | @Test
    method testGetSessionWhenPassingInFalseReturnsNull (line 1118) | @Test
    method testGetSessionWhenPassingInTrueAndFalseReturnsNotNull (line 1140) | @Test
    method testGetSessionWhenPassingInTrueReturnNotNull (line 1162) | @Test
    method testGetSessionWithoutParameters (line 1186) | @Test
    method testIsRequestedSessionIdFromCookie (line 1230) | @Test
    method testIsRequestedSessionIdFromURLReturnsFalseByDefault (line 1242) | @Test
    method testIsRequestedSessionIdValidReturnsFalseByDefault (line 1253) | @Test
    method testIsRequestedSessionIdValidReturnsTrue (line 1265) | @Test
    method testSetRequestedSessionIdFromCookieToTrue (line 1287) | @Test
    method testSetRequestedSessionIdFromURLToTrue (line 1300) | @Test
    method testSetSessionTimeoutThrowsIllegalStateExceptionAfterStart (line 1314) | @Test
    method testSetSessionTimeoutWithMultipleTimeouts (line 1328) | @Test
    method testSetSessionTrackingModesWithEmptyHashSet (line 1342) | @Test
    class TestCreateListenerWithHttpSessionListener (line 1355) | public static class TestCreateListenerWithHttpSessionListener implemen...

FILE: core/impl/src/test/java/cloud/piranha/core/impl/ReadListenerTest.java
  class ReadListenerTest (line 45) | public class ReadListenerTest {
    method createWebApplication (line 47) | private WebApplication createWebApplication() {
    method createWebApplicationRequest (line 51) | private WebApplicationRequest createWebApplicationRequest() {
    method createWebApplicationResponse (line 55) | private WebApplicationResponse createWebApplicationResponse() {
    method testOnAllDataRead (line 64) | @Test
    method testOnDataAvailable (line 91) | @Test
    class TestOnAllDataReadReadListener (line 111) | public static class TestOnAllDataReadReadListener implements ReadListe...
      method TestOnAllDataReadReadListener (line 123) | public TestOnAllDataReadReadListener(WebApplication webApplication) {
      method onAllDataRead (line 127) | @Override
      method onDataAvailable (line 132) | @Override
      method onError (line 136) | @Override
    class TestOnDataAvailableReadListener (line 144) | public static class TestOnDataAvailableReadListener implements ReadLis...
      method TestOnDataAvailableReadListener (line 156) | public TestOnDataAvailableReadListener(WebApplication webApplication) {
      method onAllDataRead (line 160) | @Override
      method onDataAvailable (line 164) | @Override
      method onError (line 169) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/RequestDispatcherTest.java
  class RequestDispatcherTest (line 65) | class RequestDispatcherTest {
    method testForwardWithNamedDispatcher (line 78) | @Test
    method testNamedForward2 (line 135) | @Test
    method testNamedForward3 (line 176) | @Test
    method testNamedForward4 (line 212) | @Test
    method testNamedInclude (line 255) | @Test
    method testForward (line 297) | @Test
    method testForward3 (line 336) | @Test
    method testForward4 (line 367) | @Test
    method testForwardNoWrapping (line 399) | @Test
    method testForwardWithNamedDispatcher2 (line 434) | @Test
    method testForwardWithQueryString (line 472) | @Test
    method testGetExistingNamedDispatcher (line 526) | @Test
    method testGetNonExistingNamedDispatcher (line 542) | @Test
    method testInclude (line 557) | @Test
    method testIncludeOutputStream (line 593) | @Test
    method testIncludeNoWrapping (line 628) | @Test
    method testIncludeWitNamedRequestDispatcherAndIllegalStateException (line 676) | @Test
    method testIncludeWitNamedRequestDispatcherAndBufferSize (line 721) | @Test
    method testIncludeWithQueryString (line 768) | @Test
    method testErrorDispatcher (line 818) | @Test
    method testErrorDispatcher2 (line 857) | @Test
    method testGetRequestDispatcher (line 897) | @Test
    method testGetRequestDispatcher2 (line 914) | @Test
    method testInclude2 (line 932) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/ServletContextAttributeListenerTest.java
  class ServletContextAttributeListenerTest (line 50) | class ServletContextAttributeListenerTest {
    method createWebApplication (line 52) | private WebApplication createWebApplication() {
    method createWebApplicationRequest (line 56) | private WebApplicationRequest createWebApplicationRequest() {
    method createWebApplicationResponse (line 60) | private WebApplicationResponse createWebApplicationResponse() {
    method testAttributeAdded (line 71) | @Test
    method testAttributeRemoved (line 106) | @Test
    method testAttributeReplaced (line 143) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/ServletInputStreamTest.java
  class ServletInputStreamTest (line 47) | public class ServletInputStreamTest {
    method createWebApplication (line 49) | private WebApplication createWebApplication() {
    method createWebApplicationRequest (line 53) | private WebApplicationRequest createWebApplicationRequest() {
    method createWebApplicationResponse (line 57) | private WebApplicationResponse createWebApplicationResponse() {
    method testIsFinished (line 66) | void testIsFinished() throws Exception {
    method testIsReady (line 77) | void testIsReady() throws Exception {
    method testRead (line 88) | @Test
    method testSetReadListener (line 103) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/ServletRegistrationTest.java
  class ServletRegistrationTest (line 47) | class ServletRegistrationTest {
    method createWebApplication (line 49) | private WebApplication createWebApplication() {
    method testGetClassName (line 56) | @Test
    method testGetInitParameter (line 67) | @Test
    method testGetInitParameters (line 78) | @Test
    method testGetName (line 89) | @Test
    method testGetRunAsRole (line 99) | @Test
    method testGetServletRegistration2 (line 113) | @Test
    method testSetInitParameters (line 123) | @Test
    method testSetInitParameters2 (line 135) | @Test
    method testSetInitParameters3 (line 148) | @Test
    method testSetInitParameters4 (line 161) | @Test
    method testSetInitParameters5 (line 174) | @Test
    class TestGetClassNameServlet (line 188) | public static class TestGetClassNameServlet extends HttpServlet {

FILE: core/impl/src/test/java/cloud/piranha/core/impl/ServletRequestAttributeListenerTest.java
  class ServletRequestAttributeListenerTest (line 49) | class ServletRequestAttributeListenerTest {
    method createWebApplication (line 51) | private WebApplication createWebApplication() {
    method createWebApplicationRequest (line 55) | private WebApplicationRequest createWebApplicationRequest() {
    method createWebApplicationResponse (line 59) | private WebApplicationResponse createWebApplicationResponse() {
    method testAttributeAdded (line 70) | @Test
    method testAttributeRemoved (line 103) | @Test
    method testAttributeReplaced (line 137) | @Test

FILE: core/impl/src/test/java/cloud/piranha/core/impl/ServletTest.java
  class ServletTest (line 50) | class ServletTest {
    method setUp (line 62) | @BeforeEach
    method testService (line 72) | @Test
    class TestServlet (line 95) | public static class TestServlet extends HttpServlet {
      method TestServlet (line 99) | public TestServlet() {
      method doGet (line 102) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/TestChat1Servlet.java
  class TestChat1Servlet (line 48) | public class TestChat1Servlet extends HttpServlet {
    method init (line 76) | @Override
    method doGet (line 113) | @Override
    method doPost (line 174) | @Override
    method destroy (line 206) | @Override
    method notify (line 218) | private void notify(String message) throws IOException {

FILE: core/impl/src/test/java/cloud/piranha/core/impl/TestChat2Servlet.java
  class TestChat2Servlet (line 48) | public class TestChat2Servlet extends HttpServlet {
    method init (line 76) | @Override
    method doGet (line 113) | @Override
    method doPost (line 174) | @Override
    method destroy (line 206) | @Override
    method notify (line 218) | private void notify(String message) throws IOException {

FILE: core/impl/src/test/java/cloud/piranha/core/impl/TestEcho1Servlet.java
  class TestEcho1Servlet (line 41) | public class TestEcho1Servlet extends HttpServlet {
    method doGet (line 56) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/TestEcho2Servlet.java
  class TestEcho2Servlet (line 41) | public class TestEcho2Servlet extends HttpServlet {
    method doGet (line 56) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/TestHttpServerRequest.java
  class TestHttpServerRequest (line 41) | public class TestHttpServerRequest implements HttpServerRequest {
    method getHeader (line 43) | @Override
    method getHeaders (line 48) | @Override
    method isSecure (line 53) | @Override
    method TestHttpServerRequest (line 117) | public TestHttpServerRequest() {
    method getHeaderNames (line 133) | @Override
    method getInputStream (line 141) | @Override
    method getLocalAddress (line 149) | @Override
    method getLocalHostname (line 157) | @Override
    method getLocalPort (line 165) | @Override
    method getMethod (line 173) | @Override
    method getRemoteAddress (line 181) | @Override
    method getRemoteHostname (line 189) | @Override
    method getRemotePort (line 197) | @Override
    method getRequestTarget (line 205) | @Override
    method setMethod (line 215) | public void setMethod(String method) {
    method setInputStream (line 224) | public void setInputStream(InputStream inputStream) {
    method setLocalAddress (line 233) | public void setLocalAddress(String localAddress) {
    method setLocalHostname (line 242) | public void setLocalHostname(String localHostname) {
    method setLocalPort (line 251) | public void setLocalPort(int localPort) {
    method setQueryString (line 260) | public void setQueryString(String queryString) {
    method setRemoteAddress (line 269) | public void setRemoteAddress(String remoteAddress) {
    method setRemoteHostname (line 278) | public void setRemoteHostname(String remoteHostname) {
    method setRemotePort (line 287) | public void setRemotePort(int remotePort) {
    method setRequestTarget (line 296) | public void setRequestTarget(String requestTarget) {

FILE: core/impl/src/test/java/cloud/piranha/core/impl/TestHttpServerResponse.java
  class TestHttpServerResponse (line 40) | public class TestHttpServerResponse implements HttpServerResponse {
    method TestHttpServerResponse (line 50) | public TestHttpServerResponse() {
    method getByteArrayOutputStream (line 57) | public ByteArrayOutputStream getByteArrayOutputStream() {
    method addHeader (line 61) | @Override
    method getHeader (line 65) | @Override
    method getOutputStream (line 70) | @Override
    method setHeader (line 75) | @Override
    method setStatus (line 79) | @Override
    method writeHeaders (line 83) | @Override
    method writeStatusLine (line 87) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/TestIOExceptionServlet.java
  class TestIOExceptionServlet (line 41) | public class TestIOExceptionServlet extends HttpServlet {
    method doGet (line 56) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/TestInclude2Servlet.java
  class TestInclude2Servlet (line 42) | public class TestInclude2Servlet extends HttpServlet {
    method init (line 50) | @Override
    method doGet (line 62) | @Override
    method destroy (line 72) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/TestInclude3Servlet.java
  class TestInclude3Servlet (line 43) | public class TestInclude3Servlet extends HttpServlet {
    method init (line 51) | @Override
    method doGet (line 63) | @Override
    method destroy (line 73) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/TestInclude4Servlet.java
  class TestInclude4Servlet (line 43) | public class TestInclude4Servlet extends HttpServlet {
    method init (line 51) | @Override
    method doGet (line 63) | @Override
    method destroy (line 75) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/TestIncludeServlet.java
  class TestIncludeServlet (line 43) | public class TestIncludeServlet extends HttpServlet {
    method init (line 51) | @Override
    method doGet (line 63) | @Override
    method destroy (line 73) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/TestRuntimeExceptionServlet.java
  class TestRuntimeExceptionServlet (line 41) | public class TestRuntimeExceptionServlet extends HttpServlet {
    method doGet (line 56) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/TestSnoopServlet.java
  class TestSnoopServlet (line 46) | public class TestSnoopServlet extends HttpServlet {
    method processRequest (line 61) | protected void processRequest(HttpServletRequest request, HttpServletR...
    method doGet (line 175) | @Override
    method doPost (line 188) | @Override

FILE: core/impl/src/test/java/cloud/piranha/core/impl/TestWebApplicationRequest.java
  class TestWebApplicationRequest (line 35) | public class TestWebApplicationRequest extends DefaultWebApplicationRequ...

FILE: core/impl/src/test/java/cloud/piranha/core/impl/TestWebApplicationResponse.java
  class TestWebApplicationResponse (line 37) | public class TestWebApplicationResponse extends DefaultWebApplicationRes...
    method TestWebApplicationResponse (line 42) | public TestWebApplicationResponse() {
    method getResponseBytes (line 50) | public byte[] getResponseBytes() {

FILE: core/impl/src/test/java/cloud/piranha/core/impl/WriteListenerTest.java
  class WriteListenerTest (line 45) | public class WriteListenerTest {
    method createWebApplication (line 47) | private WebApplication createWebApplication() {
    method createWebApplicationRequest (line 51) | private WebApplicationRequest createWebApplicationRequest() {
    method createWebApplicationResponse (line 55) | private WebApplicationResponse createWebApplicationResponse() {
    method testOnWritePossible (line 64) | @Test
    class TestOnWritePossibleWriteListener (line 84) | public static class TestOnWritePossibleWriteListener implements WriteL...
      method TestOnWritePossibleWriteListener (line 96) | public TestOnWritePossibleWriteListener(WebApplication webApplicatio...
      method onWritePossible (line 100) | @Override
      method onError (line 105) | @Override

FILE: debug/src/main/java/cloud/piranha/debug/Debug.java
  class Debug (line 34) | public class Debug {
    method Debug (line 39) | public Debug() {
    method main (line 46) | public static void main(String[] args) {

FILE: dist/coreprofile/src/main/java/cloud/piranha/dist/coreprofile/CoreProfilePiranhaMain.java
  class CoreProfilePiranhaMain (line 49) | public class CoreProfilePiranhaMain extends SingleMain {
    method CoreProfilePiranhaMain (line 54) | public CoreProfilePiranhaMain() {
    method main (line 63) | public static void main(String[] arguments) {

FILE: dist/isolated/src/main/java/cloud/piranha/dist/isolated/IsolatedPiranha.java
  class IsolatedPiranha (line 65) | public class IsolatedPiranha implements Piranha, Runnable {
    method IsolatedPiranha (line 105) | public IsolatedPiranha() {
    method getConfiguration (line 112) | @Override
    method get (line 122) | public static IsolatedPiranha get() {
    method main (line 131) | public static void main(String[] arguments) {
    method processArguments (line 143) | private void processArguments(String[] arguments) {
    method run (line 168) | @Override
    method deploy (line 277) | private void deploy(File warFile, HttpWebApplicationServer webApplicat...
    method getContextPath (line 298) | private String getContextPath(File warFile) {
    method createDeployingFile (line 310) | private File createDeployingFile() {
    method createStartedFile (line 322) | private File createStartedFile() {

FILE: dist/isolated/src/test/java/cloud/piranha/dist/isolated/IsolatedPiranhaIT.java
  class IsolatedPiranhaIT (line 45) | class IsolatedPiranhaIT {
    method extractZipInputStream (line 54) | private void extractZipInputStream(ZipInputStream zipInput, String fil...
    method extractServer (line 67) | private void extractServer(File zipFile) {
    method testRun (line 91) | @Test

FILE: dist/micro/src/main/java/cloud/piranha/dist/micro/MicroBootstrap.java
  class MicroBootstrap (line 51) | public class MicroBootstrap implements Runnable {
    method MicroBootstrap (line 81) | public MicroBootstrap() {
    method main (line 92) | public static void main(String[] arguments) {
    method configure (line 110) | public void configure(String[] arguments) {
    method run (line 154) | @Override
    method stop (line 181) | public void stop() {

FILE: dist/micro/src/test/java/cloud/piranha/dist/micro/MicroPiranhaIT.java
  class MicroPiranhaIT (line 43) | class MicroPiranhaIT {
    method testCommandLine (line 50) | @Disabled

FILE: dist/microprofile/src/main/java/cloud/piranha/dist/microprofile/MicroProfilePiranhaMain.java
  class MicroProfilePiranhaMain (line 44) | public class MicroProfilePiranhaMain extends SingleMain {
    method MicroProfilePiranhaMain (line 49) | public MicroProfilePiranhaMain() {
    method main (line 58) | public static void main(String[] arguments) {

FILE: dist/platform/src/main/java/cloud/piranha/dist/platform/PlatformPiranhaMain.java
  class PlatformPiranhaMain (line 39) | public class PlatformPiranhaMain extends MultiPiranhaMain {
    method PlatformPiranhaMain (line 44) | public PlatformPiranhaMain() {
    method main (line 53) | public static void main(String[] arguments) {

FILE: dist/platform/src/main/java/cloud/piranha/dist/platform/PlatformWebApplication.java
  class PlatformWebApplication (line 39) | public class PlatformWebApplication extends DefaultWebApplication {
    method PlatformWebApplication (line 51) | public PlatformWebApplication(WebApplicationServerRequestMapper reques...
    method getContext (line 55) | @Override

FILE: dist/platform/src/test/java/cloud/piranha/dist/platform/PlatformPiranhaBuilderTest.java
  class PlatformPiranhaBuilderTest (line 48) | class PlatformPiranhaBuilderTest {
    method testHttpPort (line 55) | @Test
    method testHttpPort2 (line 75) | @Test
    method testHttpsPort2 (line 98) | @Test
    method testDefaultExtensionClass (line 124) | @Test

FILE: dist/platform/src/test/java/cloud/piranha/dist/platform/PlatformPiranhaIT.java
  class PlatformPiranhaIT (line 47) | class PlatformPiranhaIT {
    method extractZipInputStream (line 56) | private void extractZipInputStream(ZipInputStream zipInput, String fil...
    method extractServer (line 69) | private void extractServer(File zipFile) {
    method testRun (line 93) | @Test

FILE: dist/server/src/main/java/cloud/piranha/dist/server/ServerPiranhaMain.java
  class ServerPiranhaMain (line 39) | public class ServerPiranhaMain extends MultiPiranhaMain {
    method ServerPiranhaMain (line 44) | public ServerPiranhaMain() {
    method main (line 53) | public static void main(String[] arguments) {

FILE: dist/server/src/main/java/cloud/piranha/dist/server/ServerWebApplication.java
  class ServerWebApplication (line 39) | public class ServerWebApplication extends DefaultWebApplication {
    method ServerWebApplication (line 51) | public ServerWebApplication(WebApplicationServerRequestMapper requestM...
    method getContext (line 55) | @Override

FILE: dist/server/src/test/java/cloud/piranha/dist/server/ServerPiranhaBuilderTest.java
  class ServerPiranhaBuilderTest (line 48) | class ServerPiranhaBuilderTest {
    method testHttpPort (line 55) | @Test
    method testHttpPort2 (line 75) | @Test
    method testHttpsPort2 (line 98) | @Test
    method testDefaultExtensionClass (line 124) | @Test

FILE: dist/server/src/test/java/cloud/piranha/dist/server/ServerPiranhaIT.java
  class ServerPiranhaIT (line 47) | class ServerPiranhaIT {
    method extractZipInputStream (line 56) | private void extractZipInputStream(ZipInputStream zipInput, String fil...
    method extractServer (line 69) | private void extractServer(File zipFile) {
    method testRun (line 93) | @Test

FILE: dist/servlet/src/main/java/cloud/piranha/dist/servlet/ServletPiranhaMain.java
  class ServletPiranhaMain (line 44) | public class ServletPiranhaMain extends SingleMain {
    method main (line 51) | public static void main(String[] arguments) {

FILE: dist/webprofile/src/main/java/cloud/piranha/dist/webprofile/WebProfilePiranhaMain.java
  class WebProfilePiranhaMain (line 44) | public class WebProfilePiranhaMain extends SingleMain {
    method WebProfilePiranhaMain (line 49) | public WebProfilePiranhaMain() {
    method main (line 58) | public static void main(String[] arguments) {

FILE: docker/coreprofile/src/test/java/cloud/piranha/docker/coreprofile/CoreProfileIT.java
  class CoreProfileIT (line 16) | public class CoreProfileIT {
    method testBasicFunctionality (line 24) | @Test

FILE: embedded/src/main/java/cloud/piranha/embedded/EmbeddedPiranha.java
  class EmbeddedPiranha (line 48) | public class EmbeddedPiranha implements Piranha {
    method EmbeddedPiranha (line 63) | public EmbeddedPiranha() {
    method EmbeddedPiranha (line 73) | public EmbeddedPiranha(WebApplication webApplication) {
    method destroy (line 82) | public EmbeddedPiranha destroy() {
    method getConfiguration (line 87) | @Override
    method getWebApplication (line 95) | public WebApplication getWebApplication() {
    method initialize (line 104) | public EmbeddedPiranha initialize() {
    method service (line 120) | public EmbeddedResponse service(String servletPath, String... paramete...
    method service (line 152) | public EmbeddedResponse service(WebApplicationRequest request) throws ...
    method service (line 166) | public void service(WebApplicationRequest request, WebApplicationRespo...
    method start (line 184) | public EmbeddedPiranha start() {
    method stop (line 194) | public EmbeddedPiranha stop() {

FILE: embedded/src/main/java/cloud/piranha/embedded/EmbeddedPiranhaBuilder.java
  class EmbeddedPiranhaBuilder (line 56) | public class EmbeddedPiranhaBuilder implements PiranhaBuilder<EmbeddedPi...
    method EmbeddedPiranhaBuilder (line 136) | public EmbeddedPiranhaBuilder() {
    method aliasedDirectoryResource (line 158) | public EmbeddedPiranhaBuilder aliasedDirectoryResource(String path, St...
    method attribute (line 170) | public EmbeddedPiranhaBuilder attribute(String name, Object value) {
    method build (line 180) | @Override
    method buildAndStart (line 271) | public EmbeddedPiranha buildAndStart() {
    method classLoader (line 282) | public EmbeddedPiranhaBuilder classLoader(ClassLoader classLoader) {
    method directoryResource (line 293) | public EmbeddedPiranhaBuilder directoryResource(String path) {
    method extension (line 304) | public EmbeddedPiranhaBuilder extension(Class<? extends WebApplication...
    method extensions (line 315) | @SafeVarargs
    method filter (line 330) | public EmbeddedPiranhaBuilder filter(String filterName, Class<?> filte...
    method filter (line 342) | public EmbeddedPiranhaBuilder filter(String filterName, String classNa...
    method filterInitParam (line 355) | public EmbeddedPiranhaBuilder filterInitParam(String filterName, Strin...
    method filterMapping (line 372) | public EmbeddedPiranhaBuilder filterMapping(String filterName, String....
    method httpSessionManager (line 383) | public EmbeddedPiranhaBuilder httpSessionManager(HttpSessionManager ht...
    method initializer (line 394) | public EmbeddedPiranhaBuilder initializer(Class<?> initializerClass) {
    method initializer (line 405) | public EmbeddedPiranhaBuilder initializer(String className) {
    method initializers (line 416) | public EmbeddedPiranhaBuilder initializers(Class<?>... initializerClas...
    method listener (line 429) | public EmbeddedPiranhaBuilder listener(String className) {
    method processServletsMapped (line 434) | private EmbeddedPiranhaBuilder processServletsMapped(Object... objects) {
    method servlet (line 451) | public EmbeddedPiranhaBuilder servlet(String servletName, Class<?> ser...
    method servlet (line 462) | public EmbeddedPiranhaBuilder servlet(String servletName, String class...
    method servlet (line 474) | public EmbeddedPiranhaBuilder servlet(String servletName, Class<?> ser...
    method servlet (line 486) | public EmbeddedPiranhaBuilder servlet(String servletName, String class...
    method servletInitParam (line 500) | public EmbeddedPiranhaBuilder servletInitParam(String servletName, Str...
    method servletMapped (line 517) | public EmbeddedPiranhaBuilder servletMapped(Class<?> servletClass, Str...
    method servletMapped (line 530) | public EmbeddedPiranhaBuilder servletMapped(Class<?> servletClass, boo...
    method servletMapping (line 542) | public EmbeddedPiranhaBuilder servletMapping(String servletName, Strin...
    method servletsMapped (line 554) | public EmbeddedPiranhaBuilder servletsMapped(Class<?> servletClass1, S...
    method servletsMapped (line 568) | public EmbeddedPiranhaBuilder servletsMapped(Class<?> servletClass1, S...
    method servletsMapped (line 584) | public EmbeddedPiranhaBuilder servletsMapped(Class<?> servletClass1, S...
    method servletsMapped (line 603) | public EmbeddedPiranhaBuilder servletsMapped(Class<?> servletClass1, S...
    method servletsMapped (line 624) | public EmbeddedPiranhaBuilder servletsMapped(Class<?> servletClass1, S...
    method stringResource (line 637) | public EmbeddedPiranhaBuilder stringResource(String path, String value) {
    method webApplication (line 648) | public EmbeddedPiranhaBuilder webApplication(WebApplication webApplica...

FILE: embedded/src/main/java/cloud/piranha/embedded/EmbeddedRequest.java
  class EmbeddedRequest (line 41) | public class EmbeddedRequest extends DefaultWebApplicationRequest {
    method EmbeddedRequest (line 49) | public EmbeddedRequest(String servletPath) {
    method EmbeddedRequest (line 58) | public EmbeddedRequest() {
    method getWebApplication (line 73) | public WebApplication getWebApplication() {

FILE: embedded/src/main/java/cloud/piranha/embedded/EmbeddedRequestBuilder.java
  class EmbeddedRequestBuilder (line 41) | public class EmbeddedRequestBuilder {
    method EmbeddedRequestBuilder (line 51) | public EmbeddedRequestBuilder() {
    method attribute (line 62) | public EmbeddedRequestBuilder attribute(String name, Object value) {
    method build (line 72) | public EmbeddedRequest build() {
    method contextPath (line 85) | public EmbeddedRequestBuilder contextPath(String contextPath) {
    method cookie (line 96) | public EmbeddedRequestBuilder cookie(Cookie cookie) {
    method header (line 119) | public EmbeddedRequestBuilder header(String name, String value) {
    method method (line 130) | public EmbeddedRequestBuilder method(String method) {
    method parameter (line 142) | public EmbeddedRequestBuilder parameter(String name, String... values) {
    method pathInfo (line 153) | public EmbeddedRequestBuilder pathInfo(String pathInfo) {
    method requestedSessionId (line 164) | public EmbeddedRequestBuilder requestedSessionId(String requestedSessi...
    method requestedSessionIdFromCookie (line 175) | public EmbeddedRequestBuilder requestedSessionIdFromCookie(boolean req...
    method scheme (line 186) | public EmbeddedRequestBuilder scheme(String scheme) {
    method servletPath (line 197) | public EmbeddedRequestBuilder servletPath(String servletPath) {
    method webApplication (line 208) | public EmbeddedRequestBuilder webApplication(WebApplication webApp) {

FILE: embedded/src/main/java/cloud/piranha/embedded/EmbeddedResponse.java
  class EmbeddedResponse (line 41) | public class EmbeddedResponse extends DefaultWebApplicationResponse {
    method EmbeddedResponse (line 46) | public EmbeddedResponse() {
    method getResponseAsByteArray (line 57) | public byte[] getResponseAsByteArray() {
    method getResponseAsString (line 65) | public String getResponseAsString() {

FILE: embedded/src/main/java/cloud/piranha/embedded/EmbeddedResponseBuilder.java
  class EmbeddedResponseBuilder (line 39) | public class EmbeddedResponseBuilder {
    method EmbeddedResponseBuilder (line 49) | public EmbeddedResponseBuilder() {
    method bodyOnly (line 59) | public EmbeddedResponseBuilder bodyOnly(boolean bodyOnly) {
    method build (line 69) | public EmbeddedResponse build() {
    method webApplication (line 79) | public EmbeddedResponseBuilder webApplication(WebApplication webApplic...

FILE: embedded/src/test/java/cloud/piranha/embedded/EmbeddedPiranhaBuilderTest.java
  class EmbeddedPiranhaBuilderTest (line 59) | class EmbeddedPiranhaBuilderTest {
    method testAliasedDirectoryResource (line 67) | @Test
    method testAttribute (line 78) | @Test
    method testDirectoryResource (line 91) | @Test
    method testClassLoader (line 104) | @Test
    method testExtension (line 116) | @Test
    method testExtensions (line 127) | @Test
    method testFilter (line 138) | @Test
    method testFilter2 (line 149) | @Test
    method testFilterInitParam (line 160) | @Test
    method testFilterMapping (line 173) | @Test
    method testHttpSessionManager (line 187) | @Test
    method testInitializer (line 200) | @Test
    method testInitializer2 (line 211) | @Test
    method testInitializers (line 222) | @Test
    method testListener (line 235) | @Test
    method testServlet (line 251) | @Test
    method testServlet2 (line 262) | @Test
    method testServlet3 (line 273) | @Test
    method testServlet4 (line 287) | @Test
    method testServletInitParam (line 301) | @Test
    method testServletMapping (line 314) | @Test
    method testServletMapped (line 328) | @Test
    method testServletMapped2 (line 341) | @Test
    method testServletsMapped (line 355) | @Test
    method testServletsMapped2 (line 368) | @Test
    method testServletsMapped3 (line 384) | @Test
    method testServletsMapped4 (line 406) | @Test
    method testServletsMapped5 (line 432) | @Test
    method testStringResource (line 464) | @Test
    method testWebApplication (line 475) | @Test
    class TestExtension (line 487) | public static class TestExtension implements WebApplicationExtension {
      method configure (line 489) | @Override
    class TestFilter (line 498) | public static class TestFilter implements Filter {
      method doFilter (line 500) | @Override
    class TestInitializer (line 509) | public static class TestInitializer implements ServletContainerInitial...
      method onStartup (line 511) | @Override
    class TestServlet (line 521) | public static class TestServlet extends HttpServlet {
    class Test2Servlet (line 527) | public static class Test2Servlet extends HttpServlet {
    class Test3Servlet (line 533) | public static class Test3Servlet extends HttpServlet {
    class Test4Servlet (line 539) | public static class Test4Servlet extends HttpServlet {
    class Test5Servlet (line 545) | public static class Test5Servlet extends HttpServlet {
    class TestServletRequestListener (line 551) | public static class TestServletRequestListener implements ServletReque...
      method TestServletRequestListener (line 553) | public TestServletRequestListener() {
      method requestInitialized (line 556) | @Override

FILE: embedded/src/test/java/cloud/piranha/embedded/EmbeddedPiranhaTest.java
  class EmbeddedPiranhaTest (line 52) | class EmbeddedPiranhaTest {
    method testExtension (line 59) | @Test
    method testService (line 70) | @Test
    method testService2 (line 88) | @Test
    method testService3 (line 106) | @Test
    method testService4 (line 125) | @Test
    method testService5 (line 144) | @Test
    class TestExtension (line 165) | public static class TestExtension implements WebApplicationExtension {
      method configure (line 172) | @Override
    class TestInitializer (line 181) | public static class TestInitializer implements ServletContainerInitial...
      method onStartup (line 190) | @Override
    class TestServlet (line 199) | public static class TestServlet extends HttpServlet {
      method doGet (line 201) | @Override

FILE: embedded/src/test/java/cloud/piranha/embedded/EmbeddedRequestBuilderTest.java
  class EmbeddedRequestBuilderTest (line 44) | class EmbeddedRequestBuilderTest {
    method testAttribute (line 49) | @Test
    method testContextPath (line 60) | @Test
    method testContextPath2 (line 71) | @Test
    method testCookie (line 82) | @Test
    method testHeader (line 97) | @Test
    method testMethod (line 108) | @Test
    method testParameter (line 119) | @Test
    method testParameter2 (line 130) | @Test
    method testPathInfo (line 141) | @Test
    method testPathInfo2 (line 151) | @Test
    method testRequestedSessionId (line 162) | @Test
    method testRequestedSessionIdFromCookie (line 173) | @Test
    method testScheme (line 185) | @Test
    method testServletPath (line 197) | @Test
    method testWebApplication (line 210) | @Test

FILE: embedded/src/test/java/cloud/piranha/embedded/EmbeddedRequestTest.java
  class EmbeddedRequestTest (line 38) | class EmbeddedRequestTest {
    method testConstructor (line 43) | @Test

FILE: embedded/src/test/java/cloud/piranha/embedded/EmbeddedResponseBuilderTest.java
  class EmbeddedResponseBuilderTest (line 43) | class EmbeddedResponseBuilderTest {
    method testBodyOnly (line 50) | @Test
    method testBodyOnly2 (line 75) | @Test
    method testWebApplication (line 99) | @Test

FILE: extension/angus/src/main/java/cloud/piranha/extension/angus/AngusExtension.java
  class AngusExtension (line 40) | public class AngusExtension implements WebApplicationExtension {
    method AngusExtension (line 50) | public AngusExtension() {
    method configure (line 58) | @Override

FILE: extension/annotationscan-classfile/src/main/java/cloud/piranha/extension/annotationscan/classfile/ClassfileAnnotationScanExtension.java
  class ClassfileAnnotationScanExtension (line 38) | public class ClassfileAnnotationScanExtension implements WebApplicationE...
    method ClassfileAnnotationScanExtension (line 48) | public ClassfileAnnotationScanExtension() {
    method configure (line 56) | @Override

FILE: extension/annotationscan-classfile/src/main/java/cloud/piranha/extension/annotationscan/classfile/ClassfileAnnotationScanInitializer.java
  class ClassfileAnnotationScanInitializer (line 69) | public class ClassfileAnnotationScanInitializer implements ServletContai...
    method ClassfileAnnotationScanInitializer (line 79) | public ClassfileAnnotationScanInitializer() {
    method onStartup (line 89) | @Override
    method loadClass (line 124) | private Class<?> loadClass(ClassLoader classLoader, String className) {
    method getJakartaAnnotations (line 140) | private Stream<Annotation> getJakartaAnnotations(Class<?> clazz) {
    method isJakartaAnnotation (line 145) | private boolean isJakartaAnnotation(Annotation clazz) {
    method isJakartaAnnotation (line 149) | private boolean isJakartaAnnotation(ClassDesc annotation) {
    method readResource (line 153) | private byte[] readResource(String resourceName, ResourceManager resou...
    method classFileHasJakartaAnnotations (line 161) | private boolean classFileHasJakartaAnnotations(byte[] classFileBytes) {
  class Holder (line 196) | class Holder {
    method Holder (line 228) | private Holder() {
    method getLookup (line 259) | @SuppressWarnings("deprecation")

FILE: extension/annotationscan-classfile/src/main/java/cloud/piranha/extension/annotationscan/classfile/internal/InternalAnnotationScanAnnotationInfo.java
  class InternalAnnotationScanAnnotationInfo (line 40) | public class InternalAnnotationScanAnnotationInfo<T> implements Annotati...
    method InternalAnnotationScanAnnotationInfo (line 58) | public InternalAnnotationScanAnnotationInfo(T instance, AnnotatedEleme...
    method getInstance (line 63) | @Override
    method getTarget (line 68) | @Override

FILE: extension/annotationscan-classfile/src/main/java/cloud/piranha/extension/annotationscan/classfile/internal/InternalAnnotationScanAnnotationManager.java
  class InternalAnnotationScanAnnotationManager (line 50) | public class InternalAnnotationScanAnnotationManager implements Annotati...
    method InternalAnnotationScanAnnotationManager (line 65) | public InternalAnnotationScanAnnotationManager() {
    method addAnnotation (line 68) | @Override
    method addInstance (line 82) | @Override
    method getAnnotationStream (line 90) | @SuppressWarnings("unchecked")
    method getAnnotations (line 97) | @Override
    method getAnnotations (line 104) | @Override
    method getAnnotationsByTarget (line 109) | @Override
    method getInstanceStream (line 115) | @SuppressWarnings("unchecked")
    method getInstances (line 122) | @Override
    method getInstances (line 129) | @Override
    method addAnnotatedClass (line 134) | @Override
    method getAnnotatedClass (line 138) | @Override
    method getAnnotatedClasses (line 143) | @Override

FILE: extension/annotationscan-classfile/src/test/java/cloud/piranha/extension/annotationscan/classfile/AnnotationScanExtensionTest.java
  class AnnotationScanExtensionTest (line 49) | class AnnotationScanExtensionTest {
    method testConfigure (line 54) | @Test
    method testConfigure2 (line 71) | @Test

FILE: extension/annotationscan-classfile/src/test/java/cloud/piranha/extension/annotationscan/classfile/TestServlet.java
  class TestServlet (line 38) | @WebServlet(urlPatterns = {"/test"})

FILE: extension/annotationscan-classfile/src/test/java/cloud/piranha/extension/annotationscan/classfile/TestWithHandlesTypesInitializer.java
  class TestWithHandlesTypesInitializer (line 42) | @HandlesTypes({Set.class, TestAnnotation.class})
    method TestWithHandlesTypesInitializer (line 48) | public TestWithHandlesTypesInitializer() {
    method onStartup (line 51) | @Override

FILE: extension/annotationscan-classfile/src/test/java/cloud/piranha/extension/annotationscan/classfile/internal/InternalAnnotationScanAnnotationManagerTest.java
  class InternalAnnotationScanAnnotationManagerTest (line 45) | class InternalAnnotationScanAnnotationManagerTest {
    method testInitializerWithHandlesTypes (line 47) | @Test
    method testInitializerWithHandlesTypes2 (line 59) | @Test
    class ClassAnnotated (line 79) | @TestAnnotation

FILE: extension/annotationscan/src/main/java/cloud/piranha/extension/annotationscan/AnnotationScanExtension.java
  class AnnotationScanExtension (line 42) | public class AnnotationScanExtension implements WebApplicationExtension {
    method AnnotationScanExtension (line 52) | public AnnotationScanExtension() {
    method configure (line 60) | @Override

FILE: extension/annotationscan/src/main/java/cloud/piranha/extension/annotationscan/AnnotationScanInitializer.java
  class AnnotationScanInitializer (line 59) | public class AnnotationScanInitializer implements ServletContainerInitia...
    method AnnotationScanInitializer (line 69) | public AnnotationScanInitializer() {
    method onStartup (line 79) | @Override
    method loadClass (line 135) | public Class<?> loadClass(ClassLoader classLoader, String className) {
    method getWebAnnotations (line 153) | private Stream<Annotation> getWebAnnotations(Class<?> clazz) {
    method hasWebAnnotation (line 164) | private boolean hasWebAnnotation(Class<?> clazz) {
    method isWebAnnotation (line 176) | private boolean isWebAnnotation(Annotation annotation) {

FILE: extension/annotationscan/src/main/java/cloud/piranha/extension/annotationscan/internal/InternalAnnotationScanAnnotationInfo.java
  class InternalAnnotationScanAnnotationInfo (line 40) | public class InternalAnnotationScanAnnotationInfo<T> implements Annotati...
    method InternalAnnotationScanAnnotationInfo (line 58) | public InternalAnnotationScanAnnotationInfo(T instance, AnnotatedEleme...
    method getInstance (line 63) | @Override
    method getTarget (line 68) | @Override

FILE: extension/annotationscan/src/main/java/cloud/piranha/extension/annotationscan/internal/InternalAnnotationScanAnnotationManager.java
  class InternalAnnotationScanAnnotationManager (line 50) | public class InternalAnnotationScanAnnotationManager implements Annotati...
    method InternalAnnotationScanAnnotationManager (line 65) | public InternalAnnotationScanAnnotationManager() {
    method addAnnotation (line 68) | @Override
    method addInstance (line 82) | @Override
    method getAnnotationStream (line 90) | @SuppressWarnings("unchecked")
    method getAnnotations (line 97) | @Override
    method getAnnotations (line 104) | @Override
    method getAnnotationsByTarget (line 109) | @Override
    method getInstanceStream (line 115) | @SuppressWarnings("unchecked")
    method getInstances (line 122) | @Override
    method getInstances (line 129) | @Override
    method addAnnotatedClass (line 134) | @Override
    method getAnnotatedClass (line 138) | @Override
    method getAnnotatedClasses (line 143) | @Override

FILE: extension/annotationscan/src/test/java/cloud/piranha/extension/annotationscan/AnnotationScanExtensionTest.java
  class AnnotationScanExtensionTest (line 46) | class AnnotationScanExtensionTest {
    method testConfigure (line 51) | @Test
    method testConfigure2 (line 68) | @Test

FILE: extension/annotationscan/src/test/java/cloud/piranha/extension/annotationscan/TestServlet.java
  class TestServlet (line 38) | @WebServlet(urlPatterns = {"/test"})

FILE: extension/annotationscan/src/test/java/cloud/piranha/extension/annotationscan/TestWithHandlesTypesInitializer.java
  class TestWithHandlesTypesInitializer (line 42) | @HandlesTypes({Set.class, TestAnnotation.class})
    method TestWithHandlesTypesInitializer (line 48) | public TestWithHandlesTypesInitializer() {
    method onStartup (line 51) | @Override

FILE: extension/annotationscan/src/test/java/cloud/piranha/extension/annotationscan/internal/InternalAnnotationScanAnnotationManagerTest.java
  class InternalAnnotationScanAnnotationManagerTest (line 45) | class InternalAnnotationScanAnnotationManagerTest {
    method testInitializerWithHandlesTypes (line 47) | @Test
    method testInitializerWithHandlesTypes2 (line 59) | @Test
    class ClassAnnotated (line 79) | @TestAnnotation

FILE: extension/bytesstreamhandler/src/main/java/cloud/piranha/extension/bytesstreamhandler/BytesStreamHandlerExtension.java
  class BytesStreamHandlerExtension (line 41) | public class BytesStreamHandlerExtension implements WebApplicationExtens...
    method BytesStreamHandlerExtension (line 51) | public BytesStreamHandlerExtension() {
    method configure (line 54) | @Override

FILE: extension/bytesstreamhandler/src/main/java/cloud/piranha/extension/bytesstreamhandler/BytesStreamHandlerServletContextListener.java
  class BytesStreamHandlerServletContextListener (line 41) | public class BytesStreamHandlerServletContextListener implements Servlet...
    method BytesStreamHandlerServletContextListener (line 51) | public BytesStreamHandlerServletContextListener() {
    method contextInitialized (line 54) | @Override

FILE: extension/bytesstreamhandler/src/main/java/cloud/piranha/extension/bytesstreamhandler/BytesStreamHandlerServletRequestListener.java
  class BytesStreamHandlerServletRequestListener (line 42) | public class BytesStreamHandlerServletRequestListener implements Servlet...
    method BytesStreamHandlerServletRequestListener (line 52) | public BytesStreamHandlerServletRequestListener() {
    method requestDestroyed (line 55) | @Override
    method requestInitialized (line 61) | @Override

FILE: extension/bytesstreamhandler/src/test/java/cloud/piranha/extension/bytesstreamhandler/BytesStreamHandlerExtensionTest.java
  class BytesStreamHandlerExtensionTest (line 45) | class BytesStreamHandlerExtensionTest {
    method testConfigure (line 52) | @Test
    class TestServletRequestListener (line 65) | public static class TestServletRequestListener implements ServletReque...
      method TestServletRequestListener (line 70) | public TestServletRequestListener() {
      method requestInitialized (line 73) | @Override

FILE: extension/concurro/src/main/java/cloud/piranha/extension/concurro/ConcurroExtension.java
  class ConcurroExtension (line 40) | public class ConcurroExtension implements WebApplicationExtension {
    method ConcurroExtension (line 51) | public ConcurroExtension() {
    method configure (line 59) | @Override

FILE: extension/coreprofile/src/main/java/cloud/piranha/extension/coreprofile/CoreProfileExtension.java
  class CoreProfileExtension (line 48) | public class CoreProfileExtension implements WebApplicationExtension {
    method CoreProfileExtension (line 53) | public CoreProfileExtension() {
    method extend (line 56) | @Override
    method getAnnotationScanExtensionClass (line 69) | private static Class<? extends WebApplicationExtension> getAnnotationS...

FILE: extension/datasource/src/main/java/cloud/piranha/extension/datasource/DataSourceWrapper.java
  class DataSourceWrapper (line 46) | public class DataSourceWrapper implements DataSource {
    method DataSourceWrapper (line 58) | public DataSourceWrapper(DataSource wrapped) {
    method getWrapped (line 66) | public DataSource getWrapped() {
    method unwrap (line 70) | @Override
    method isWrapperFor (line 75) | @Override
    method getConnection (line 80) | @Override
    method getConnection (line 85) | @Override
    method getParentLogger (line 90) | @Override
    method getLogWriter (line 95) | @Override
    method setLogWriter (line 100) | @Override
    method setLoginTimeout (line 105) | @Override
    method getLoginTimeout (line 110) | @Override
    method createConnectionBuilder (line 115) | @Override
    method createShardingKeyBuilder (line 120) | @Override

FILE: extension/datasource/src/main/java/cloud/piranha/extension/datasource/DefaultDatasourceExtension.java
  class DefaultDatasourceExtension (line 43) | public class DefaultDatasourceExtension implements WebApplicationExtensi...
    method DefaultDatasourceExtension (line 53) | public DefaultDatasourceExtension() {
    method configure (line 56) | @Override

FILE: extension/datasource/src/main/java/cloud/piranha/extension/datasource/DefaultDatasourceInitializer.java
  class DefaultDatasourceInitializer (line 47) | public class DefaultDatasourceInitializer implements ServletContainerIni...
    method DefaultDatasourceInitializer (line 57) | public DefaultDatasourceInitializer() {
    method onStartup (line 60) | @Override
    method createDataSource (line 68) | private void createDataSource(String name, String className, String ur...

FILE: extension/datasource/src/main/java/cloud/piranha/extension/datasource/TxJoiningDataSource.java
  class TxJoiningDataSource (line 49) | public class TxJoiningDataSource extends DataSourceWrapper {
    method TxJoiningDataSource (line 61) | public TxJoiningDataSource(DataSource dataSource) {
    method getConnection (line 65) | @Override
    method getConnection (line 88) | @Override
    method getNonTxConnection (line 116) | public Connection getNonTxConnection() throws SQLException {
    method getNonTxConnection (line 128) | public Connection getNonTxConnection(String username, String password)...
    method getTransactionManager (line 132) | private TransactionManager getTransactionManager() {

FILE: extension/datasource/src/main/java/cloud/piranha/extension/datasource/XADataSourceWrapper.java
  class XADataSourceWrapper (line 51) | public class XADataSourceWrapper implements DataSource, XADataSource {
    method XADataSourceWrapper (line 63) | public XADataSourceWrapper(XADataSource wrapped) {
    method getWrapped (line 71) | public XADataSource getWrapped() {
    method unwrap (line 75) | @Override
    method isWrapperFor (line 84) | @Override
    method getConnection (line 89) | @Override
    method getConnection (line 94) | @Override
    method getParentLogger (line 99) | @Override
    method getLogWriter (line 104) | @Override
    method setLogWriter (line 109) | @Override
    method setLoginTimeout (line 114) | @Override
    method getLoginTimeout (line 119) | @Override
    method createShardingKeyBuilder (line 124) | @Override
    method getXAConnection (line 129) | @Override
    method getXAConnection (line 134) | @Override

FILE: extension/declared/src/main/java/cloud/piranha/extension/declared/DeclaredExtension.java
  class DeclaredExtension (line 39) | public class DeclaredExtension implements WebApplicationExtension {
    method DeclaredExtension (line 44) | public DeclaredExtension() {
    method configure (line 52) | @Override

FILE: extension/declared/src/main/java/cloud/piranha/extension/declared/internal/InternalDeclaredInitializer.java
  class InternalDeclaredInitializer (line 43) | public class InternalDeclaredInitializer implements ServletContainerInit...
    method onStartup (line 45) | @Override

FILE: extension/declared/src/test/java/cloud/piranha/extension/declared/DeclaredExtensionTest.java
  class DeclaredExtensionTest (line 40) | public class DeclaredExtensionTest {
    method testConfigure (line 45) | @Test

FILE: extension/declared/src/test/java/cloud/piranha/extension/handlestypes/internal/InternalDeclaredInitializerTest.java
  class InternalDeclaredInitializerTest (line 41) | public class InternalDeclaredInitializerTest {
    method testOnStartup (line 46) | @Test

FILE: extension/eclipselink/src/main/java/cloud/piranha/extension/eclipselink/EclipseLinkCdiExtension.java
  class EclipseLinkCdiExtension (line 46) | public class EclipseLinkCdiExtension implements Extension {
    method EclipseLinkCdiExtension (line 51) | public EclipseLinkCdiExtension() {
    method register (line 60) | public void register(@Observes BeforeBeanDiscovery beforeBean, BeanMan...
    method processAnnotatedType (line 74) | public <T> void processAnnotatedType(@Observes ProcessAnnotatedType<T>...
    method shouldInjectionAnnotationBeAdded (line 84) | private static <X> boolean shouldInjectionAnnotationBeAdded(AnnotatedM...
    method addAnnotatedTypes (line 88) | private static void addAnnotatedTypes(BeforeBeanDiscovery beforeBean, ...

FILE: extension/eclipselink/src/main/java/cloud/piranha/extension/eclipselink/EclipseLinkExtension.java
  class EclipseLinkExtension (line 43) | public class EclipseLinkExtension implements WebApplicationExtension {
    method EclipseLinkExtension (line 53) | public EclipseLinkExtension() {
    method configure (line 61) | @Override

FILE: extension/eclipselink/src/main/java/cloud/piranha/extension/eclipselink/EclipseLinkInitializer.java
  class EclipseLinkInitializer (line 47) | public class EclipseLinkInitializer implements ServletContainerInitializ...
    method EclipseLinkInitializer (line 57) | public EclipseLinkInitializer() {
    method onStartup (line 67) | @Override
    method isCDIEnabled (line 85) | private boolean isCDIEnabled() {

FILE: extension/eclipselink/src/main/java/cloud/piranha/extension/eclipselink/EntityManagerFactoryCreator.java
  class EntityManagerFactoryCreator (line 65) | @ApplicationScoped
    method EntityManagerFactoryCreator (line 81) | public EntityManagerFactoryCreator() {
    method getAnnotationManager (line 89) | public AnnotationManager getAnnotationManager() {
    method setAnnotationManager (line 98) | public void setAnnotationManager(AnnotationManager annotationManager) {
    method get (line 107) | public EntityManagerFactory get(String unitName) {
    method create (line 111) | @SuppressWarnings("removal")
    method getDefaultPersistenceUnit (line 184) | private SEPersistenceUnitInfo getDefaultPersistenceUnit(JPAInitializer...
    method getPersistenceUnitNames (line 196) | private Set<String> getPersistenceUnitNames(JPAInitializer persistence...
    method lookupAsDataSource (line 215) | private DataSource lookupAsDataSource(String name) throws NamingExcept...
    method getDefaultDataSource (line 229) | private DataSource getDefaultDataSource() {

FILE: extension/eclipselink/src/main/java/cloud/piranha/extension/eclipselink/EntityManagerProducer.java
  class EntityManagerProducer (line 49) | public class EntityManagerProducer {
    method EntityManagerProducer (line 54) | public EntityManagerProducer() {
    method produce (line 62) | @Produces
    method propertiesToMap (line 79) | private Map<Object, Object> propertiesToMap(PersistenceProperty[] prop...

FILE: extension/eclipselink/src/main/java/cloud/piranha/extension/eclipselink/NonTxEntityManagerHolder.java
  class NonTxEntityManagerHolder (line 46) | @RequestScoped
    method NonTxEntityManagerHolder (line 59) | public NonTxEntityManagerHolder() {
    method computeIfAbsent (line 68) | public EntityManager computeIfAbsent(Supplier<EntityManager> entityMan...

FILE: extension/eclipselink/src/main/java/cloud/piranha/extension/eclipselink/PiranhaEntityManager.java
  class PiranhaEntityManager (line 64) | public class PiranhaEntityManager extends EntityManagerWrapper implement...
    method PiranhaEntityManager (line 111) | public PiranhaEntityManager(String unitName, PersistenceContextType co...
    method getWrapped (line 118) | @Override
    method persist (line 155) | @Override
    method merge (line 162) | @Override
    method remove (line 169) | @Override
    method flush (line 176) | @Override
    method refresh (line 183) | @Override
    method refresh (
Condensed preview — 1176 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,717K chars).
[
  {
    "path": ".github/FUNDING.yml",
    "chars": 15,
    "preview": "github: mnriem\n"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 357,
    "preview": "version: 2\nupdates:\n  # Enable version updates for Maven\n  - package-ecosystem: \"maven\"\n    directory: \"/\"\n    schedule:"
  },
  {
    "path": ".github/workflows/current.yml",
    "chars": 5085,
    "preview": "name: current\non: \n  push:\n    branches:\n      - 'current'\n    tags-ignore:\n      - 'v*'\n  workflow_dispatch:\njobs:\n  bu"
  },
  {
    "path": ".github/workflows/docs.yml",
    "chars": 1254,
    "preview": "name: docs\non: \n  workflow_dispatch:\n    inputs:\n      version:\n        description: 'Release version'\n        required:"
  },
  {
    "path": ".github/workflows/experimental.yml",
    "chars": 1159,
    "preview": "name: experimental\non: \n  schedule:\n    - cron: \"0 0 * * 0\"\n  workflow_dispatch:\njobs:\n  build:\n    if: github.repositor"
  },
  {
    "path": ".github/workflows/pr.yml",
    "chars": 1603,
    "preview": "name: pr\non: \n  pull_request:\n    branches:\n      - '*'\njobs:\n  build:\n    runs-on: ${{ matrix.os }}\n    strategy:\n     "
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 3293,
    "preview": "name: release\non:\n  push:\n    tags:        \n      - v*\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n    - name: "
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 655,
    "preview": "name: stale\non:\n  schedule:\n  - cron: \"0 0 * * *\"\n  workflow_dispatch:\njobs:\n  stale:\n    if: github.repository == 'pira"
  },
  {
    "path": ".github/workflows/tck-coreprofile.yml",
    "chars": 6529,
    "preview": "name: tck-coreprofile\non: \n  schedule:\n  - cron: \"0 0 * * *\"\n  workflow_dispatch:\n    inputs:\n      branch:\n        desc"
  },
  {
    "path": ".github/workflows/trigger.yml",
    "chars": 1194,
    "preview": "name: trigger\non: \n  workflow_dispatch:\n    inputs:\n      branch:\n        description: 'Branch to release from'\n        "
  },
  {
    "path": ".gitignore",
    "chars": 239,
    "preview": ".classpath\n.factorypath\n.DS_Store\n.project\n.settings/\n.vscode\ndependency-reduced-pom.xml\nnb-configuration.xml\nnbactions."
  },
  {
    "path": "CODE_CONVENTIONS.md",
    "chars": 3342,
    "preview": "Eclipse/Sun code conventions with\n* Spaces only\n* Indentation size 4 spaces\n* Maximum line width 160\n* Maximum width for"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1827,
    "preview": "# Contributing\n\nHow can I contribute to Piranha? Well it all depends on the level of \ninvolvement you are aiming for. Th"
  },
  {
    "path": "LICENSE",
    "chars": 1596,
    "preview": "\n   Copyright (c) 2002-2021 Manorrock.com. All Rights Reserved.\n\n   Redistribution and use in source and binary forms, w"
  },
  {
    "path": "README.md",
    "chars": 1001,
    "preview": "![#piranhacloud](piranha_cloud.svg)\n\n# Piranha Project\n\n![build status](https://github.com/piranhacloud/piranha/workflow"
  },
  {
    "path": "RELEASE.md",
    "chars": 1758,
    "preview": "# Release process\n\nThe release process described below uses the 'current' branch. For patch \nreleases see the [Patch rel"
  },
  {
    "path": "SECURITY.md",
    "chars": 146,
    "preview": "# Security Policy\n\n## Reporting a Vulnerability\n\nPlease email info@piranha.cloud describing the issue\n(preferably with a"
  },
  {
    "path": "arquillian/managed/pom.xml",
    "chars": 4588,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<project\n    xmlns=\"http://maven.apache.org/POM/4.0.0\" \n    xmlns:xsi=\"http://ww"
  },
  {
    "path": "arquillian/managed/src/main/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainer.java",
    "chars": 18097,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "arquillian/managed/src/main/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainerConfiguration.java",
    "chars": 9046,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "arquillian/managed/src/main/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainerExtension.java",
    "chars": 2265,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "arquillian/managed/src/main/java/module-info.java",
    "chars": 2203,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "arquillian/managed/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension",
    "chars": 66,
    "preview": "cloud.piranha.arquillian.managed.ManagedPiranhaContainerExtension\n"
  },
  {
    "path": "arquillian/managed/src/test/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainerConfigurationTest.java",
    "chars": 5856,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "arquillian/managed/src/test/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainerExtensionTest.java",
    "chars": 3086,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "arquillian/managed/src/test/java/cloud/piranha/arquillian/managed/ManagedPiranhaContainerTest.java",
    "chars": 1371,
    "preview": "package cloud.piranha.arquillian.managed;\n\nimport java.io.File;\nimport org.jboss.arquillian.container.spi.client.contain"
  },
  {
    "path": "arquillian/managed/src/test/webapp/test/WEB-INF/web.xml",
    "chars": 307,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<web-app xmlns=\"https://jakarta.ee/xml/ns/jakartaee\"\n         xmlns:xsi=\"http://w"
  },
  {
    "path": "arquillian/pom.xml",
    "chars": 2730,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/"
  },
  {
    "path": "arquillian/server/pom.xml",
    "chars": 5442,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "arquillian/server/src/main/java/cloud/piranha/arquillian/server/PiranhaServerDeployableContainer.java",
    "chars": 4371,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "arquillian/server/src/main/java/cloud/piranha/arquillian/server/PiranhaServerLoadableExtension.java",
    "chars": 8345,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "arquillian/server/src/main/java/module-info.java",
    "chars": 2130,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "arquillian/server/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension",
    "chars": 62,
    "preview": "cloud.piranha.arquillian.server.PiranhaServerLoadableExtension"
  },
  {
    "path": "bom/pom.xml",
    "chars": 11425,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<project\n    xmlns=\"http://maven.apache.org/POM/4.0.0\"\n    xmlns:xsi=\"http://www"
  },
  {
    "path": "core/api/pom.xml",
    "chars": 1238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/AnnotationInfo.java",
    "chars": 2303,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/AnnotationManager.java",
    "chars": 4418,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/AsyncDispatcher.java",
    "chars": 1807,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/AsyncManager.java",
    "chars": 2299,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/AttributeManager.java",
    "chars": 2619,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/AuthenticatedIdentity.java",
    "chars": 2774,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/CurrentRequestHolder.java",
    "chars": 2575,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/DispatcherManager.java",
    "chars": 2152,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/ErrorPageManager.java",
    "chars": 2401,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/FilterEnvironment.java",
    "chars": 3054,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/FilterMapping.java",
    "chars": 2333,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/FilterPriority.java",
    "chars": 2161,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/HandlesTypesManager.java",
    "chars": 3894,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/HttpHeader.java",
    "chars": 2104,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/HttpHeaderManager.java",
    "chars": 3356,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/HttpSessionManager.java",
    "chars": 5378,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/JspManager.java",
    "chars": 2477,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/LocaleEncodingManager.java",
    "chars": 2169,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/ModuleLayerProcessor.java",
    "chars": 1932,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/MultiPartManager.java",
    "chars": 2676,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/ObjectInstanceManager.java",
    "chars": 2775,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/Piranha.java",
    "chars": 1870,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/PiranhaBuilder.java",
    "chars": 1913,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/PiranhaConfiguration.java",
    "chars": 3753,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/SecurityConstraint.java",
    "chars": 3773,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/SecurityManager.java",
    "chars": 12295,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/SecurityRoleReference.java",
    "chars": 2645,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/SecurityWebResourceCollection.java",
    "chars": 3548,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/ServletEnvironment.java",
    "chars": 3452,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/ServletInvocation.java",
    "chars": 4716,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/ServletRequestManager.java",
    "chars": 3110,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/WebApplication.java",
    "chars": 11510,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/WebApplicationClassLoader.java",
    "chars": 1871,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/WebApplicationExtension.java",
    "chars": 2360,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/WebApplicationExtensionContext.java",
    "chars": 3017,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/WebApplicationInputStream.java",
    "chars": 7656,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/WebApplicationManager.java",
    "chars": 6542,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/WebApplicationOutputStream.java",
    "chars": 3392,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/WebApplicationPrintWriter.java",
    "chars": 2295,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/WebApplicationRequest.java",
    "chars": 4654,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/WebApplicationRequestMapper.java",
    "chars": 6265,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/WebApplicationRequestMapping.java",
    "chars": 2186,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/WebApplicationResponse.java",
    "chars": 4079,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/WebApplicationServer.java",
    "chars": 2862,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/WebApplicationServerRequestMapper.java",
    "chars": 2284,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/cloud/piranha/core/api/WelcomeFileManager.java",
    "chars": 2021,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/main/java/module-info.java",
    "chars": 1904,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/api/src/test/java/cloud/piranha/core/api/AttributeManagerTest.java",
    "chars": 4135,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/pom.xml",
    "chars": 3959,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/AsyncHttpDispatchWrapper.java",
    "chars": 9965,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/AsyncNonHttpDispatchWrapper.java",
    "chars": 2253,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/CookieParser.java",
    "chars": 4791,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultAnnotationManager.java",
    "chars": 4817,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultAsyncContext.java",
    "chars": 11731,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultAsyncDispatcher.java",
    "chars": 4321,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultAsyncManager.java",
    "chars": 2382,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultAttributeManager.java",
    "chars": 2866,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultAuthenticatedIdentity.java",
    "chars": 4637,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultCurrentRequestHolder.java",
    "chars": 2463,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultDispatcherManager.java",
    "chars": 2696,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultErrorPageManager.java",
    "chars": 3487,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultFilterChain.java",
    "chars": 6347,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultFilterEnvironment.java",
    "chars": 8465,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultFilterMapping.java",
    "chars": 3762,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultHttpHeader.java",
    "chars": 2876,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultHttpHeaderManager.java",
    "chars": 5396,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultHttpServletMapping.java",
    "chars": 3435,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultHttpSession.java",
    "chars": 6880,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultHttpSessionManager.java",
    "chars": 18973,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultInvocationFinder.java",
    "chars": 18013,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultJspConfigDescriptor.java",
    "chars": 2476,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultJspManager.java",
    "chars": 2537,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultLocaleEncodingManager.java",
    "chars": 2861,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultModuleFinder.java",
    "chars": 12743,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultModuleLayerProcessor.java",
    "chars": 6182,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultModuleReader.java",
    "chars": 3286,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultModuleReference.java",
    "chars": 2644,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultMultiPartManager.java",
    "chars": 2563,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultNamedRequestDispatcher.java",
    "chars": 5901,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultObjectInstanceManager.java",
    "chars": 4106,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultPiranha.java",
    "chars": 2210,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultPiranhaBuilder.java",
    "chars": 2800,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultPiranhaConfiguration.java",
    "chars": 3601,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultPushBuilder.java",
    "chars": 4441,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultSecurityManager.java",
    "chars": 4347,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultServlet.java",
    "chars": 4925,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultServletConnection.java",
    "chars": 2438,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultServletEnvironment.java",
    "chars": 8343,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultServletInvocation.java",
    "chars": 7109,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultServletRequestDispatcher.java",
    "chars": 36998,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultServletRequestManager.java",
    "chars": 5755,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultTaglibDescriptor.java",
    "chars": 2669,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplication.java",
    "chars": 50996,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationBuilder.java",
    "chars": 11115,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationClassLoader.java",
    "chars": 3391,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationExtensionContext.java",
    "chars": 4408,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationInputStream.java",
    "chars": 2553,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationManager.java",
    "chars": 7983,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationOutputStream.java",
    "chars": 16927,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationPrintWriter.java",
    "chars": 3285,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationRequest.java",
    "chars": 42342,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationRequestBuilder.java",
    "chars": 3484,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationRequestMapper.java",
    "chars": 13676,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationRequestMapping.java",
    "chars": 3735,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationResponse.java",
    "chars": 21918,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebApplicationResponseBuilder.java",
    "chars": 3749,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/DefaultWebConnection.java",
    "chars": 2959,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/cloud/piranha/core/impl/WarFileExtractor.java",
    "chars": 4029,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/main/java/module-info.java",
    "chars": 1939,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/AsyncContextTest.java",
    "chars": 12463,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/CookieParserTest.java",
    "chars": 4551,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultAnnotationManagerTest.java",
    "chars": 6148,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultErrorPageManagerTest.java",
    "chars": 5487,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultFilterEnvironmentTest.java",
    "chars": 9469,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultHttpHeaderManagerTest.java",
    "chars": 5730,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultPiranhaConfigurationTest.java",
    "chars": 4158,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultPushBuilderTest.java",
    "chars": 5207,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultSecurityManagerTest.java",
    "chars": 2231,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultServletEnvironmentTest.java",
    "chars": 3405,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationBuilderTest.java",
    "chars": 7262,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationClassLoaderTest.java",
    "chars": 2671,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationExtensionContextTest.java",
    "chars": 4729,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationManagerTest.java",
    "chars": 6814,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationOutputStreamTest.java",
    "chars": 3540,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationRequestMapperTest.java",
    "chars": 16293,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationRequestMappingTest.java",
    "chars": 3463,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationRequestTest.java",
    "chars": 42286,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationResponseTest.java",
    "chars": 47836,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebApplicationTest.java",
    "chars": 72471,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/DefaultWebConnectionTest.java",
    "chars": 3198,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/FilterTest.java",
    "chars": 6763,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/HttpSessionTest.java",
    "chars": 52204,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/ReadListenerTest.java",
    "chars": 6367,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/RequestDispatcherTest.java",
    "chars": 40682,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/ServletContextAttributeListenerTest.java",
    "chars": 7754,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/ServletInputStreamTest.java",
    "chars": 5208,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/ServletRegistrationTest.java",
    "chars": 8062,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/ServletRequestAttributeListenerTest.java",
    "chars": 7407,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/ServletTest.java",
    "chars": 3909,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/TestChat1Servlet.java",
    "chars": 7743,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/TestChat2Servlet.java",
    "chars": 7760,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/TestEcho1Servlet.java",
    "chars": 2544,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/TestEcho2Servlet.java",
    "chars": 2567,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/TestHttpServerRequest.java",
    "chars": 7146,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/TestHttpServerResponse.java",
    "chars": 2891,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/TestIOExceptionServlet.java",
    "chars": 2510,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/TestInclude2Servlet.java",
    "chars": 2880,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/TestInclude3Servlet.java",
    "chars": 2959,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/TestInclude4Servlet.java",
    "chars": 3074,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/TestIncludeServlet.java",
    "chars": 2927,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/TestRuntimeExceptionServlet.java",
    "chars": 2540,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/TestSnoopServlet.java",
    "chars": 10476,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/TestWebApplicationRequest.java",
    "chars": 1801,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/TestWebApplicationResponse.java",
    "chars": 2229,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/java/cloud/piranha/core/impl/WriteListenerTest.java",
    "chars": 4267,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  },
  {
    "path": "core/impl/src/test/webapp/resourcepaths/catalog/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "core/impl/src/test/webapp/resourcepaths/catalog/offers/books.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "core/impl/src/test/webapp/resourcepaths/catalog/offers/music.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "core/impl/src/test/webapp/resourcepaths/catalog/products.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "core/impl/src/test/webapp/resourcepaths/customer/login.jsp",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "core/impl/src/test/webapp/resourcepaths/welcome.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "core/pom.xml",
    "chars": 1835,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/"
  },
  {
    "path": "debug/modules.sh",
    "chars": 220,
    "preview": "mvn --also-make dependency:tree | grep \"cloud.piranha\" | grep -v \"cloud.piranha.test\"  | sed -E 's|.*(cloud)|cloud|' | s"
  },
  {
    "path": "debug/pom.xml",
    "chars": 29658,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/"
  },
  {
    "path": "debug/src/main/java/cloud/piranha/debug/Debug.java",
    "chars": 1868,
    "preview": "/*\n * Copyright (c) 2002-2025 Manorrock.com. All Rights Reserved.\n *\n * Redistribution and use in source and binary form"
  }
]

// ... and 976 more files (download for full content)

About this extraction

This page contains the full source code of the piranhacloud/piranha GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1176 files (4.3 MB), approximately 1.2M tokens, and a symbol index with 5074 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!