This is an automated email from the ASF dual-hosted git repository.
cziegeler pushed a commit to branch jakarta-servlet-6
in repository https://gitbox.apache.org/repos/asf/felix-dev.git
The following commit(s) were added to refs/heads/jakarta-servlet-6 by this push:
new 7fc415e838 No need to fork webconsoleplugin
7fc415e838 is described below
commit 7fc415e83839b89ee287e0f12caf64ee118dadd4
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Fri Aug 18 06:42:34 2023 +0200
No need to fork webconsoleplugin
---
http/webconsoleplugin/pom.xml | 79 --
.../http/webconsoleplugin/impl/Activator.java | 94 ---
.../webconsoleplugin/impl/HttpServicePlugin.java | 839 ---------------------
3 files changed, 1012 deletions(-)
diff --git a/http/webconsoleplugin/pom.xml b/http/webconsoleplugin/pom.xml
deleted file mode 100644
index 5b7bc3e7ec..0000000000
--- a/http/webconsoleplugin/pom.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<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
http://maven.apache.org/maven-v4_0_0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.http.parent</artifactId>
- <version>16-SNAPSHOT</version>
- <relativePath>../parent/pom.xml</relativePath>
- </parent>
-
- <name>Apache Felix Http Webconsole Plugin</name>
- <artifactId>org.apache.felix.http.webconsoleplugin</artifactId>
- <version>3.0.0-SNAPSHOT</version>
- <packaging>bundle</packaging>
-
- <scm>
-
<connection>scm:git:https://github.com/apache/felix-dev.git</connection>
-
<developerConnection>scm:git:https://github.com/apache/felix-dev.git</developerConnection>
- <url>https://gitbox.apache.org/repos/asf?p=felix-dev.git</url>
- <tag>HEAD</tag>
- </scm>
-
- <properties>
- <felix.java.version>17</felix.java.version>
- </properties>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- </plugin>
- </plugins>
- </build>
-
- <dependencies>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>osgi.core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.annotation.bundle</artifactId>
- <version>1.1.1</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.service.servlet</artifactId>
- <version>3.0.0-SNAPSHOT</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>jakarta.servlet</groupId>
- <artifactId>jakarta.servlet-api</artifactId>
- <version>6.0.0</version>
- <scope>provided</scope>
- </dependency>
- </dependencies>
-</project>
diff --git
a/http/webconsoleplugin/src/main/java/org/apache/felix/http/webconsoleplugin/impl/Activator.java
b/http/webconsoleplugin/src/main/java/org/apache/felix/http/webconsoleplugin/impl/Activator.java
deleted file mode 100644
index 605dcf5e04..0000000000
---
a/http/webconsoleplugin/src/main/java/org/apache/felix/http/webconsoleplugin/impl/Activator.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.felix.http.webconsoleplugin.impl;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import jakarta.servlet.Servlet;
-
-import org.osgi.annotation.bundle.Header;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.servlet.runtime.HttpServiceRuntime;
-import org.osgi.service.servlet.whiteboard.annotations.RequireHttpWhiteboard;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-@Header(name = Constants.BUNDLE_ACTIVATOR, value = "${@class}")
-@RequireHttpWhiteboard
-public class Activator implements BundleActivator {
-
- private volatile ServiceTracker<HttpServiceRuntime, HttpServiceRuntime>
tracker;
-
- private volatile ServiceRegistration<Servlet> serviceReg;
-
- private void register(final BundleContext context, final
HttpServiceRuntime runtime) {
- final HttpServicePlugin plugin = new HttpServicePlugin(context,
runtime);
- final Dictionary<String, Object> props = new Hashtable<>();
- props.put("felix.webconsole.label", "httpservice");
- props.put("felix.webconsole.title", "HTTP Service");
- this.serviceReg = context.registerService(Servlet.class, plugin,
props);
- }
-
- @Override
- public void start(final BundleContext context) throws Exception {
- final ServiceTracker<HttpServiceRuntime, HttpServiceRuntime> tracker =
new ServiceTracker<>(context, HttpServiceRuntime.class, new
ServiceTrackerCustomizer<HttpServiceRuntime,HttpServiceRuntime>() {
-
- @Override
- public HttpServiceRuntime addingService(final
ServiceReference<HttpServiceRuntime> reference) {
- final HttpServiceRuntime runtime =
context.getService(reference);
- if ( runtime != null ) {
- register(context, runtime);
- }
- return runtime;
- }
-
- @Override
- public void modifiedService(final
ServiceReference<HttpServiceRuntime> reference, final HttpServiceRuntime
service) {
- // ignore
- }
-
- @Override
- public void removedService(final
ServiceReference<HttpServiceRuntime> reference, final HttpServiceRuntime
service) {
- if ( serviceReg != null ) {
- try {
- serviceReg.unregister();
- } catch ( final IllegalStateException ignore) {
- // ignore
- }
- serviceReg = null;
- }
- }
-
- });
- tracker.open();
- }
-
- @Override
- public void stop(final BundleContext context) throws Exception {
- if ( tracker != null ) {
- tracker.close();
- tracker = null;
- }
- }
-}
diff --git
a/http/webconsoleplugin/src/main/java/org/apache/felix/http/webconsoleplugin/impl/HttpServicePlugin.java
b/http/webconsoleplugin/src/main/java/org/apache/felix/http/webconsoleplugin/impl/HttpServicePlugin.java
deleted file mode 100644
index 325b1a2f1e..0000000000
---
a/http/webconsoleplugin/src/main/java/org/apache/felix/http/webconsoleplugin/impl/HttpServicePlugin.java
+++ /dev/null
@@ -1,839 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.felix.http.webconsoleplugin.impl;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.dto.ServiceReferenceDTO;
-import org.osgi.service.servlet.runtime.HttpServiceRuntime;
-import org.osgi.service.servlet.runtime.dto.DTOConstants;
-import org.osgi.service.servlet.runtime.dto.ErrorPageDTO;
-import org.osgi.service.servlet.runtime.dto.FailedErrorPageDTO;
-import org.osgi.service.servlet.runtime.dto.FailedFilterDTO;
-import org.osgi.service.servlet.runtime.dto.FailedListenerDTO;
-import org.osgi.service.servlet.runtime.dto.FailedResourceDTO;
-import org.osgi.service.servlet.runtime.dto.FailedServletContextDTO;
-import org.osgi.service.servlet.runtime.dto.FailedServletDTO;
-import org.osgi.service.servlet.runtime.dto.FilterDTO;
-import org.osgi.service.servlet.runtime.dto.ListenerDTO;
-import org.osgi.service.servlet.runtime.dto.RequestInfoDTO;
-import org.osgi.service.servlet.runtime.dto.ResourceDTO;
-import org.osgi.service.servlet.runtime.dto.RuntimeDTO;
-import org.osgi.service.servlet.runtime.dto.ServletContextDTO;
-import org.osgi.service.servlet.runtime.dto.ServletDTO;
-
-/**
- * This is a web console plugin.
- */
-public class HttpServicePlugin extends HttpServlet {
- private static final String ATTR_TEST = "test";
- private static final String ATTR_MSG = "msg";
- private static final String ATTR_SUBMIT = "resolve";
-
- private final BundleContext context;
-
- private final HttpServiceRuntime runtime;
-
- public HttpServicePlugin(final BundleContext context, final
HttpServiceRuntime runtime) {
- this.context = context;
- this.runtime = runtime;
- }
-
- /** Escape xml text */
- private static String escapeXml(final String input) {
- if (input == null) {
- return null;
- }
-
- final StringBuilder b = new StringBuilder(input.length());
- for(int i = 0;i < input.length(); i++) {
- final char c = input.charAt(i);
- if(c == '&') {
- b.append("&");
- } else if(c == '<') {
- b.append("<");
- } else if(c == '>') {
- b.append(">");
- } else if(c == '"') {
- b.append(""");
- } else if(c == '\'') {
- b.append("'");
- } else {
- b.append(c);
- }
- }
- return b.toString();
- }
-
- @Override
- protected void doPost(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException
{
-
- final String test = request.getParameter(ATTR_TEST);
- String msg = null;
- if (test != null && test.length() > 0) {
-
- final RequestInfoDTO dto =
this.runtime.calculateRequestInfoDTO(test);
-
- final StringBuilder sb = new StringBuilder();
- if ( dto.servletDTO != null ) {
- sb.append("Servlet: ");
- sb.append(getValueAsString(dto.servletDTO.patterns));
- sb.append(" (");
- sb.append("service.id=");
- sb.append(String.valueOf(dto.servletDTO.serviceId));
- sb.append("), Filters: [");
- boolean first = true;
- for(final FilterDTO f : dto.filterDTOs) {
- if ( first ) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(f.serviceId);
- }
- sb.append("]");
- } else if ( dto.resourceDTO != null ) {
- sb.append("Resource: ");
- sb.append(getValueAsString(dto.resourceDTO.patterns));
- sb.append(" (");
- sb.append("service.id=");
- sb.append(String.valueOf(dto.resourceDTO.serviceId));
- sb.append("), Filters: [");
- boolean first = true;
- for(final FilterDTO f : dto.filterDTOs) {
- if ( first ) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(f.serviceId);
- }
- sb.append("]");
- } else {
- sb.append("<404>");
- }
- msg = sb.toString();
- }
-
- // finally redirect
- final String path = request.getContextPath() + request.getServletPath()
- + request.getPathInfo();
- final String redirectTo;
- if (msg == null) {
- redirectTo = path;
- } else {
- redirectTo = path + '?' + ATTR_MSG + '=' + encodeParam(msg) + '&'
- + ATTR_TEST + '=' + encodeParam(test);
- }
- response.sendRedirect(redirectTo);
- }
-
- private String encodeParam(final String value) {
- try {
- return URLEncoder.encode(value, "UTF-8");
- } catch (UnsupportedEncodingException e) {
- // should never happen
- return value;
- }
- }
-
- @Override
- protected void doGet(final HttpServletRequest req, final
HttpServletResponse resp) throws IOException {
- final RuntimeDTO dto = this.runtime.getRuntimeDTO();
-
- final PrintWriter pw = resp.getWriter();
-
- String path = req.getContextPath() + req.getServletPath();
- if ( req.getPathInfo() != null ) {
- path = path + req.getPathInfo();
- }
- printForm(pw, req.getParameter(ATTR_TEST), req.getParameter(ATTR_MSG),
path);
-
- printRuntimeDetails(pw, dto.serviceDTO);
-
- for(final ServletContextDTO ctxDto : dto.servletContextDTOs ) {
- printContextDetails(pw, ctxDto);
- }
- for(final FailedServletContextDTO ctxDto :
dto.failedServletContextDTOs ) {
- printFailedContextDetails(pw, ctxDto);
- }
- printFailedServletDetails(pw, dto);
- printFailedFilterDetails(pw, dto);
- printFailedResourceDetails(pw, dto);
- printFailedErrorPageDetails(pw, dto);
- printFailedListenerDetails(pw, dto);
-
- pw.println("<br/>");
- }
-
- private void printForm(final PrintWriter pw, final String value, final
String msg, final String path) {
- pw.println("<table class='content' cellpadding='0' cellspacing='0'
width='100%'>");
-
- separatorHtml(pw);
-
- titleHtml(
- pw,
- "Test Servlet Resolution",
- "To test the servlet resolution, enter a relative URL into "
- + "the field and click 'Resolve'.");
-
- pw.println("<tr class='content'>");
- pw.println("<td class='content'>Test</td>");
- pw.print("<td class='content' colspan='2'>");
- pw.print("<form method='POST' action='");
- pw.print(path);
- pw.print("'>");
- pw.print("<input type='text' name='" + ATTR_TEST + "' value='");
- if (value != null) {
- pw.print(escapeXml(value));
- }
- pw.println("' class='input' size='50'>");
- pw.println(" <input type='submit' name='" + ATTR_SUBMIT
- + "' value='Resolve' class='submit'>");
- pw.print("</form>");
- pw.print("</td>");
- pw.println("</tr>");
-
- if (msg != null) {
- pw.println("<tr class='content'>");
- pw.println("<td class='content'> </td>");
- pw.print("<td class='content' colspan='2'>");
- pw.print(escapeXml(msg));
- pw.println("</td>");
- pw.println("</tr>");
- }
- pw.println("</table>");
- }
-
- private void titleHtml(PrintWriter pw, String title, String description) {
- pw.println("<tr class='content'>");
- pw.println("<th colspan='3'class='content container'>" + title
- + "</th>");
- pw.println("</tr>");
-
- if (description != null) {
- pw.println("<tr class='content'>");
- pw.println("<td colspan='3'class='content'>" + description
- + "</th>");
- pw.println("</tr>");
- }
- }
-
- private void separatorHtml(PrintWriter pw) {
- pw.println("<tr class='content'>");
- pw.println("<td class='content' colspan='3'> </td>");
- pw.println("</tr>");
- }
-
- private String getValueAsString(final Object value) {
- if ( value.getClass().isArray() ) {
- if (value instanceof long[]) {
- return Arrays.toString((long[])value);
- } else if (value instanceof int[]) {
- return Arrays.toString((int[])value);
- } else if (value instanceof double[]) {
- return Arrays.toString((double[])value);
- } else if (value instanceof byte[]) {
- return Arrays.toString((byte[])value);
- } else if (value instanceof float[]) {
- return Arrays.toString((float[])value);
- } else if (value instanceof short[]) {
- return Arrays.toString((short[])value);
- } else if (value instanceof boolean[]) {
- return Arrays.toString((boolean[])value);
- } else if (value instanceof char[]) {
- return Arrays.toString((char[])value);
- } else {
- return Arrays.toString((Object[])value);
- }
- }
- return value.toString();
- }
-
- private void printRuntimeDetails(final PrintWriter pw, final
ServiceReferenceDTO dto) {
- pw.println("<p class=\"statline ui-state-highlight\">${Runtime
Properties}</p>");
- pw.println("<table class=\"nicetable\">");
- pw.println("<thead><tr>");
- pw.println("<th class=\"header\">${Name}</th>");
- pw.println("<th class=\"header\">${Value}</th>");
- pw.println("</tr></thead>");
- boolean odd = true;
- for(final Map.Entry<String, Object> prop : dto.properties.entrySet()) {
- odd = printRow(pw, odd, prop.getKey(),
getValueAsString(prop.getValue()));
- }
- pw.println("</table>");
- pw.println("<br/>");
- }
-
- private boolean printRow(final PrintWriter pw, final boolean odd, final
String...columns) {
- pw.print("<tr class=\"");
- if ( odd ) pw.print("odd"); else pw.print("even");
- pw.println(" ui-state-default\">");
-
- for(final String val : columns) {
- pw.print("<td>");
- if ( val != null ) {
- String text = escapeXml(val).replace("\n", "<br/>");
- int pos;
- while ( (pos = text.indexOf("${#link:")) != -1) {
- final int endPos = text.indexOf("}", pos);
- final int bundleId = Integer.valueOf(text.substring(pos +
8, endPos));
- final int tokenEndPos = text.indexOf("${link#}", pos);
-
- text = text.substring(0, pos) + "<a
href=\"${appRoot}/bundles/" + String.valueOf(bundleId) + "\">" +
- text.substring(endPos + 1, tokenEndPos) + "</a>" +
text.substring(tokenEndPos + 8);
- }
- pw.print(text);
- }
- pw.println("</td>");
- }
-
- pw.println("</tr>");
- return !odd;
- }
-
- private String getContextPath(final String path) {
- if ( path.length() == 0 ) {
- return "<root>";
- }
- return path;
- }
-
- private boolean printServiceRankingRow(final PrintWriter pw, final long
serviceId, final boolean odd) {
- int ranking = 0;
- final ServiceReference<?> ref = this.getServiceReference(serviceId);
- if ( ref != null ) {
- final Object obj = ref.getProperty(Constants.SERVICE_RANKING);
- if ( obj instanceof Integer)
- {
- ranking = (Integer)obj;
- }
- }
- return printRow(pw, odd, "${ranking}", String.valueOf(ranking));
- }
-
- private void printContextDetails(final PrintWriter pw, final
ServletContextDTO dto) {
- pw.print("<p class=\"statline ui-state-highlight\">${Servlet Context}
'");
- pw.print(escapeXml(dto.name));
- pw.println("'</p>");
-
- pw.println("<table class=\"nicetable\">");
-
- boolean odd = true;
- pw.println("<thead><tr>");
- pw.println("<th class=\"header\">${Name}</th>");
- pw.println("<th class=\"header\">${Value)}</th>");
- pw.println("</tr></thead>");
- odd = printRow(pw, odd, "${Path}", getContextPath(dto.contextPath));
- odd = printRow(pw, odd, "${service.id}",
String.valueOf(dto.serviceId));
- odd = printServiceRankingRow(pw, dto.serviceId, odd);
- pw.println("</table>");
-
- printServletDetails(pw, dto);
- printFilterDetails(pw, dto);
- printResourceDetails(pw, dto);
- printErrorPageDetails(pw, dto);
- printListenerDetails(pw, dto);
-
- pw.println("<br/>");
- }
-
- private void printFailedContextDetails(final PrintWriter pw, final
FailedServletContextDTO dto) {
- pw.print("<p class=\"statline ui-state-highlight\">${Servlet Context}
'");
- pw.print(escapeXml(dto.name));
- pw.println("'</p>");
-
- pw.println("<table class=\"nicetable\">");
-
- boolean odd = true;
- pw.println("<thead><tr>");
- pw.println("<th class=\"header\">${Name}</th>");
- pw.println("<th class=\"header\">${Value)}</th>");
- pw.println("</tr></thead>");
- odd = printRow(pw, odd, "${Path}",
- dto.contextPath == null ? dto.contextPath :
getContextPath(dto.contextPath));
- odd = printRow(pw, odd, "${reason}",
escapeXml(getErrorText(dto.failureReason)));
- odd = printRow(pw, odd, "${service.id}",
String.valueOf(dto.serviceId));
- pw.println("</table>");
- }
-
- private void appendServiceRanking(final StringBuilder sb, final
ServiceReference<?> ref) {
- int ranking = 0;
- if ( ref != null ) {
- final Object obj = ref.getProperty(Constants.SERVICE_RANKING);
- if ( obj instanceof Integer) {
- ranking = (Integer)obj;
- }
- }
- sb.append("${ranking} :
").append(String.valueOf(ranking)).append("\n");
- }
-
- private void printFilterDetails(final PrintWriter pw, final
ServletContextDTO dto) {
- if ( dto.filterDTOs.length == 0 ) {
- return;
- }
- pw.print("<p class=\"statline ui-state-highlight\">${Servlet Context}
'");
- pw.print(escapeXml(dto.name));
- pw.println("' ${Registered Filter Services}</p>");
-
- pw.println("<table class=\"nicetable\">");
- pw.println("<thead><tr>");
- pw.println("<th class=\"header\">${Pattern}</th>");
- pw.println("<th class=\"header\">${Filter}</th>");
- pw.println("<th class=\"header\">${Info}</th>");
- pw.println("</tr></thead>");
-
- boolean odd = true;
- for (final FilterDTO filter : dto.filterDTOs) {
- final ServiceReference<?> ref =
this.getServiceReference(filter.serviceId);
- final StringBuilder sb = new StringBuilder();
- sb.append("${service.id} :
").append(String.valueOf(filter.serviceId)).append("\n");
- appendServiceRanking(sb, ref);
- sb.append("${async} :
").append(String.valueOf(filter.asyncSupported)).append("\n");
- sb.append("${dispatcher} :
").append(getValueAsString(filter.dispatcher)).append("\n");
- if ( ref != null ) {
- sb.append("${bundle} : ");
- sb.append("${#link:");
- sb.append(ref.getBundle().getBundleId());
- sb.append("}");
- sb.append(ref.getBundle().getSymbolicName());
- sb.append("${link#}\n");
- }
-
- final List<String> patterns = new ArrayList<>();
- patterns.addAll(Arrays.asList(filter.patterns));
- patterns.addAll(Arrays.asList(filter.regexs));
- for(final String name : filter.servletNames) {
- patterns.add("Servlet : " + name);
- }
- Collections.sort(patterns);
- final StringBuilder psb = new StringBuilder();
- for(final String p : patterns) {
- psb.append(p).append('\n');
- }
- odd = printRow(pw, odd, psb.toString(), filter.name,
sb.toString());
- }
- pw.println("</table>");
- }
-
- private String getErrorText(final int reason) {
- switch ( reason ) {
- case DTOConstants.FAILURE_REASON_EXCEPTION_ON_INIT : return "Exception
on init";
- case DTOConstants.FAILURE_REASON_NO_SERVLET_CONTEXT_MATCHING : return
"No match";
- case DTOConstants.FAILURE_REASON_SERVICE_IN_USE : return "In use";
- case DTOConstants.FAILURE_REASON_SERVICE_NOT_GETTABLE : return "Not
gettable";
- case DTOConstants.FAILURE_REASON_SERVLET_CONTEXT_FAILURE : return
"Context failure";
- case DTOConstants.FAILURE_REASON_SHADOWED_BY_OTHER_SERVICE : return
"Shadowed";
- case DTOConstants.FAILURE_REASON_VALIDATION_FAILED : return "Invalid";
- default: return "unknown";
- }
- }
- private void printFailedFilterDetails(final PrintWriter pw, final
RuntimeDTO dto) {
- if ( dto.failedFilterDTOs.length == 0 ) {
- return;
- }
- pw.print("<p class=\"statline ui-state-highlight\">${Failed Filter
Services}</p>");
-
- pw.println("<table class=\"nicetable\">");
- pw.println("<thead><tr>");
- pw.println("<th class=\"header\">${Pattern}</th>");
- pw.println("<th class=\"header\">${Filter}</th>");
- pw.println("<th class=\"header\">${Info}</th>");
- pw.println("</tr></thead>");
-
- boolean odd = true;
- for (final FailedFilterDTO filter : dto.failedFilterDTOs) {
- final StringBuilder sb = new StringBuilder();
- sb.append("${reason} :
").append(getErrorText(filter.failureReason)).append("\n");
- final ServiceReference<?> ref =
this.getServiceReference(filter.serviceId);
- sb.append("${service.id} :
").append(String.valueOf(filter.serviceId)).append("\n");
- appendServiceRanking(sb, ref);
- sb.append("${async} :
").append(String.valueOf(filter.asyncSupported)).append("\n");
- sb.append("${dispatcher} :
").append(getValueAsString(filter.dispatcher)).append("\n");
- if ( ref != null ) {
- sb.append("${bundle} : ");
- sb.append("${#link:");
- sb.append(ref.getBundle().getBundleId());
- sb.append("}");
- sb.append(ref.getBundle().getSymbolicName());
- sb.append("${link#}\n");
- }
-
- final List<String> patterns = new ArrayList<>();
- patterns.addAll(Arrays.asList(filter.patterns));
- patterns.addAll(Arrays.asList(filter.regexs));
- for(final String name : filter.servletNames) {
- patterns.add("Servlet : " + name);
- }
- Collections.sort(patterns);
- final StringBuilder psb = new StringBuilder();
- for(final String p : patterns) {
- psb.append(p).append('\n');
- }
- odd = printRow(pw, odd, psb.toString(), filter.name,
sb.toString());
- }
- pw.println("</table>");
- }
-
- private ServiceReference<?> getServiceReference(final long serviceId) {
- if ( serviceId > 0 ) {
- try {
- final ServiceReference<?>[] ref =
this.context.getServiceReferences((String)null, "(" + Constants.SERVICE_ID +
"=" + String.valueOf(serviceId) + ")");
- if ( ref != null && ref.length > 0 ) {
- return ref[0];
- }
- } catch (final InvalidSyntaxException e) {
- // ignore
- }
- }
- return null;
- }
-
- private void printServletDetails(final PrintWriter pw, final
ServletContextDTO dto) {
- if ( dto.servletDTOs.length == 0 ) {
- return;
- }
- pw.print("<p class=\"statline ui-state-highlight\">${Servlet Context}
'");
- pw.print(escapeXml(dto.name));
- pw.println("' ${Registered Servlet Services}</p>");
-
- pw.println("<table class=\"nicetable\">");
- pw.println("<thead><tr>");
- pw.println("<th class=\"header\">${Path}</th>");
- pw.println("<th class=\"header\">${Name}</th>");
- pw.println("<th class=\"header\">${Info}</th>");
- pw.println("</tr></thead>");
-
- boolean odd = true;
- for (final ServletDTO servlet : dto.servletDTOs) {
- final StringBuilder sb = new StringBuilder();
- final ServiceReference<?> ref =
this.getServiceReference(servlet.serviceId);
- sb.append("${service.id} :
").append(String.valueOf(servlet.serviceId)).append("\n");
- appendServiceRanking(sb, ref);
- sb.append("${async} :
").append(String.valueOf(servlet.asyncSupported)).append("\n");
- if ( ref != null ) {
- sb.append("${bundle} : ");
- sb.append("${#link:");
- sb.append(ref.getBundle().getBundleId());
- sb.append("}");
- sb.append(ref.getBundle().getSymbolicName());
- sb.append("${link#}\n");
- }
-
- final StringBuilder psb = new StringBuilder();
- for(final String p : servlet.patterns) {
- psb.append(p).append('\n');
- }
- odd = printRow(pw, odd, psb.toString(), servlet.name,
sb.toString());
- }
- pw.println("</table>");
- }
-
- private void printFailedServletDetails(final PrintWriter pw, final
RuntimeDTO dto) {
- if ( dto.failedServletDTOs.length == 0 ) {
- return;
- }
- pw.print("<p class=\"statline ui-state-highlight\">${Failed Servlet
Services}</p>");
-
- pw.println("<table class=\"nicetable\">");
- pw.println("<thead><tr>");
- pw.println("<th class=\"header\">${Path}</th>");
- pw.println("<th class=\"header\">${Name}</th>");
- pw.println("<th class=\"header\">${Info}</th>");
- pw.println("</tr></thead>");
-
- boolean odd = true;
- for (final FailedServletDTO servlet : dto.failedServletDTOs) {
- final StringBuilder sb = new StringBuilder();
- sb.append("${reason} :
").append(getErrorText(servlet.failureReason)).append("\n");
- final ServiceReference<?> ref =
this.getServiceReference(servlet.serviceId);
- sb.append("${service.id} :
").append(String.valueOf(servlet.serviceId)).append("\n");
- appendServiceRanking(sb, ref);
- sb.append("${async} :
").append(String.valueOf(servlet.asyncSupported)).append("\n");
- if ( ref != null ) {
- sb.append("${bundle} : ");
- sb.append("${#link:");
- sb.append(ref.getBundle().getBundleId());
- sb.append("}");
- sb.append(ref.getBundle().getSymbolicName());
- sb.append("${link#}\n");
- }
-
- final StringBuilder psb = new StringBuilder();
- for(final String p : servlet.patterns) {
- psb.append(p).append('\n');
- }
- odd = printRow(pw, odd, psb.toString(), servlet.name,
sb.toString());
- }
- pw.println("</table>");
- }
-
- private void printResourceDetails(final PrintWriter pw, final
ServletContextDTO dto) {
- if ( dto.resourceDTOs.length == 0 ) {
- return;
- }
- pw.print("<p class=\"statline ui-state-highlight\">${Servlet Context}
'");
- pw.print(escapeXml(dto.name));
- pw.println("' ${Registered Resource Services}</p>");
-
- pw.println("<table class=\"nicetable\">");
- pw.println("<thead><tr>");
- pw.println("<th class=\"header\">${Path}</th>");
- pw.println("<th class=\"header\">${Prefix}</th>");
- pw.println("<th class=\"header\">${Info}</th>");
- pw.println("</tr></thead>");
-
- boolean odd = true;
- for (final ResourceDTO rsrc : dto.resourceDTOs) {
- final StringBuilder sb = new StringBuilder();
- final ServiceReference<?> ref =
this.getServiceReference(rsrc.serviceId);
- sb.append("${service.id} :
").append(String.valueOf(rsrc.serviceId)).append("\n");
- appendServiceRanking(sb, ref);
- if ( ref != null ) {
- sb.append("${bundle} : ");
- sb.append("${#link:");
- sb.append(ref.getBundle().getBundleId());
- sb.append("}");
- sb.append(ref.getBundle().getSymbolicName());
- sb.append("${link#}\n");
- }
-
- final StringBuilder psb = new StringBuilder();
- for(final String p : rsrc.patterns) {
- psb.append(p).append('\n');
- }
- odd = printRow(pw, odd, psb.toString(), rsrc.prefix,
sb.toString());
- }
- pw.println("</table>");
- }
-
- private void printFailedResourceDetails(final PrintWriter pw, final
RuntimeDTO dto) {
- if ( dto.failedResourceDTOs.length == 0 ) {
- return;
- }
- pw.print("<p class=\"statline ui-state-highlight\">${Failed Resource
Services}</p>");
-
- pw.println("<table class=\"nicetable\">");
- pw.println("<thead><tr>");
- pw.println("<th class=\"header\">${Path}</th>");
- pw.println("<th class=\"header\">${Prefix}</th>");
- pw.println("<th class=\"header\">${Info}</th>");
- pw.println("</tr></thead>");
-
- boolean odd = true;
- for (final FailedResourceDTO rsrc : dto.failedResourceDTOs) {
- final StringBuilder sb = new StringBuilder();
- sb.append("${reason} :
").append(getErrorText(rsrc.failureReason)).append("\n");
- final ServiceReference<?> ref =
this.getServiceReference(rsrc.serviceId);
- sb.append("${service.id} :
").append(String.valueOf(rsrc.serviceId)).append("\n");
- appendServiceRanking(sb, ref);
- if ( ref != null ) {
- sb.append("${bundle} : ");
- sb.append("${#link:");
- sb.append(ref.getBundle().getBundleId());
- sb.append("}");
- sb.append(ref.getBundle().getSymbolicName());
- sb.append("${link#}\n");
- }
-
- final StringBuilder psb = new StringBuilder();
- for(final String p : rsrc.patterns) {
- psb.append(p).append('\n');
- }
- odd = printRow(pw, odd, psb.toString(), rsrc.prefix,
sb.toString());
- }
- pw.println("</table>");
- }
-
- private void printErrorPageDetails(final PrintWriter pw, final
ServletContextDTO dto) {
- if ( dto.errorPageDTOs.length == 0 ) {
- return;
- }
- pw.print("<p class=\"statline ui-state-highlight\">${Servlet Context}
'");
- pw.print(escapeXml(dto.name));
- pw.println("' ${Registered Error Pages}</p>");
-
- pw.println("<table class=\"nicetable\">");
- pw.println("<thead><tr>");
- pw.println("<th class=\"header\">${Path}</th>");
- pw.println("<th class=\"header\">${Name}</th>");
- pw.println("<th class=\"header\">${Info}</th>");
- pw.println("</tr></thead>");
-
- boolean odd = true;
- for (final ErrorPageDTO ep : dto.errorPageDTOs) {
- final StringBuilder sb = new StringBuilder();
- final ServiceReference<?> ref =
this.getServiceReference(ep.serviceId);
- sb.append("${service.id} :
").append(String.valueOf(ep.serviceId)).append("\n");
- appendServiceRanking(sb, ref);
- sb.append("${async} :
").append(String.valueOf(ep.asyncSupported)).append("\n");
- if ( ref != null ) {
- sb.append("${bundle} : ");
- sb.append("${#link:");
- sb.append(ref.getBundle().getBundleId());
- sb.append("}");
- sb.append(ref.getBundle().getSymbolicName());
- sb.append("${link#}\n");
- }
-
- final StringBuilder psb = new StringBuilder();
- for(final long p : ep.errorCodes) {
- psb.append(p).append('\n');
- }
- for(final String p : ep.exceptions) {
- psb.append(p).append('\n');
- }
- odd = printRow(pw, odd, psb.toString(), ep.name, sb.toString());
- }
- pw.println("</table>");
- }
-
- private void printFailedErrorPageDetails(final PrintWriter pw, final
RuntimeDTO dto) {
- if ( dto.failedErrorPageDTOs.length == 0 ) {
- return;
- }
- pw.print("<p class=\"statline ui-state-highlight\">${Registered Error
Pages}</p>");
-
- pw.println("<table class=\"nicetable\">");
- pw.println("<thead><tr>");
- pw.println("<th class=\"header\">${Path}</th>");
- pw.println("<th class=\"header\">${Name}</th>");
- pw.println("<th class=\"header\">${Info}</th>");
- pw.println("</tr></thead>");
-
- boolean odd = true;
- for (final FailedErrorPageDTO ep : dto.failedErrorPageDTOs) {
- final StringBuilder sb = new StringBuilder();
- sb.append("${reason} :
").append(getErrorText(ep.failureReason)).append("\n");
- final ServiceReference<?> ref =
this.getServiceReference(ep.serviceId);
- sb.append("${service.id} :
").append(String.valueOf(ep.serviceId)).append("\n");
- appendServiceRanking(sb, ref);
- sb.append("${async} :
").append(String.valueOf(ep.asyncSupported)).append("\n");
- if ( ref != null ) {
- sb.append("${bundle} : ");
- sb.append("${#link:");
- sb.append(ref.getBundle().getBundleId());
- sb.append("}");
- sb.append(ref.getBundle().getSymbolicName());
- sb.append("${link#}\n");
- }
-
- final StringBuilder psb = new StringBuilder();
- for(final long p : ep.errorCodes) {
- psb.append(p).append('\n');
- }
- for(final String p : ep.exceptions) {
- psb.append(p).append('\n');
- }
- odd = printRow(pw, odd, psb.toString(), ep.name, sb.toString());
- }
- pw.println("</table>");
- }
-
- private void printListenerDetails(final PrintWriter pw, final
ServletContextDTO dto) {
- if ( dto.listenerDTOs.length == 0 ) {
- return;
- }
- pw.print("<p class=\"statline ui-state-highlight\">${Servlet Context}
'");
- pw.print(escapeXml(dto.name));
- pw.println("' ${Registered Listeners}</p>");
-
- pw.println("<table class=\"nicetable\">");
- pw.println("<thead><tr>");
- pw.println("<th class=\"header\">${Type}</th>");
- pw.println("<th class=\"header\">${Info}</th>");
- pw.println("</tr></thead>");
-
- boolean odd = true;
- for (final ListenerDTO ep : dto.listenerDTOs) {
- final StringBuilder sb = new StringBuilder();
- final ServiceReference<?> ref =
this.getServiceReference(ep.serviceId);
- sb.append("${service.id} :
").append(String.valueOf(ep.serviceId)).append("\n");
- appendServiceRanking(sb, ref);
- if ( ref != null ) {
- sb.append("${bundle} : ");
- sb.append("${#link:");
- sb.append(ref.getBundle().getBundleId());
- sb.append("}");
- sb.append(ref.getBundle().getSymbolicName());
- sb.append("${link#}\n");
- }
- final StringBuilder tsb = new StringBuilder();
- for(final String t : ep.types) {
- tsb.append(t).append('\n');
- }
- odd = printRow(pw, odd, tsb.toString(), sb.toString());
- }
- pw.println("</table>");
- }
-
- private void printFailedListenerDetails(final PrintWriter pw, final
RuntimeDTO dto) {
- if ( dto.failedListenerDTOs.length == 0 ) {
- return;
- }
- pw.print("<p class=\"statline ui-state-highlight\">${Failed
Listeners}</p>");
-
- pw.println("<table class=\"nicetable\">");
- pw.println("<thead><tr>");
- pw.println("<th class=\"header\">${Type}</th>");
- pw.println("<th class=\"header\">${Info}</th>");
- pw.println("</tr></thead>");
-
- boolean odd = true;
- for (final FailedListenerDTO ep : dto.failedListenerDTOs) {
- final StringBuilder sb = new StringBuilder();
- sb.append("${reason} :
").append(getErrorText(ep.failureReason)).append("\n");
- final ServiceReference<?> ref =
this.getServiceReference(ep.serviceId);
- sb.append("${service.id} :
").append(String.valueOf(ep.serviceId)).append("\n");
- appendServiceRanking(sb, ref);
- if ( ref != null ) {
- sb.append("${bundle} : ");
- sb.append("${#link:");
- sb.append(ref.getBundle().getBundleId());
- sb.append("}");
- sb.append(ref.getBundle().getSymbolicName());
- sb.append("${link#}\n");
- }
- final StringBuilder tsb = new StringBuilder();
- for(final String t : ep.types) {
- tsb.append(t).append('\n');
- }
- odd = printRow(pw, odd, tsb.toString(), sb.toString());
- }
- pw.println("</table>");
- }
-}