• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

aspectran / aspectran / #3980

13 Jan 2025 02:44AM CUT coverage: 35.015% (-0.01%) from 35.029%
#3980

push

github

topframe
Update

4 of 5 new or added lines in 2 files covered. (80.0%)

6 existing lines in 4 files now uncovered.

14190 of 40525 relevant lines covered (35.02%)

0.35 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

94.74
/with-undertow/src/main/java/com/aspectran/undertow/server/handler/ServletRequestHandlerFactory.java
1
/*
2
 * Copyright (c) 2008-2025 The Aspectran Project
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *     http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
package com.aspectran.undertow.server.handler;
17

18
import com.aspectran.core.service.CoreService;
19
import com.aspectran.undertow.server.handler.logging.LoggingGroupAssistHandlerWrapper;
20
import com.aspectran.undertow.server.handler.resource.TowResourceHandler;
21
import com.aspectran.undertow.server.handler.session.SessionAttachmentHandler;
22
import com.aspectran.undertow.server.servlet.TowServletContext;
23
import com.aspectran.utils.Assert;
24
import com.aspectran.utils.annotation.jsr305.NonNull;
25
import com.aspectran.web.service.DefaultWebService;
26
import com.aspectran.web.service.DefaultWebServiceBuilder;
27
import com.aspectran.web.service.WebServiceClassLoader;
28
import io.undertow.server.HttpHandler;
29
import io.undertow.server.handlers.PathHandler;
30
import io.undertow.server.handlers.resource.ResourceManager;
31
import io.undertow.server.session.SessionConfig;
32
import io.undertow.server.session.SessionManager;
33
import io.undertow.servlet.api.DeploymentInfo;
34
import io.undertow.servlet.api.DeploymentManager;
35
import io.undertow.servlet.api.ServletContainer;
36
import io.undertow.servlet.core.ServletContainerImpl;
37
import jakarta.servlet.ServletContext;
38

39
/**
40
 * <p>Created: 2019-08-04</p>
41
 */
42
public class ServletRequestHandlerFactory extends AbstractRequestHandlerFactory implements RequestHandlerFactory {
1✔
43

44
    private TowServletContext[] towServletContexts;
45

46
    private ServletContainer servletContainer;
47

48
    public void setServletContexts(TowServletContext... servletContexts) {
49
        Assert.notNull(servletContexts, "servletContexts must not be null");
1✔
50
        this.towServletContexts = servletContexts;
1✔
51
    }
1✔
52

53
    public HttpHandler createHandler() throws Exception {
54
        createServletContainer();
1✔
55

56
        PathHandler pathHandler = new PathHandler();
1✔
57
        for (String deploymentName : servletContainer.listDeployments()) {
1✔
58
            DeploymentManager manager = servletContainer.getDeployment(deploymentName);
1✔
59
            HttpHandler handler = manager.start();
1✔
60

61
            SessionManager sessionManager = manager.getDeployment().getSessionManager();
1✔
62
            if (sessionManager != null) {
1✔
63
                SessionConfig sessionConfig = manager.getDeployment().getServletContext().getSessionConfig();
1✔
64
                handler = new SessionAttachmentHandler(handler, sessionManager, sessionConfig);
1✔
65
            }
66

67
            DeploymentInfo info = manager.getDeployment().getDeploymentInfo();
1✔
68
            String contextPath = info.getContextPath();
1✔
69
            ResourceManager resourceManager = info.getResourceManager();
1✔
70

71
            if (resourceManager != null) {
1✔
72
                TowResourceHandler resourceHandler = new TowResourceHandler(resourceManager, handler);
1✔
73
                String pathPrefix = contextPath;
1✔
74
                if (pathPrefix != null && pathPrefix.endsWith("/")) {
1✔
75
                    pathPrefix = pathPrefix.substring(0, pathPrefix.length() - 1);
1✔
76
                }
77
                resourceHandler.autoDetect(pathPrefix);
1✔
78
                if (resourceHandler.hasPatterns()) {
1✔
79
                    handler = resourceHandler;
1✔
80
                }
81
            }
82

83
            pathHandler.addPrefixPath(contextPath, handler);
1✔
84
        }
1✔
85

86
        return wrapHandler(pathHandler);
1✔
87
    }
88

89
    @Override
90
    public ServletContainer getServletContainer() {
91
        Assert.notNull(servletContainer, "servletContainer not yet created");
1✔
92
        return servletContainer;
1✔
93
    }
94

95
    @Override
96
    public void dispose() throws Exception {
97
        for (String deploymentName : getServletContainer().listDeployments()) {
1✔
98
            DeploymentManager manager = getServletContainer().getDeployment(deploymentName);
1✔
99
            if (manager != null) {
1✔
100
                manager.stop();
1✔
101
                manager.undeploy();
1✔
102
            }
103
        }
1✔
104
    }
1✔
105

106
    @NonNull
107
    private void createServletContainer() throws Exception {
108
        servletContainer = new ServletContainerImpl();
1✔
109
        if (towServletContexts == null) {
1✔
NEW
110
            towServletContexts = getActivityContext().getBeanRegistry().getBeansOfType(TowServletContext.class);
×
111
        }
112
        if (towServletContexts != null) {
1✔
113
            for (TowServletContext towServletContext : towServletContexts) {
1✔
114
                ClassLoader webServiceClassLoader = new WebServiceClassLoader(getActivityContext().getClassLoader());
1✔
115
                towServletContext.setClassLoader(webServiceClassLoader);
1✔
116

117
                if (hasLoggingGroupHandlerWrapper()) {
1✔
118
                    towServletContext.addOuterHandlerChainWrapper(new LoggingGroupAssistHandlerWrapper());
×
119
                }
120

121
                DeploymentManager manager = servletContainer.addDeployment(towServletContext);
1✔
122
                manager.deploy();
1✔
123

124
                ServletContext servletContext = manager.getDeployment().getServletContext();
1✔
125
                DefaultWebService rootWebService = createRootWebService(servletContext);
1✔
126
                if (towServletContext.getSessionManager() == null) {
1✔
127
                    rootWebService.setSessionAdaptable(false);
×
128
                }
129
            }
130
        }
131
    }
1✔
132

133
    @NonNull
134
    private DefaultWebService createRootWebService(ServletContext servletContext) throws Exception {
135
        CoreService masterService = getActivityContext().getMasterService();
1✔
136
        DefaultWebService rootWebService = DefaultWebServiceBuilder.build(servletContext, masterService);
1✔
137
        if (rootWebService.isOrphan()) {
1✔
138
            rootWebService.getServiceLifeCycle().start();
1✔
139
        }
140
        return rootWebService;
1✔
141
    }
142

143
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc