You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2022/11/18 06:17:58 UTC
[felix-dev] branch master updated: FELIX-6583 : Move webconsole support into separate bundle
This is an automated email from the ASF dual-hosted git repository.
cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/felix-dev.git
The following commit(s) were added to refs/heads/master by this push:
new e801edf077 FELIX-6583 : Move webconsole support into separate bundle
e801edf077 is described below
commit e801edf0773b360546e1ff50adc9ab83beda05ba
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Fri Nov 18 07:17:51 2022 +0100
FELIX-6583 : Move webconsole support into separate bundle
---
.../internal/whiteboard/WhiteboardManager.java | 7 -
http/inventoryprinter/pom.xml | 81 +++
.../http/inventoryprinter/impl/Activator.java | 95 +++
.../impl/HttpInventoryPrinter.java | 595 +++++++++++++++++
http/pom.xml | 4 +-
http/webconsoleplugin/pom.xml | 75 +++
.../http/webconsoleplugin/impl/Activator.java | 94 +++
.../webconsoleplugin/impl}/HttpServicePlugin.java | 721 +++------------------
8 files changed, 1050 insertions(+), 622 deletions(-)
diff --git a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java
index 038cb2d37f..5b2ddad1b9 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java
+++ b/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/WhiteboardManager.java
@@ -33,7 +33,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import org.apache.felix.http.base.internal.console.HttpServicePlugin;
import org.apache.felix.http.base.internal.context.ExtServletContext;
import org.apache.felix.http.base.internal.handler.FilterHandler;
import org.apache.felix.http.base.internal.handler.HttpServiceServletHandler;
@@ -111,8 +110,6 @@ public final class WhiteboardManager
private final List<ServiceTracker<?, ?>> trackers = new ArrayList<>();
- private final HttpServicePlugin plugin;
-
/** A map containing all servlet context registrations. Mapped by context name */
private final Map<String, List<WhiteboardContextHandler>> contextMap = new HashMap<>();
@@ -146,7 +143,6 @@ public final class WhiteboardManager
this.httpServiceFactory = httpServiceFactory;
this.registry = registry;
this.serviceRuntime = new HttpServiceRuntimeImpl(registry, this, bundleContext);
- this.plugin = new HttpServicePlugin(bundleContext, this.serviceRuntime);
}
/**
@@ -241,8 +237,6 @@ public final class WhiteboardManager
addTracker(new JavaxServletTracker(httpBundleContext, this));
addTracker(new JavaxListenersTracker(httpBundleContext, this));
addTracker(new JavaxPreprocessorTracker(httpBundleContext, this));
-
- this.plugin.register();
}
/**
@@ -260,7 +254,6 @@ public final class WhiteboardManager
*/
public void stop()
{
- this.plugin.unregister();
for(final ServiceTracker<?, ?> t : this.trackers)
{
t.close();
diff --git a/http/inventoryprinter/pom.xml b/http/inventoryprinter/pom.xml
new file mode 100644
index 0000000000..d77967e4d1
--- /dev/null
+++ b/http/inventoryprinter/pom.xml
@@ -0,0 +1,81 @@
+<!--
+ 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>13</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <name>Apache Felix Http Inventory Printer</name>
+ <artifactId>org.apache.felix.http.inventoryprinter</artifactId>
+ <version>1.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>
+ </scm>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>5.1.4</version>
+ <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>2.0.0-RC1</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.inventory</artifactId>
+ <version>1.1.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>jakarta.json</groupId>
+ <artifactId>jakarta.json-api</artifactId>
+ <version>2.0.2</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/http/inventoryprinter/src/main/java/org/apache/felix/http/inventoryprinter/impl/Activator.java b/http/inventoryprinter/src/main/java/org/apache/felix/http/inventoryprinter/impl/Activator.java
new file mode 100644
index 0000000000..0c2ab42d3f
--- /dev/null
+++ b/http/inventoryprinter/src/main/java/org/apache/felix/http/inventoryprinter/impl/Activator.java
@@ -0,0 +1,95 @@
+/*
+ * 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.inventoryprinter.impl;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.apache.felix.inventory.Format;
+import org.apache.felix.inventory.InventoryPrinter;
+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<InventoryPrinter> serviceReg;
+
+ private void register(final BundleContext context, final HttpServiceRuntime runtime) {
+ final HttpInventoryPrinter plugin = new HttpInventoryPrinter(context, runtime);
+ final Dictionary<String, Object> props = new Hashtable<>();
+ props.put(InventoryPrinter.NAME, "httpservice");
+ props.put(InventoryPrinter.TITLE, "HTTP Service");
+ props.put(InventoryPrinter.FORMAT, new String[] {Format.JSON.toString(), Format.TEXT.toString()});
+ this.serviceReg = context.registerService(InventoryPrinter.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/inventoryprinter/src/main/java/org/apache/felix/http/inventoryprinter/impl/HttpInventoryPrinter.java b/http/inventoryprinter/src/main/java/org/apache/felix/http/inventoryprinter/impl/HttpInventoryPrinter.java
new file mode 100644
index 0000000000..a17a500a0d
--- /dev/null
+++ b/http/inventoryprinter/src/main/java/org/apache/felix/http/inventoryprinter/impl/HttpInventoryPrinter.java
@@ -0,0 +1,595 @@
+/*
+ * 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.inventoryprinter.impl;
+
+import java.io.PrintWriter;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.felix.inventory.Format;
+import org.apache.felix.inventory.InventoryPrinter;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+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.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;
+
+import jakarta.json.Json;
+import jakarta.json.stream.JsonGenerator;
+
+/**
+ * This is a web console plugin.
+ */
+public class HttpInventoryPrinter implements InventoryPrinter {
+
+ private final BundleContext context;
+
+ private final HttpServiceRuntime runtime;
+
+ public HttpInventoryPrinter(final BundleContext context, final HttpServiceRuntime runtime) {
+ this.context = context;
+ this.runtime = runtime;
+ }
+
+ @Override
+ public void print(final PrintWriter printWriter, final Format format, final boolean isZip) {
+ if ( format == Format.TEXT ) {
+ this.printConfiguration(printWriter);
+ } else if ( format == Format.JSON ) {
+ this.printConfigurationJSON(printWriter);
+ }
+ }
+
+ 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 String getContextPath(final String path) {
+ if ( path.length() == 0 ) {
+ return "<root>";
+ }
+ return path;
+ }
+
+ 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 (".concat(String.valueOf(reason)).concat(")");
+ }
+ }
+
+ 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 printServiceIdAndRanking(final PrintWriter pw, final ServiceReference<?> ref, final long serviceId) {
+ pw.print("Service ID : ");
+ pw.println(String.valueOf(serviceId));
+ int ranking = 0;
+ if ( ref != null ) {
+ final Object obj = ref.getProperty(Constants.SERVICE_RANKING);
+ if ( obj instanceof Integer) {
+ ranking = (Integer)obj;
+ }
+ }
+ pw.print("Ranking : ");
+ pw.println(String.valueOf(ranking));
+ if ( ref != null ) {
+ pw.print("Bundle : ");
+ pw.print(ref.getBundle().getSymbolicName());
+ pw.print(" <");
+ pw.print(String.valueOf(ref.getBundle().getBundleId()));
+ pw.println(">");
+ }
+ }
+
+ private void printConfiguration(final PrintWriter pw) {
+ final RuntimeDTO dto = this.runtime.getRuntimeDTO();
+
+ pw.println("HTTP Service Details");
+ pw.println("====================");
+ pw.println();
+ pw.println("Runtime Properties");
+ pw.println("------------------");
+
+ for(final Map.Entry<String, Object> prop : dto.serviceDTO.properties.entrySet()) {
+ pw.print(prop.getKey());
+ pw.print(" : ");
+ pw.println(getValueAsString(prop.getValue()));
+ }
+ pw.println();
+ for(final ServletContextDTO ctxDto : dto.servletContextDTOs ) {
+ pw.print("Servlet Context ");
+ pw.println(ctxDto.name);
+ pw.println("-----------------------------------------------");
+
+ pw.print("Path : ");
+ pw.println(getContextPath(ctxDto.contextPath));
+ printServiceIdAndRanking(pw, this.getServiceReference(ctxDto.serviceId), ctxDto.serviceId);
+ pw.println();
+ if ( ctxDto.servletDTOs.length > 0 ) {
+ pw.println("Servlets");
+ for (final ServletDTO servlet : ctxDto.servletDTOs) {
+ pw.print("Patterns : ");
+ pw.println(getValueAsString(servlet.patterns));
+ pw.print("Name : ");
+ pw.println(servlet.name);
+ pw.print("async : ");
+ pw.println(String.valueOf(servlet.asyncSupported));
+ printServiceIdAndRanking(pw, this.getServiceReference(servlet.serviceId), servlet.serviceId);
+ pw.println();
+ }
+ pw.println();
+ }
+
+ if ( ctxDto.filterDTOs.length > 0 ) {
+ pw.println("Filters");
+ for (final FilterDTO filter : ctxDto.filterDTOs) {
+ 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);
+
+ pw.print("Patterns : ");
+ pw.println(patterns);
+ pw.print("Name : ");
+ pw.println(filter.name);
+ pw.print("async : ");
+ pw.println(String.valueOf(filter.asyncSupported));
+ pw.print("dispatcher : ");
+ pw.println(getValueAsString(filter.dispatcher));
+ printServiceIdAndRanking(pw, this.getServiceReference(filter.serviceId), filter.serviceId);
+ pw.println();
+ }
+ pw.println();
+ }
+ if ( ctxDto.resourceDTOs.length > 0 ) {
+ pw.println("Resources");
+ for (final ResourceDTO rsrc : ctxDto.resourceDTOs) {
+ pw.print("Patterns : ");
+ pw.println(getValueAsString(rsrc.patterns));
+ pw.print("Prefix : ");
+ pw.println(rsrc.prefix);
+ printServiceIdAndRanking(pw, this.getServiceReference(rsrc.serviceId), rsrc.serviceId);
+ pw.println();
+ }
+ pw.println();
+
+ }
+ if ( ctxDto.errorPageDTOs.length > 0 ) {
+ pw.println("Error Pages");
+ for (final ErrorPageDTO ep : ctxDto.errorPageDTOs) {
+ final List<String> patterns = new ArrayList<>();
+ for(final long p : ep.errorCodes) {
+ patterns.add(String.valueOf(p));
+ }
+ for(final String p : ep.exceptions) {
+ patterns.add(p);
+ }
+ pw.print("Patterns : ");
+ pw.println(patterns);
+ pw.print("Name : ");
+ pw.println(ep.name);
+ pw.print("async : ");
+ pw.println(String.valueOf(ep.asyncSupported));
+ printServiceIdAndRanking(pw, this.getServiceReference(ep.serviceId), ep.serviceId);
+ pw.println();
+ }
+ pw.println();
+ }
+
+ if ( ctxDto.listenerDTOs.length > 0 ) {
+ pw.println("Listeners");
+ for (final ListenerDTO ep : ctxDto.listenerDTOs) {
+ pw.print("Types : ");
+ pw.println(getValueAsString(ep.types));
+ printServiceIdAndRanking(pw, this.getServiceReference(ep.serviceId), ep.serviceId);
+ pw.println();
+ }
+ pw.println();
+ }
+ pw.println();
+ }
+
+ if ( dto.failedServletContextDTOs.length > 0 ) {
+ for(final FailedServletContextDTO ctxDto : dto.failedServletContextDTOs ) {
+ pw.print("Failed Servlet Context ");
+ pw.println(ctxDto.name);
+ pw.println("-----------------------------------------------");
+
+ pw.print("Reason : ");
+ pw.println(getErrorText(ctxDto.failureReason));
+ pw.print("Path : ");
+ pw.println(getContextPath(ctxDto.contextPath));
+ printServiceIdAndRanking(pw, this.getServiceReference(ctxDto.serviceId), ctxDto.serviceId);
+ pw.println();
+ }
+ }
+ if ( dto.failedServletDTOs.length > 0 ) {
+ pw.println("Failed Servlets");
+ for (final FailedServletDTO servlet : dto.failedServletDTOs) {
+ pw.print("Patterns : ");
+ pw.println(getValueAsString(servlet.patterns));
+ pw.print("Reason : ");
+ pw.println(getErrorText(servlet.failureReason));
+ pw.print("Name : ");
+ pw.println(servlet.name);
+ pw.print("async : ");
+ pw.println(String.valueOf(servlet.asyncSupported));
+ printServiceIdAndRanking(pw, this.getServiceReference(servlet.serviceId), servlet.serviceId);
+ pw.println();
+ }
+ pw.println();
+ }
+
+ if ( dto.failedFilterDTOs.length > 0 ) {
+ pw.println("Failed Filters");
+ for (final FailedFilterDTO filter : dto.failedFilterDTOs) {
+ 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);
+
+ pw.print("Patterns : ");
+ pw.println(patterns);
+ pw.print("Reason : ");
+ pw.println(getErrorText(filter.failureReason));
+ pw.print("Name : ");
+ pw.println(filter.name);
+ pw.print("async : ");
+ pw.println(String.valueOf(filter.asyncSupported));
+ pw.print("dispatcher : ");
+ pw.println(getValueAsString(filter.dispatcher));
+ printServiceIdAndRanking(pw, this.getServiceReference(filter.serviceId), filter.serviceId);
+ pw.println();
+ }
+ pw.println();
+ }
+ if ( dto.failedResourceDTOs.length > 0 ) {
+ pw.println("Failed Resources");
+ for (final FailedResourceDTO rsrc : dto.failedResourceDTOs) {
+ pw.print("Patterns : ");
+ pw.println(getValueAsString(rsrc.patterns));
+ pw.print("Reason : ");
+ pw.println(getErrorText(rsrc.failureReason));
+ pw.print("Prefix : ");
+ pw.println(rsrc.prefix);
+ printServiceIdAndRanking(pw, this.getServiceReference(rsrc.serviceId), rsrc.serviceId);
+ pw.println();
+ }
+ pw.println();
+
+ }
+ if ( dto.failedErrorPageDTOs.length > 0 ) {
+ pw.println("Failed Error Pages");
+ for (final FailedErrorPageDTO ep : dto.failedErrorPageDTOs) {
+ final List<String> patterns = new ArrayList<>();
+ for(final long p : ep.errorCodes) {
+ patterns.add(String.valueOf(p));
+ }
+ for(final String p : ep.exceptions) {
+ patterns.add(p);
+ }
+ pw.print("Patterns : ");
+ pw.println(patterns);
+ pw.print("Reason : ");
+ pw.println(getErrorText(ep.failureReason));
+ pw.print("Name : ");
+ pw.println(ep.name);
+ pw.print("async : ");
+ pw.println(String.valueOf(ep.asyncSupported));
+ printServiceIdAndRanking(pw, this.getServiceReference(ep.serviceId), ep.serviceId);
+ pw.println();
+ }
+ pw.println();
+ }
+
+ if ( dto.failedListenerDTOs.length > 0 ) {
+ pw.println("Failed Listeners");
+ for (final FailedListenerDTO ep : dto.failedListenerDTOs) {
+ pw.print("Types : ");
+ pw.println(getValueAsString(ep.types));
+ pw.print("Reason : ");
+ pw.println(getErrorText(ep.failureReason));
+ printServiceIdAndRanking(pw, this.getServiceReference(ep.serviceId), ep.serviceId);
+ pw.println();
+ }
+ pw.println();
+ }
+ pw.println();
+ }
+
+ private void writeServiceIdAndRanking(final JsonGenerator gen, final ServiceReference<?> ref, final long serviceId) {
+ gen.write("service.id", serviceId);
+ int ranking = 0;
+ if ( ref != null ) {
+ final Object obj = ref.getProperty(Constants.SERVICE_RANKING);
+ if ( obj instanceof Integer) {
+ ranking = (Integer)obj;
+ }
+ }
+ gen.write("service.ranking", ranking);
+ if ( ref != null ) {
+ gen.write("bundle.id", ref.getBundle().getBundleId());
+ }
+ }
+
+ private void writeValueAsStringOrStringArray(final JsonGenerator gen, final String name, final Object value) {
+ if ( value.getClass().isArray() ) {
+ gen.writeStartArray(name);
+ for(int i=0; i<Array.getLength(value); i++) {
+ final Object v = Array.get(value, i);
+ if (v instanceof Long) {
+ gen.write((long)v);
+ } else if (v instanceof Integer) {
+ gen.write((int)v);
+ } else if (v instanceof Double) {
+ gen.write((double)v);
+ } else if (v instanceof Byte) {
+ gen.write((byte)v);
+ } else if (v instanceof Float) {
+ gen.write((float)v);
+ } else if (v instanceof Short) {
+ gen.write((short)v);
+ } else if (v instanceof Boolean) {
+ gen.write((boolean)v);
+ } else if (v instanceof Character) {
+ gen.write((char)v);
+ } else {
+ gen.write(v.toString());
+ }
+ }
+ gen.writeEnd();
+ } else {
+ gen.write(name, value.toString());
+ }
+ }
+
+ private void writeRuntime(final JsonGenerator gen, final RuntimeDTO dto) {
+ gen.writeStartObject("runtime");
+ gen.writeStartObject("properties");
+ for(final Map.Entry<String, Object> prop : dto.serviceDTO.properties.entrySet()) {
+ writeValueAsStringOrStringArray(gen, prop.getKey(), prop.getValue());
+ }
+ gen.writeEnd();
+ gen.writeEnd();
+ }
+
+ private void writeContext(final JsonGenerator gen, final ServletContextDTO ctxDto) {
+ gen.writeStartObject();
+ gen.write("name", ctxDto.name);
+ gen.write("path", ctxDto.contextPath);
+
+ writeServiceIdAndRanking(gen, this.getServiceReference(ctxDto.serviceId), ctxDto.serviceId);
+
+ gen.writeStartArray("servlets");
+ for (final ServletDTO servlet : ctxDto.servletDTOs) {
+ gen.writeStartObject();
+ gen.write("name", servlet.name);
+ writeValueAsStringOrStringArray(gen, "patterns", servlet.patterns);
+ gen.write("asyncSupported", servlet.asyncSupported);
+
+ writeServiceIdAndRanking(gen, this.getServiceReference(servlet.serviceId), servlet.serviceId);
+ gen.writeEnd();
+ }
+ gen.writeEnd();
+
+ gen.writeStartArray("filters");
+ for (final FilterDTO filter : ctxDto.filterDTOs) {
+ gen.writeStartObject();
+ gen.write("name", filter.name);
+ writeValueAsStringOrStringArray(gen, "patterns", filter.patterns);
+ writeValueAsStringOrStringArray(gen, "regexs", filter.regexs);
+ writeValueAsStringOrStringArray(gen, "servletNames", filter.servletNames);
+ gen.write("asyncSupported", filter.asyncSupported);
+ writeValueAsStringOrStringArray(gen, "dispatcher", filter.dispatcher);
+ writeServiceIdAndRanking(gen, this.getServiceReference(filter.serviceId), filter.serviceId);
+ gen.writeEnd();
+ }
+ gen.writeEnd();
+
+ gen.writeStartArray("resources");
+ for (final ResourceDTO rsrc : ctxDto.resourceDTOs) {
+ gen.writeStartObject();
+ writeValueAsStringOrStringArray(gen, "patterns", rsrc.patterns);
+ gen.write("prefix", rsrc.prefix);
+ writeServiceIdAndRanking(gen, this.getServiceReference(rsrc.serviceId), rsrc.serviceId);
+ gen.writeEnd();
+ }
+ gen.writeEnd();
+
+ gen.writeStartArray("errorPages");
+ for (final ErrorPageDTO ep : ctxDto.errorPageDTOs) {
+ gen.writeStartObject();
+ gen.write("name", ep.name);
+ writeValueAsStringOrStringArray(gen, "exceptions", ep.exceptions);
+ writeValueAsStringOrStringArray(gen, "errorCodes", ep.errorCodes);
+ gen.write("asyncSupported", ep.asyncSupported);
+ writeServiceIdAndRanking(gen, this.getServiceReference(ep.serviceId), ep.serviceId);
+ gen.writeEnd();
+ }
+ gen.writeEnd();
+
+ gen.writeStartArray("listeners");
+ for (final ListenerDTO l : ctxDto.listenerDTOs) {
+ gen.writeStartObject();
+ writeValueAsStringOrStringArray(gen, "types", l.types);
+ writeServiceIdAndRanking(gen, this.getServiceReference(l.serviceId), l.serviceId);
+ gen.writeEnd();
+ }
+ gen.writeEnd();
+ gen.writeEnd();
+ }
+
+ private void printConfigurationJSON(final PrintWriter pw) {
+ final RuntimeDTO dto = this.runtime.getRuntimeDTO();
+
+ try (final JsonGenerator gen = Json.createGenerator(pw)) {
+ gen.writeStartObject();
+
+ writeRuntime(gen, dto);
+
+ gen.writeStartArray("contexts");
+ for(final ServletContextDTO ctxDto : dto.servletContextDTOs ) {
+ writeContext(gen, ctxDto);
+ }
+ gen.writeEnd();
+
+ gen.writeStartArray("failedContexts");
+ for(final FailedServletContextDTO ctxDto : dto.failedServletContextDTOs ) {
+ gen.writeStartObject();
+ gen.write("name", ctxDto.name);
+ gen.write("path", ctxDto.contextPath);
+ gen.write("failureReason", ctxDto.failureReason);
+ gen.write("failureReasonText", getErrorText(ctxDto.failureReason));
+ writeServiceIdAndRanking(gen, this.getServiceReference(ctxDto.serviceId), ctxDto.serviceId);
+ gen.writeEnd();
+ }
+ gen.writeEnd();
+
+ gen.writeStartArray("failedServlets");
+ for (final FailedServletDTO servlet : dto.failedServletDTOs) {
+ gen.writeStartObject();
+ gen.write("name", servlet.name);
+ writeValueAsStringOrStringArray(gen, "patterns", servlet.patterns);
+ gen.write("asyncSupported", servlet.asyncSupported);
+ gen.write("failureReason", servlet.failureReason);
+ gen.write("failureReasonText", getErrorText(servlet.failureReason));
+ writeServiceIdAndRanking(gen, this.getServiceReference(servlet.serviceId), servlet.serviceId);
+ gen.writeEnd();
+ }
+ gen.writeEnd();
+
+ gen.writeStartArray("failedFilters");
+ for (final FailedFilterDTO filter : dto.failedFilterDTOs) {
+ gen.writeStartObject();
+ gen.write("name", filter.name);
+ writeValueAsStringOrStringArray(gen, "patterns", filter.patterns);
+ writeValueAsStringOrStringArray(gen, "regexs", filter.regexs);
+ writeValueAsStringOrStringArray(gen, "servletNames", filter.servletNames);
+ gen.write("asyncSupported", filter.asyncSupported);
+ writeValueAsStringOrStringArray(gen, "dispatcher", filter.dispatcher);
+ gen.write("failureReason", filter.failureReason);
+ gen.write("failureReasonText", getErrorText(filter.failureReason));
+ writeServiceIdAndRanking(gen, this.getServiceReference(filter.serviceId), filter.serviceId);
+ gen.writeEnd();
+ }
+ gen.writeEnd();
+
+ gen.writeStartArray("failedResources");
+ for (final FailedResourceDTO rsrc : dto.failedResourceDTOs) {
+ gen.writeStartObject();
+ writeValueAsStringOrStringArray(gen, "patterns", rsrc.patterns);
+ gen.write("prefix", rsrc.prefix);
+ gen.write("failureReason", rsrc.failureReason);
+ gen.write("failureReasonText", getErrorText(rsrc.failureReason));
+ writeServiceIdAndRanking(gen, this.getServiceReference(rsrc.serviceId), rsrc.serviceId);
+ gen.writeEnd();
+ }
+ gen.writeEnd();
+
+ gen.writeStartArray("failedErrorPages");
+ for (final FailedErrorPageDTO ep : dto.failedErrorPageDTOs) {
+ gen.writeStartObject();
+ gen.write("name", ep.name);
+ writeValueAsStringOrStringArray(gen, "exceptions", ep.exceptions);
+ writeValueAsStringOrStringArray(gen, "errorCodes", ep.errorCodes);
+ gen.write("asyncSupported", ep.asyncSupported);
+ gen.write("failureReason", ep.failureReason);
+ gen.write("failureReasonText", getErrorText(ep.failureReason));
+ writeServiceIdAndRanking(gen, this.getServiceReference(ep.serviceId), ep.serviceId);
+ gen.writeEnd();
+ }
+ gen.writeEnd();
+
+ gen.writeStartArray("failedListeners");
+ for (final FailedListenerDTO l : dto.failedListenerDTOs) {
+ gen.writeStartObject();
+ writeValueAsStringOrStringArray(gen, "types", l.types);
+ gen.write("failureReason", l.failureReason);
+ gen.write("failureReasonText", getErrorText(l.failureReason));
+ writeServiceIdAndRanking(gen, this.getServiceReference(l.serviceId), l.serviceId);
+ gen.writeEnd();
+ }
+ gen.writeEnd();
+
+ gen.writeEnd();
+ }
+ }
+}
diff --git a/http/pom.xml b/http/pom.xml
index 370fc488d1..6479bdce33 100644
--- a/http/pom.xml
+++ b/http/pom.xml
@@ -46,7 +46,9 @@
<module>parent</module>
<module>proxy</module>
<module>itest</module>
- <module>samples/bridge</module>
+ <module>webconsoleplugin</module>
+ <module>inventoryprinter</module>
+ <module>sslfilter</module>
<module>samples/whiteboard</module>
</modules>
</project>
diff --git a/http/webconsoleplugin/pom.xml b/http/webconsoleplugin/pom.xml
new file mode 100644
index 0000000000..b4bb2afaff
--- /dev/null
+++ b/http/webconsoleplugin/pom.xml
@@ -0,0 +1,75 @@
+<!--
+ 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>13</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <name>Apache Felix Http Webconsole Plugin</name>
+ <artifactId>org.apache.felix.http.webconsoleplugin</artifactId>
+ <version>1.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>
+ </scm>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>5.1.4</version>
+ <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>2.0.0-RC1</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>3.0.1</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
new file mode 100644
index 0000000000..87eb3ad43d
--- /dev/null
+++ b/http/webconsoleplugin/src/main/java/org/apache/felix/http/webconsoleplugin/impl/Activator.java
@@ -0,0 +1,94 @@
+/*
+ * 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 javax.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/base/src/main/java/org/apache/felix/http/base/internal/console/HttpServicePlugin.java b/http/webconsoleplugin/src/main/java/org/apache/felix/http/webconsoleplugin/impl/HttpServicePlugin.java
similarity index 59%
rename from http/base/src/main/java/org/apache/felix/http/base/internal/console/HttpServicePlugin.java
rename to http/webconsoleplugin/src/main/java/org/apache/felix/http/webconsoleplugin/impl/HttpServicePlugin.java
index 7d8342b3b0..accdf78ba1 100644
--- a/http/base/src/main/java/org/apache/felix/http/base/internal/console/HttpServicePlugin.java
+++ b/http/webconsoleplugin/src/main/java/org/apache/felix/http/webconsoleplugin/impl/HttpServicePlugin.java
@@ -16,8 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-
-package org.apache.felix.http.base.internal.console;
+package org.apache.felix.http.webconsoleplugin.impl;
import java.io.IOException;
import java.io.PrintWriter;
@@ -26,12 +25,9 @@ import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
-import java.util.Dictionary;
-import java.util.Hashtable;
import java.util.List;
import java.util.Map;
-import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
@@ -41,7 +37,6 @@ import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
-import org.osgi.framework.ServiceRegistration;
import org.osgi.framework.dto.ServiceReferenceDTO;
import org.osgi.service.servlet.runtime.HttpServiceRuntime;
import org.osgi.service.servlet.runtime.dto.DTOConstants;
@@ -63,33 +58,18 @@ import org.osgi.service.servlet.runtime.dto.ServletDTO;
/**
* This is a web console plugin.
*/
-public class HttpServicePlugin extends HttpServlet
-{
+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 HttpServiceRuntime runtime;
private final BundleContext context;
- private volatile ServiceRegistration<Servlet> serviceReg;
+ private final HttpServiceRuntime runtime;
- public HttpServicePlugin(final BundleContext context, final HttpServiceRuntime runtime)
- {
- this.runtime = runtime;
+ public HttpServicePlugin(final BundleContext context, final HttpServiceRuntime runtime) {
this.context = context;
- }
-
- public void register()
- {
- final Dictionary<String, Object> props = new Hashtable<>();
- props.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
- props.put(Constants.SERVICE_DESCRIPTION, "HTTP Service Web Console Plugin");
- props.put("felix.webconsole.label", "httpservice");
- props.put("felix.webconsole.title", "HTTP Service");
- props.put("felix.webconsole.configprinter.modes", "always");
- this.serviceReg = context.registerService(Servlet.class, this, props);
+ this.runtime = runtime;
}
/** Escape xml text */
@@ -129,8 +109,7 @@ public class HttpServicePlugin extends HttpServlet
final RequestInfoDTO dto = this.runtime.calculateRequestInfoDTO(test);
final StringBuilder sb = new StringBuilder();
- if ( dto.servletDTO != null )
- {
+ if ( dto.servletDTO != null ) {
sb.append("Servlet: ");
sb.append(getValueAsString(dto.servletDTO.patterns));
sb.append(" (");
@@ -138,22 +117,16 @@ public class HttpServicePlugin extends HttpServlet
sb.append(String.valueOf(dto.servletDTO.serviceId));
sb.append("), Filters: [");
boolean first = true;
- for(final FilterDTO f : dto.filterDTOs)
- {
- if ( first )
- {
+ for(final FilterDTO f : dto.filterDTOs) {
+ if ( first ) {
first = false;
- }
- else
- {
+ } else {
sb.append(", ");
}
sb.append(f.serviceId);
}
sb.append("]");
- }
- else if ( dto.resourceDTO != null )
- {
+ } else if ( dto.resourceDTO != null ) {
sb.append("Resource: ");
sb.append(getValueAsString(dto.resourceDTO.patterns));
sb.append(" (");
@@ -161,22 +134,16 @@ public class HttpServicePlugin extends HttpServlet
sb.append(String.valueOf(dto.resourceDTO.serviceId));
sb.append("), Filters: [");
boolean first = true;
- for(final FilterDTO f : dto.filterDTOs)
- {
- if ( first )
- {
+ for(final FilterDTO f : dto.filterDTOs) {
+ if ( first ) {
first = false;
- }
- else
- {
+ } else {
sb.append(", ");
}
sb.append(f.serviceId);
}
sb.append("]");
- }
- else
- {
+ } else {
sb.append("<404>");
}
msg = sb.toString();
@@ -205,8 +172,7 @@ public class HttpServicePlugin extends HttpServlet
}
@Override
- protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws IOException
- {
+ protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws IOException {
final RuntimeDTO dto = this.runtime.getRuntimeDTO();
final PrintWriter pw = resp.getWriter();
@@ -219,12 +185,10 @@ public class HttpServicePlugin extends HttpServlet
printRuntimeDetails(pw, dto.serviceDTO);
- for(final ServletContextDTO ctxDto : dto.servletContextDTOs )
- {
+ for(final ServletContextDTO ctxDto : dto.servletContextDTOs ) {
printContextDetails(pw, ctxDto);
}
- for(final FailedServletContextDTO ctxDto : dto.failedServletContextDTOs )
- {
+ for(final FailedServletContextDTO ctxDto : dto.failedServletContextDTOs ) {
printFailedContextDetails(pw, ctxDto);
}
printFailedServletDetails(pw, dto);
@@ -236,8 +200,7 @@ public class HttpServicePlugin extends HttpServlet
pw.println("<br/>");
}
- private void printForm(final PrintWriter pw, final String value, final String msg, final String path)
- {
+ 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);
@@ -276,8 +239,7 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</table>");
}
- private void titleHtml(PrintWriter pw, String title, String description)
- {
+ private void titleHtml(PrintWriter pw, String title, String description) {
pw.println("<tr class='content'>");
pw.println("<th colspan='3'class='content container'>" + title
+ "</th>");
@@ -291,59 +253,38 @@ public class HttpServicePlugin extends HttpServlet
}
}
- private void separatorHtml(PrintWriter pw)
- {
+ 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[])
- {
+ private String getValueAsString(final Object value) {
+ if ( value.getClass().isArray() ) {
+ if (value instanceof long[]) {
return Arrays.toString((long[])value);
- }
- else if (value instanceof int[])
- {
+ } else if (value instanceof int[]) {
return Arrays.toString((int[])value);
- }
- else if (value instanceof double[])
- {
+ } else if (value instanceof double[]) {
return Arrays.toString((double[])value);
- }
- else if (value instanceof byte[])
- {
+ } else if (value instanceof byte[]) {
return Arrays.toString((byte[])value);
- }
- else if (value instanceof float[])
- {
+ } else if (value instanceof float[]) {
return Arrays.toString((float[])value);
- }
- else if (value instanceof short[])
- {
+ } else if (value instanceof short[]) {
return Arrays.toString((short[])value);
- }
- else if (value instanceof boolean[])
- {
+ } else if (value instanceof boolean[]) {
return Arrays.toString((boolean[])value);
- }
- else if (value instanceof char[])
- {
+ } else if (value instanceof char[]) {
return Arrays.toString((char[])value);
- }
- else
- {
+ } else {
return Arrays.toString((Object[])value);
}
}
return value.toString();
}
- private void printRuntimeDetails(final PrintWriter pw, final ServiceReferenceDTO dto)
- {
+ 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>");
@@ -351,29 +292,24 @@ public class HttpServicePlugin extends HttpServlet
pw.println("<th class=\"header\">${Value}</th>");
pw.println("</tr></thead>");
boolean odd = true;
- for(final Map.Entry<String, Object> prop : dto.properties.entrySet())
- {
+ 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)
- {
+ 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)
- {
+ for(final String val : columns) {
pw.print("<td>");
- if ( val != null )
- {
+ if ( val != null ) {
String text = escapeXml(val).replace("\n", "<br/>");
int pos;
- while ( (pos = text.indexOf("${#link:")) != -1)
- {
+ 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);
@@ -390,21 +326,17 @@ public class HttpServicePlugin extends HttpServlet
return !odd;
}
- private String getContextPath(final String path)
- {
- if ( path.length() == 0 )
- {
+ 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)
- {
+ private boolean printServiceRankingRow(final PrintWriter pw, final long serviceId, final boolean odd) {
int ranking = 0;
final ServiceReference<?> ref = this.getServiceReference(serviceId);
- if ( ref != null )
- {
+ if ( ref != null ) {
final Object obj = ref.getProperty(Constants.SERVICE_RANKING);
if ( obj instanceof Integer)
{
@@ -414,8 +346,7 @@ public class HttpServicePlugin extends HttpServlet
return printRow(pw, odd, "${ranking}", String.valueOf(ranking));
}
- private void printContextDetails(final PrintWriter pw, final ServletContextDTO dto)
- {
+ 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>");
@@ -441,8 +372,7 @@ public class HttpServicePlugin extends HttpServlet
pw.println("<br/>");
}
- private void printFailedContextDetails(final PrintWriter pw, final FailedServletContextDTO dto)
- {
+ 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>");
@@ -461,24 +391,19 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</table>");
}
- private void appendServiceRanking(final StringBuilder sb, final ServiceReference<?> ref)
- {
+ private void appendServiceRanking(final StringBuilder sb, final ServiceReference<?> ref) {
int ranking = 0;
- if ( ref != null )
- {
+ if ( ref != null ) {
final Object obj = ref.getProperty(Constants.SERVICE_RANKING);
- if ( obj instanceof Integer)
- {
+ 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 )
- {
+ 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} '");
@@ -493,16 +418,14 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</tr></thead>");
boolean odd = true;
- for (final FilterDTO filter : dto.filterDTOs)
- {
+ 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 )
- {
+ if ( ref != null ) {
sb.append("${bundle} : ");
sb.append("${#link:");
sb.append(ref.getBundle().getBundleId());
@@ -514,14 +437,12 @@ public class HttpServicePlugin extends HttpServlet
final List<String> patterns = new ArrayList<>();
patterns.addAll(Arrays.asList(filter.patterns));
patterns.addAll(Arrays.asList(filter.regexs));
- for(final String name : filter.servletNames)
- {
+ for(final String name : filter.servletNames) {
patterns.add("Servlet : " + name);
}
Collections.sort(patterns);
final StringBuilder psb = new StringBuilder();
- for(final String p : patterns)
- {
+ for(final String p : patterns) {
psb.append(p).append('\n');
}
odd = printRow(pw, odd, psb.toString(), filter.name, sb.toString());
@@ -529,10 +450,8 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</table>");
}
- private String getErrorText(final int reason)
- {
- switch ( reason )
- {
+ 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";
@@ -543,10 +462,8 @@ public class HttpServicePlugin extends HttpServlet
default: return "unknown";
}
}
- private void printFailedFilterDetails(final PrintWriter pw, final RuntimeDTO dto)
- {
- if ( dto.failedFilterDTOs.length == 0 )
- {
+ 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>");
@@ -559,8 +476,7 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</tr></thead>");
boolean odd = true;
- for (final FailedFilterDTO filter : dto.failedFilterDTOs)
- {
+ 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);
@@ -568,8 +484,7 @@ public class HttpServicePlugin extends HttpServlet
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 )
- {
+ if ( ref != null ) {
sb.append("${bundle} : ");
sb.append("${#link:");
sb.append(ref.getBundle().getBundleId());
@@ -581,14 +496,12 @@ public class HttpServicePlugin extends HttpServlet
final List<String> patterns = new ArrayList<>();
patterns.addAll(Arrays.asList(filter.patterns));
patterns.addAll(Arrays.asList(filter.regexs));
- for(final String name : filter.servletNames)
- {
+ for(final String name : filter.servletNames) {
patterns.add("Servlet : " + name);
}
Collections.sort(patterns);
final StringBuilder psb = new StringBuilder();
- for(final String p : patterns)
- {
+ for(final String p : patterns) {
psb.append(p).append('\n');
}
odd = printRow(pw, odd, psb.toString(), filter.name, sb.toString());
@@ -596,30 +509,22 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</table>");
}
- private ServiceReference<?> getServiceReference(final long serviceId)
- {
- if ( serviceId > 0 )
- {
- try
- {
+ 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 )
- {
+ if ( ref != null && ref.length > 0 ) {
return ref[0];
}
- }
- catch (final InvalidSyntaxException e)
- {
+ } catch (final InvalidSyntaxException e) {
// ignore
}
}
return null;
}
- private void printServletDetails(final PrintWriter pw, final ServletContextDTO dto)
- {
- if ( dto.servletDTOs.length == 0 )
- {
+ 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} '");
@@ -634,15 +539,13 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</tr></thead>");
boolean odd = true;
- for (final ServletDTO servlet : dto.servletDTOs)
- {
+ 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 )
- {
+ if ( ref != null ) {
sb.append("${bundle} : ");
sb.append("${#link:");
sb.append(ref.getBundle().getBundleId());
@@ -652,8 +555,7 @@ public class HttpServicePlugin extends HttpServlet
}
final StringBuilder psb = new StringBuilder();
- for(final String p : servlet.patterns)
- {
+ for(final String p : servlet.patterns) {
psb.append(p).append('\n');
}
odd = printRow(pw, odd, psb.toString(), servlet.name, sb.toString());
@@ -661,10 +563,8 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</table>");
}
- private void printFailedServletDetails(final PrintWriter pw, final RuntimeDTO dto)
- {
- if ( dto.failedServletDTOs.length == 0 )
- {
+ 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>");
@@ -677,16 +577,14 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</tr></thead>");
boolean odd = true;
- for (final FailedServletDTO servlet : dto.failedServletDTOs)
- {
+ 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 )
- {
+ if ( ref != null ) {
sb.append("${bundle} : ");
sb.append("${#link:");
sb.append(ref.getBundle().getBundleId());
@@ -696,8 +594,7 @@ public class HttpServicePlugin extends HttpServlet
}
final StringBuilder psb = new StringBuilder();
- for(final String p : servlet.patterns)
- {
+ for(final String p : servlet.patterns) {
psb.append(p).append('\n');
}
odd = printRow(pw, odd, psb.toString(), servlet.name, sb.toString());
@@ -705,10 +602,8 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</table>");
}
- private void printResourceDetails(final PrintWriter pw, final ServletContextDTO dto)
- {
- if ( dto.resourceDTOs.length == 0 )
- {
+ 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} '");
@@ -723,14 +618,12 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</tr></thead>");
boolean odd = true;
- for (final ResourceDTO rsrc : dto.resourceDTOs)
- {
+ 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 )
- {
+ if ( ref != null ) {
sb.append("${bundle} : ");
sb.append("${#link:");
sb.append(ref.getBundle().getBundleId());
@@ -740,8 +633,7 @@ public class HttpServicePlugin extends HttpServlet
}
final StringBuilder psb = new StringBuilder();
- for(final String p : rsrc.patterns)
- {
+ for(final String p : rsrc.patterns) {
psb.append(p).append('\n');
}
odd = printRow(pw, odd, psb.toString(), rsrc.prefix, sb.toString());
@@ -749,10 +641,8 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</table>");
}
- private void printFailedResourceDetails(final PrintWriter pw, final RuntimeDTO dto)
- {
- if ( dto.failedResourceDTOs.length == 0 )
- {
+ 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>");
@@ -765,15 +655,13 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</tr></thead>");
boolean odd = true;
- for (final FailedResourceDTO rsrc : dto.failedResourceDTOs)
- {
+ 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 )
- {
+ if ( ref != null ) {
sb.append("${bundle} : ");
sb.append("${#link:");
sb.append(ref.getBundle().getBundleId());
@@ -783,8 +671,7 @@ public class HttpServicePlugin extends HttpServlet
}
final StringBuilder psb = new StringBuilder();
- for(final String p : rsrc.patterns)
- {
+ for(final String p : rsrc.patterns) {
psb.append(p).append('\n');
}
odd = printRow(pw, odd, psb.toString(), rsrc.prefix, sb.toString());
@@ -792,10 +679,8 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</table>");
}
- private void printErrorPageDetails(final PrintWriter pw, final ServletContextDTO dto)
- {
- if ( dto.errorPageDTOs.length == 0 )
- {
+ 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} '");
@@ -810,15 +695,13 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</tr></thead>");
boolean odd = true;
- for (final ErrorPageDTO ep : dto.errorPageDTOs)
- {
+ 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 )
- {
+ if ( ref != null ) {
sb.append("${bundle} : ");
sb.append("${#link:");
sb.append(ref.getBundle().getBundleId());
@@ -828,12 +711,10 @@ public class HttpServicePlugin extends HttpServlet
}
final StringBuilder psb = new StringBuilder();
- for(final long p : ep.errorCodes)
- {
+ for(final long p : ep.errorCodes) {
psb.append(p).append('\n');
}
- for(final String p : ep.exceptions)
- {
+ for(final String p : ep.exceptions) {
psb.append(p).append('\n');
}
odd = printRow(pw, odd, psb.toString(), ep.name, sb.toString());
@@ -841,10 +722,8 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</table>");
}
- private void printFailedErrorPageDetails(final PrintWriter pw, final RuntimeDTO dto)
- {
- if ( dto.failedErrorPageDTOs.length == 0 )
- {
+ 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>");
@@ -857,16 +736,14 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</tr></thead>");
boolean odd = true;
- for (final FailedErrorPageDTO ep : dto.failedErrorPageDTOs)
- {
+ 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 )
- {
+ if ( ref != null ) {
sb.append("${bundle} : ");
sb.append("${#link:");
sb.append(ref.getBundle().getBundleId());
@@ -876,12 +753,10 @@ public class HttpServicePlugin extends HttpServlet
}
final StringBuilder psb = new StringBuilder();
- for(final long p : ep.errorCodes)
- {
+ for(final long p : ep.errorCodes) {
psb.append(p).append('\n');
}
- for(final String p : ep.exceptions)
- {
+ for(final String p : ep.exceptions) {
psb.append(p).append('\n');
}
odd = printRow(pw, odd, psb.toString(), ep.name, sb.toString());
@@ -889,10 +764,8 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</table>");
}
- private void printListenerDetails(final PrintWriter pw, final ServletContextDTO dto)
- {
- if ( dto.listenerDTOs.length == 0 )
- {
+ 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} '");
@@ -906,14 +779,12 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</tr></thead>");
boolean odd = true;
- for (final ListenerDTO ep : dto.listenerDTOs)
- {
+ 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 )
- {
+ if ( ref != null ) {
sb.append("${bundle} : ");
sb.append("${#link:");
sb.append(ref.getBundle().getBundleId());
@@ -922,8 +793,7 @@ public class HttpServicePlugin extends HttpServlet
sb.append("${link#}\n");
}
final StringBuilder tsb = new StringBuilder();
- for(final String t : ep.types)
- {
+ for(final String t : ep.types) {
tsb.append(t).append('\n');
}
odd = printRow(pw, odd, tsb.toString(), sb.toString());
@@ -931,10 +801,8 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</table>");
}
- private void printFailedListenerDetails(final PrintWriter pw, final RuntimeDTO dto)
- {
- if ( dto.failedListenerDTOs.length == 0 )
- {
+ 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>");
@@ -946,15 +814,13 @@ public class HttpServicePlugin extends HttpServlet
pw.println("</tr></thead>");
boolean odd = true;
- for (final FailedListenerDTO ep : dto.failedListenerDTOs)
- {
+ 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 )
- {
+ if ( ref != null ) {
sb.append("${bundle} : ");
sb.append("${#link:");
sb.append(ref.getBundle().getBundleId());
@@ -963,384 +829,11 @@ public class HttpServicePlugin extends HttpServlet
sb.append("${link#}\n");
}
final StringBuilder tsb = new StringBuilder();
- for(final String t : ep.types)
- {
+ for(final String t : ep.types) {
tsb.append(t).append('\n');
}
odd = printRow(pw, odd, tsb.toString(), sb.toString());
}
pw.println("</table>");
}
-
- private void printServiceIdAndRanking(final PrintWriter pw, final ServiceReference<?> ref, final long serviceId)
- {
- pw.print("service.id : ");
- pw.println(String.valueOf(serviceId));
- int ranking = 0;
- if ( ref != null )
- {
- final Object obj = ref.getProperty(Constants.SERVICE_RANKING);
- if ( obj instanceof Integer)
- {
- ranking = (Integer)obj;
- }
- }
- pw.print("Ranking : ");
- pw.println(String.valueOf(ranking));
- }
-
- /**
- * @see org.apache.felix.webconsole.ConfigurationPrinter#printConfiguration(java.io.PrintWriter)
- */
- public void printConfiguration(final PrintWriter pw)
- {
- final RuntimeDTO dto = this.runtime.getRuntimeDTO();
-
- pw.println("HTTP Service Details");
- pw.println("====================");
- pw.println();
- pw.println("Runtime Properties");
- pw.println("------------------");
-
- for(final Map.Entry<String, Object> prop : dto.serviceDTO.properties.entrySet())
- {
- pw.print(prop.getKey());
- pw.print(" : ");
- pw.println(getValueAsString(prop.getValue()));
- }
- pw.println();
- for(final ServletContextDTO ctxDto : dto.servletContextDTOs )
- {
- pw.print("Servlet Context ");
- pw.println(ctxDto.name);
- pw.println("-----------------------------------------------");
-
- pw.print("Path : ");
- pw.println(getContextPath(ctxDto.contextPath));
- printServiceIdAndRanking(pw, this.getServiceReference(ctxDto.serviceId), ctxDto.serviceId);
- pw.println();
- if ( ctxDto.servletDTOs.length > 0 )
- {
- pw.println("Servlets");
- for (final ServletDTO servlet : ctxDto.servletDTOs)
- {
- pw.print("Patterns : ");
- pw.println(getValueAsString(servlet.patterns));
- pw.print("Name : ");
- pw.println(servlet.name);
- final ServiceReference<?> ref = this.getServiceReference(servlet.serviceId);
- printServiceIdAndRanking(pw, ref, servlet.serviceId);
- pw.print("async : ");
- pw.println(String.valueOf(servlet.asyncSupported));
- if ( ref != null )
- {
- pw.print("Bundle : ");
- pw.print(ref.getBundle().getSymbolicName());
- pw.print(" <");
- pw.print(String.valueOf(ref.getBundle().getBundleId()));
- pw.println(">");
- }
- pw.println();
- }
- pw.println();
- }
-
- if ( ctxDto.filterDTOs.length > 0 )
- {
- pw.println("Filters");
- for (final FilterDTO filter : ctxDto.filterDTOs)
- {
- 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);
-
- pw.print("Patterns : ");
- pw.println(patterns);
- pw.print("Name : ");
- pw.println(filter.name);
- final ServiceReference<?> ref = this.getServiceReference(filter.serviceId);
- printServiceIdAndRanking(pw, ref, filter.serviceId);
- pw.print("async : ");
- pw.println(String.valueOf(filter.asyncSupported));
- pw.print("dispatcher : ");
- pw.println(getValueAsString(filter.dispatcher));
- if ( ref != null )
- {
- pw.print("Bundle : ");
- pw.print(ref.getBundle().getSymbolicName());
- pw.print(" <");
- pw.print(String.valueOf(ref.getBundle().getBundleId()));
- pw.println(">");
- }
- pw.println();
- }
- pw.println();
- }
- if ( ctxDto.resourceDTOs.length > 0 )
- {
- pw.println("Resources");
- for (final ResourceDTO rsrc : ctxDto.resourceDTOs)
- {
- pw.print("Patterns : ");
- pw.println(getValueAsString(rsrc.patterns));
- pw.print("Prefix : ");
- pw.println(rsrc.prefix);
- final ServiceReference<?> ref = this.getServiceReference(rsrc.serviceId);
- printServiceIdAndRanking(pw, ref, rsrc.serviceId);
- if ( ref != null )
- {
- pw.print("Bundle : ");
- pw.print(ref.getBundle().getSymbolicName());
- pw.print(" <");
- pw.print(String.valueOf(ref.getBundle().getBundleId()));
- pw.println(">");
- }
- pw.println();
- }
- pw.println();
-
- }
- if ( ctxDto.errorPageDTOs.length > 0 )
- {
- pw.println("Error Pages");
- for (final ErrorPageDTO ep : ctxDto.errorPageDTOs)
- {
- final List<String> patterns = new ArrayList<>();
- for(final long p : ep.errorCodes)
- {
- patterns.add(String.valueOf(p));
- }
- for(final String p : ep.exceptions)
- {
- patterns.add(p);
- }
- pw.print("Patterns : ");
- pw.println(patterns);
- pw.print("Name : ");
- pw.println(ep.name);
- final ServiceReference<?> ref = this.getServiceReference(ep.serviceId);
- printServiceIdAndRanking(pw, ref, ep.serviceId);
- pw.print("async : ");
- pw.println(String.valueOf(ep.asyncSupported));
- if ( ref != null )
- {
- pw.print("Bundle : ");
- pw.print(ref.getBundle().getSymbolicName());
- pw.print(" <");
- pw.print(String.valueOf(ref.getBundle().getBundleId()));
- pw.println(">");
- }
- pw.println();
- }
- pw.println();
- }
-
- if ( ctxDto.listenerDTOs.length > 0 )
- {
- pw.println("Listeners");
- for (final ListenerDTO ep : ctxDto.listenerDTOs)
- {
- pw.print("Types : ");
- pw.println(getValueAsString(ep.types));
- final ServiceReference<?> ref = this.getServiceReference(ep.serviceId);
- printServiceIdAndRanking(pw, ref, ep.serviceId);
- if ( ref != null )
- {
- pw.print("Bundle : ");
- pw.print(ref.getBundle().getSymbolicName());
- pw.print(" <");
- pw.print(String.valueOf(ref.getBundle().getBundleId()));
- pw.println(">");
- }
- pw.println();
- }
- pw.println();
- }
- pw.println();
- }
-
- if ( dto.failedServletContextDTOs.length > 0 )
- {
- for(final FailedServletContextDTO ctxDto : dto.failedServletContextDTOs )
- {
- pw.print("Failed Servlet Context ");
- pw.println(ctxDto.name);
- pw.println("-----------------------------------------------");
-
- pw.print("Reason : ");
- pw.println(getErrorText(ctxDto.failureReason));
- pw.print("Path : ");
- pw.println(getContextPath(ctxDto.contextPath));
- printServiceIdAndRanking(pw, this.getServiceReference(ctxDto.serviceId), ctxDto.serviceId);
- pw.println();
- }
- }
- if ( dto.failedServletDTOs.length > 0 )
- {
- pw.println("Failed Servlets");
- for (final FailedServletDTO servlet : dto.failedServletDTOs)
- {
- pw.print("Patterns : ");
- pw.println(getValueAsString(servlet.patterns));
- pw.print("Reason : ");
- pw.println(getErrorText(servlet.failureReason));
- pw.print("Name : ");
- pw.println(servlet.name);
- final ServiceReference<?> ref = this.getServiceReference(servlet.serviceId);
- printServiceIdAndRanking(pw, ref, servlet.serviceId);
- pw.print("async : ");
- pw.println(String.valueOf(servlet.asyncSupported));
- if ( ref != null )
- {
- pw.print("Bundle : ");
- pw.print(ref.getBundle().getSymbolicName());
- pw.print(" <");
- pw.print(String.valueOf(ref.getBundle().getBundleId()));
- pw.println(">");
- }
- pw.println();
- }
- pw.println();
- }
-
- if ( dto.failedFilterDTOs.length > 0 )
- {
- pw.println("Failed Filters");
- for (final FailedFilterDTO filter : dto.failedFilterDTOs)
- {
- 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);
-
- pw.print("Patterns : ");
- pw.println(patterns);
- pw.print("Reason : ");
- pw.println(getErrorText(filter.failureReason));
- pw.print("Name : ");
- pw.println(filter.name);
- final ServiceReference<?> ref = this.getServiceReference(filter.serviceId);
- printServiceIdAndRanking(pw, ref, filter.serviceId);
- pw.print("async : ");
- pw.println(String.valueOf(filter.asyncSupported));
- pw.print("dispatcher : ");
- pw.println(getValueAsString(filter.dispatcher));
- if ( ref != null )
- {
- pw.print("Bundle : ");
- pw.print(ref.getBundle().getSymbolicName());
- pw.print(" <");
- pw.print(String.valueOf(ref.getBundle().getBundleId()));
- pw.println(">");
- }
- pw.println();
- }
- pw.println();
- }
- if ( dto.failedResourceDTOs.length > 0 )
- {
- pw.println("Failed Resources");
- for (final FailedResourceDTO rsrc : dto.failedResourceDTOs)
- {
- pw.print("Patterns : ");
- pw.println(getValueAsString(rsrc.patterns));
- pw.print("Reason : ");
- pw.println(getErrorText(rsrc.failureReason));
- pw.print("Prefix : ");
- pw.println(rsrc.prefix);
- final ServiceReference<?> ref = this.getServiceReference(rsrc.serviceId);
- printServiceIdAndRanking(pw, ref, rsrc.serviceId);
- if ( ref != null )
- {
- pw.print("Bundle : ");
- pw.print(ref.getBundle().getSymbolicName());
- pw.print(" <");
- pw.print(String.valueOf(ref.getBundle().getBundleId()));
- pw.println(">");
- }
- pw.println();
- }
- pw.println();
-
- }
- if ( dto.failedErrorPageDTOs.length > 0 )
- {
- pw.println("Failed Error Pages");
- for (final FailedErrorPageDTO ep : dto.failedErrorPageDTOs)
- {
- final List<String> patterns = new ArrayList<>();
- for(final long p : ep.errorCodes)
- {
- patterns.add(String.valueOf(p));
- }
- for(final String p : ep.exceptions)
- {
- patterns.add(p);
- }
- pw.print("Patterns : ");
- pw.println(patterns);
- pw.print("Reason : ");
- pw.println(getErrorText(ep.failureReason));
- pw.print("Name : ");
- pw.println(ep.name);
- final ServiceReference<?> ref = this.getServiceReference(ep.serviceId);
- printServiceIdAndRanking(pw, ref, ep.serviceId);
- pw.print("async : ");
- pw.println(String.valueOf(ep.asyncSupported));
- if ( ref != null )
- {
- pw.print("Bundle : ");
- pw.print(ref.getBundle().getSymbolicName());
- pw.print(" <");
- pw.print(String.valueOf(ref.getBundle().getBundleId()));
- pw.println(">");
- }
- pw.println();
- }
- pw.println();
- }
-
- if ( dto.failedListenerDTOs.length > 0 )
- {
- pw.println("Listeners");
- for (final FailedListenerDTO ep : dto.failedListenerDTOs)
- {
- pw.print("Types : ");
- pw.println(getValueAsString(ep.types));
- pw.print("Reason : ");
- pw.println(getErrorText(ep.failureReason));
- final ServiceReference<?> ref = this.getServiceReference(ep.serviceId);
- printServiceIdAndRanking(pw, ref, ep.serviceId);
- if ( ref != null )
- {
- pw.print("Bundle : ");
- pw.print(ref.getBundle().getSymbolicName());
- pw.print(" <");
- pw.print(String.valueOf(ref.getBundle().getBundleId()));
- pw.println(">");
- }
- pw.println();
- }
- pw.println();
- }
- pw.println();
- }
-
- public void unregister()
- {
- if (this.serviceReg != null)
- {
- this.serviceReg.unregister();
- this.serviceReg = null;
- }
- }
}