]> git.basschouten.com Git - openhab-addons.git/commitdiff
[shelly] Fix missing /shelly/manager (#14592)
authorWouter Born <github@maindrain.net>
Sun, 12 Mar 2023 19:42:12 +0000 (20:42 +0100)
committerGitHub <noreply@github.com>
Sun, 12 Mar 2023 19:42:12 +0000 (20:42 +0100)
Using Whiteboard annotations seems to fix this issue.

Signed-off-by: Wouter Born <github@maindrain.net>
bundles/org.openhab.binding.shelly/src/main/java/org/openhab/binding/shelly/internal/manager/ShellyManagerServlet.java

index a5e8bf281c22666b77f0afe483d801fb3a26952d..41d4e1344815d0368df1d0a1f4acec5191f93dce 100644 (file)
@@ -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<String, Object> config) {
+            @Reference NetworkAddressService networkAddressService, @Reference HttpClientFactory httpClientFactory,
+            @Reference ShellyHandlerFactory handlerFactory, @Reference ShellyTranslationProvider translationProvider,
+            ComponentContext componentContext, Map<String, Object> 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() + "<br/>Check openHAB.log for details."
+            print.write("Exception:" + e.toString() + "<br/>Check openhab.log for details."
                     + "<p/><a href=\"/shelly/manager\">Return to Overview</a>");
             logger.debug("{}: {}", className, output);
             response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);