From 2b63b984dc03072544b841366c6450c3e2f03453 Mon Sep 17 00:00:00 2001 From: Wouter Born Date: Sun, 12 Mar 2023 20:42:12 +0100 Subject: [PATCH] [shelly] Fix missing /shelly/manager (#14592) Using Whiteboard annotations seems to fix this issue. Signed-off-by: Wouter Born --- .../manager/ShellyManagerServlet.java | 35 ++++++++----------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/bundles/org.openhab.binding.shelly/src/main/java/org/openhab/binding/shelly/internal/manager/ShellyManagerServlet.java b/bundles/org.openhab.binding.shelly/src/main/java/org/openhab/binding/shelly/internal/manager/ShellyManagerServlet.java index a5e8bf281..41d4e1344 100644 --- a/bundles/org.openhab.binding.shelly/src/main/java/org/openhab/binding/shelly/internal/manager/ShellyManagerServlet.java +++ b/bundles/org.openhab.binding.shelly/src/main/java/org/openhab/binding/shelly/internal/manager/ShellyManagerServlet.java @@ -20,6 +20,7 @@ import java.io.OutputStream; import java.io.PrintWriter; import java.util.Map; +import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; @@ -41,8 +42,8 @@ import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.ConfigurationPolicy; import org.osgi.service.component.annotations.Deactivate; import org.osgi.service.component.annotations.Reference; -import org.osgi.service.http.HttpService; -import org.osgi.service.http.NamespaceException; +import org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardServletName; +import org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardServletPattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,42 +53,34 @@ import org.slf4j.LoggerFactory; * @author Markus Michels - Initial contribution */ @NonNullByDefault -@Component(service = HttpServlet.class, configurationPolicy = ConfigurationPolicy.OPTIONAL) +@Component(service = Servlet.class, configurationPolicy = ConfigurationPolicy.OPTIONAL) +@HttpWhiteboardServletName(ShellyManagerServlet.SERVLET_URI) +@HttpWhiteboardServletPattern(ShellyManagerServlet.SERVLET_URI + "/*") public class ShellyManagerServlet extends HttpServlet { private static final long serialVersionUID = 1393403713585449126L; private final Logger logger = LoggerFactory.getLogger(ShellyManagerServlet.class); - private static final String SERVLET_URI = SHELLY_MANAGER_URI; + public static final String SERVLET_URI = SHELLY_MANAGER_URI; private final ShellyManager manager; private final String className; - private final HttpService httpService; - @Activate public ShellyManagerServlet(@Reference ConfigurationAdmin configurationAdmin, - @Reference NetworkAddressService networkAddressService, @Reference HttpService httpService, - @Reference HttpClientFactory httpClientFactory, @Reference ShellyHandlerFactory handlerFactory, - @Reference ShellyTranslationProvider translationProvider, ComponentContext componentContext, - Map config) { + @Reference NetworkAddressService networkAddressService, @Reference HttpClientFactory httpClientFactory, + @Reference ShellyHandlerFactory handlerFactory, @Reference ShellyTranslationProvider translationProvider, + ComponentContext componentContext, Map config) { className = substringAfterLast(getClass().toString(), "."); - this.httpService = httpService; String localIp = getString(networkAddressService.getPrimaryIpv4HostAddress()); Integer localPort = HttpServiceUtil.getHttpServicePort(componentContext.getBundleContext()); this.manager = new ShellyManager(configurationAdmin, translationProvider, httpClientFactory.getCommonHttpClient(), localIp, localPort, handlerFactory); - try { - httpService.registerServlet(SERVLET_URI, this, null, httpService.createDefaultHttpContext()); - // Promote Shelly Manager usage - logger.info("{}", translationProvider.get("status.managerstarted", localIp, localPort.toString())); - } catch (NamespaceException | ServletException | IllegalArgumentException e) { - logger.warn("{}: Unable to initialize bindingConfig", className, e); - } + // Promote Shelly Manager usage + logger.info("{}", translationProvider.get("status.managerstarted", localIp, localPort.toString())); } @Deactivate protected void deactivate() { - httpService.unregister(SERVLET_URI); logger.debug("{} stopped", className); } @@ -118,7 +111,7 @@ public class ShellyManagerServlet extends HttpServlet { output = manager.generateContent(path, parameters); response.setContentType(output.mimeType); - if (output.mimeType.equals("text/html")) { + if ("text/html".equals(output.mimeType)) { // Make sure it's UTF-8 encoded response.setCharacterEncoding(UTF_8); print = response.getWriter(); @@ -137,7 +130,7 @@ public class ShellyManagerServlet extends HttpServlet { e); response.setContentType("text/html"); print = response.getWriter(); - print.write("Exception:" + e.toString() + "
Check openHAB.log for details." + print.write("Exception:" + e.toString() + "
Check openhab.log for details." + "

Return to Overview"); logger.debug("{}: {}", className, output); response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);