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 d7bc8f1bcc FELIX-6719 : Improve request info output
d7bc8f1bcc is described below

commit d7bc8f1bccf118a5fb55cf4b6a3d9710824a43cd
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Sun Jul 7 14:54:19 2024 +0200

    FELIX-6719 : Improve request info output
---
 .../webconsoleplugin/impl/HttpServicePlugin.java   | 358 +++++++++++----------
 1 file changed, 191 insertions(+), 167 deletions(-)

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
index fa3d7fef02..4ae6de0765 100644
--- 
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
@@ -20,8 +20,8 @@ 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.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -62,10 +62,13 @@ import org.owasp.encoder.Encode;
  * 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 static final String LINK_MARKER_START = "${#link:";
+    private static final String LINK_MARKER_END = "${link#}";
+
     private final BundleContext context;
 
     private final HttpServiceRuntime runtime;
@@ -75,77 +78,23 @@ public class HttpServicePlugin extends HttpServlet {
         this.runtime = runtime;
     }
 
-    @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(String.valueOf(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(String.valueOf(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;
+    private String getTestPath(final HttpServletRequest request) {
+        String test = request.getParameter(ATTR_TEST);
+        if (test != null && !test.isEmpty()) {
+            test = test.trim();
         } else {
-            redirectTo = path + '?' + ATTR_MSG + '=' + encodeParam(msg) + '&'
-                    + ATTR_TEST + '=' + encodeParam(test);
+            test = null;
         }
-        response.sendRedirect(redirectTo);
+        return test;
     }
 
-    private String encodeParam(final String value) {
-        try {
-            return URLEncoder.encode(value, "UTF-8");
-        } catch (UnsupportedEncodingException e) {
-            // should never happen
-            return value;
-        }
+    @Override
+    protected void doPost(final HttpServletRequest request, final 
HttpServletResponse response) throws ServletException, IOException {
+        final String test = this.getTestPath(request);
+        final String path = 
request.getContextPath().concat(request.getServletPath()).concat(request.getPathInfo());
+        final String redirectTo = test == null ? path : 
path.concat("?").concat(ATTR_TEST).concat("=").concat(URLEncoder.encode(test, 
StandardCharsets.UTF_8));
+
+        response.sendRedirect(redirectTo);
     }
 
     @Override
@@ -158,7 +107,7 @@ public class HttpServicePlugin extends HttpServlet {
         if ( req.getPathInfo() != null ) {
             path = path + req.getPathInfo();
         }
-        printForm(pw, req.getParameter(ATTR_TEST), req.getParameter(ATTR_MSG), 
path);
+        printForm(pw, this.getTestPath(req), path);
 
         printRuntimeDetails(pw, dto.serviceDTO);
 
@@ -180,7 +129,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 path) {
         pw.println("<table class='content' cellpadding='0' cellspacing='0' 
width='100%'>");
 
         separatorHtml(pw);
@@ -208,13 +157,78 @@ public class HttpServicePlugin extends HttpServlet {
         pw.print("</td>");
         pw.println("</tr>");
 
-        if (msg != null) {
-            pw.println("<tr class='content'>");
-            pw.println("<td class='content'>&nbsp;</td>");
-            pw.print("<td class='content' colspan='2'>");
-            pw.print(Encode.forHtmlContent(msg));
-            pw.println("</td>");
-            pw.println("</tr>");
+        if (value != null) {
+            final RequestInfoDTO dto = 
this.runtime.calculateRequestInfoDTO(value);
+            if (dto.resourceDTO == null && dto.servletDTO == null) {
+                pw.println("<tr class='content'>");
+                pw.println("<td class='content'>Result</td>");
+                pw.print("<td class='content' colspan='2'>");
+                pw.print("<404>");
+                pw.println("</td>");
+                pw.println("</tr>");
+            } else {
+                boolean odd = false;
+                odd = this.printRow(pw, odd, "", "", "");
+
+                final StringBuilder sbc = new StringBuilder();
+                final ServiceReference<?> refc = 
this.getServiceReference(dto.servletContextId);
+                sbc.append("${service.id} : ");
+                appendServiceLink(sbc, dto.servletContextId);
+                sbc.append("\n");
+                appendServiceRanking(sbc, refc);
+                if ( refc != null ) {
+                    sbc.append("${bundle} : ");
+                    appendBundleLink(sbc, refc.getBundle().getBundleId(), 
refc.getBundle().getSymbolicName());
+                    sbc.append("\n");
+                }
+
+                odd = this.printRow(pw, odd, "${Servlet Context}", 
sbc.toString(), "");
+
+                for(final FilterDTO f : dto.filterDTOs) {
+                    final StringBuilder sb = new StringBuilder();
+                    final ServiceReference<?> ref = 
this.getServiceReference(f.serviceId);
+                    sb.append("${service.id} : ");
+                    appendServiceLink(sb, f.serviceId);
+                    sb.append("\n");
+                    appendServiceRanking(sb, ref);
+                    if ( ref != null ) {
+                        sb.append("${bundle} : ");
+                        appendBundleLink(sb, ref.getBundle().getBundleId(), 
ref.getBundle().getSymbolicName());
+                        sb.append("\n");
+                    }
+
+                    odd = this.printRow(pw, odd, "${Filter}", sb.toString(), 
"");
+                }
+                if ( dto.servletDTO != null ) {
+                    final StringBuilder sb = new StringBuilder();
+                    final ServiceReference<?> ref = 
this.getServiceReference(dto.servletDTO.serviceId);
+                    sb.append("${service.id} : ");
+                    appendServiceLink(sb, dto.servletDTO.serviceId);
+                    sb.append("\n");
+                    appendServiceRanking(sb, ref);
+                    if ( ref != null ) {
+                        sb.append("${bundle} : ");
+                        appendBundleLink(sb, ref.getBundle().getBundleId(), 
ref.getBundle().getSymbolicName());
+                        sb.append("\n");
+                    }
+ 
+                    odd = this.printRow(pw, odd, "${Servlet}", sb.toString(), 
"");
+                } else {
+                    final StringBuilder sb = new StringBuilder();
+                    final ServiceReference<?> ref = 
this.getServiceReference(dto.resourceDTO.serviceId);
+                    sb.append("${service.id} : ");
+                    appendServiceLink(sb, dto.resourceDTO.serviceId);
+                    sb.append("\n");
+                    appendServiceRanking(sb, ref);
+                    if ( ref != null ) {
+                        sb.append("${bundle} : ");
+                        appendBundleLink(sb, ref.getBundle().getBundleId(), 
ref.getBundle().getSymbolicName());
+                        sb.append("\n");
+                    }
+ 
+                    odd = this.printRow(pw, odd, "${Resource}", sb.toString(), 
"");
+                }
+            }
         }
         pw.println("</table>");
     }
@@ -279,11 +293,34 @@ public class HttpServicePlugin extends HttpServlet {
         pw.println("<br/>");
     }
 
-    private String getServiceLink(final long serviceId) {
+    private void appendServiceLink(final StringBuilder sb, final long 
serviceId) {
+        final String val = String.valueOf(serviceId);
         if (serviceId < 0) {
-            return String.valueOf(serviceId);
+            sb.append(val);
+            return;
         }
-        return "${#slink:" + serviceId + "}" + serviceId + "${slink#}";
+        sb.append(LINK_MARKER_START);
+        sb.append('S');
+        sb.append(val);
+        sb.append('}');
+        sb.append(val);
+        sb.append(LINK_MARKER_END);
+    }
+
+    private String getServiceLink(final long serviceId) {
+        final StringBuilder sb = new StringBuilder();
+        appendServiceLink(sb, serviceId);
+        return sb.toString();
+    }
+
+    private void appendBundleLink(final StringBuilder sb, final long bundleId, 
final String text) {
+        final String val = String.valueOf(bundleId);
+        sb.append(LINK_MARKER_START);
+        sb.append('B');
+        sb.append(val);
+        sb.append('}');
+        sb.append(text);
+        sb.append(LINK_MARKER_END);
     }
 
     private void printPreprocessorDetails(final PrintWriter pw, final 
PreprocessorDTO[] dtos) {
@@ -299,15 +336,14 @@ public class HttpServicePlugin extends HttpServlet {
         for(final PreprocessorDTO pp : dtos) {
             final StringBuilder sb = new StringBuilder();
             final ServiceReference<?> ref = 
this.getServiceReference(pp.serviceId);
-            sb.append("${service.id} : 
").append(getServiceLink(pp.serviceId)).append("\n");
+            sb.append("${service.id} : ");
+            appendServiceLink(sb, pp.serviceId);
+            sb.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");
+                appendBundleLink(sb, ref.getBundle().getBundleId(), 
ref.getBundle().getSymbolicName());
+                sb.append("\n");
             }
             odd = printRow(pw, odd, sb.toString());
         }
@@ -325,21 +361,20 @@ public class HttpServicePlugin extends HttpServlet {
             if ( val != null ) {
                 String text = Encode.forHtmlContent(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);
-                }
-                while ( (pos = text.indexOf("${#slink:")) != -1) {
+                while ( (pos = text.indexOf(LINK_MARKER_START)) != -1) {
                     final int endPos = text.indexOf("}", pos);
-                    final int serviceId = Integer.valueOf(text.substring(pos + 
9, endPos));
-                    final int tokenEndPos = text.indexOf("${slink#}", pos);
-
-                    text = text.substring(0, pos) + "<a 
href=\"${appRoot}/services/" + String.valueOf(serviceId) + "\">" +
-                           text.substring(endPos + 1, tokenEndPos) + "</a>" + 
text.substring(tokenEndPos + 9);
+                    final char type = text.charAt(pos + 
LINK_MARKER_START.length());
+                    final int id = Integer.valueOf(text.substring(pos + 
LINK_MARKER_START.length() + 1, endPos));
+                    final int tokenEndPos = text.indexOf(LINK_MARKER_END, pos);
+                    final String linkTest = text.substring(endPos + 1, 
tokenEndPos); 
+                    text = text.substring(0, pos)
+                               .concat("<a href=\"${appRoot}/")
+                               .concat(type == 'S' ? "services/" : "bundles/")
+                               .concat(String.valueOf(id))
+                               .concat("\">")
+                               .concat(linkTest)
+                               .concat("</a>")
+                               .concat(text.substring(tokenEndPos + 
LINK_MARKER_END.length()));
                 }
                 pw.print(text);
             }
@@ -445,17 +480,16 @@ public class HttpServicePlugin extends HttpServlet {
         for (final FilterDTO filter : dto.filterDTOs) {
             final ServiceReference<?> ref = 
this.getServiceReference(filter.serviceId);
             final StringBuilder sb = new StringBuilder();
-            sb.append("${service.id} : 
").append(getServiceLink(filter.serviceId)).append("\n");
+            sb.append("${service.id} : ");
+            appendServiceLink(sb, filter.serviceId);
+            sb.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");
+                appendBundleLink(sb, ref.getBundle().getBundleId(), 
ref.getBundle().getSymbolicName());
+                sb.append("\n");
             }
 
             final List<String> patterns = new ArrayList<>();
@@ -504,15 +538,14 @@ public class HttpServicePlugin extends HttpServlet {
             final String reason = getErrorText(pp.failureReason);
             final StringBuilder sb = new StringBuilder();
             final ServiceReference<?> ref = 
this.getServiceReference(pp.serviceId);
-            sb.append("${service.id} : 
").append(getServiceLink(pp.serviceId)).append("\n");
+            sb.append("${service.id} : ");
+            appendServiceLink(sb, pp.serviceId);
+            sb.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");
+                appendBundleLink(sb, ref.getBundle().getBundleId(), 
ref.getBundle().getSymbolicName());
+                sb.append("\n");
             }
             odd = printRow(pw, odd, sb.toString(), reason);
         }
@@ -537,17 +570,16 @@ public class HttpServicePlugin extends HttpServlet {
             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(getServiceLink(filter.serviceId)).append("\n");
+            sb.append("${service.id} : ");
+            appendServiceLink(sb, filter.serviceId);
+            sb.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");
+                appendBundleLink(sb, ref.getBundle().getBundleId(), 
ref.getBundle().getSymbolicName());
+                sb.append("\n");
             }
 
             final List<String> patterns = new ArrayList<>();
@@ -599,16 +631,15 @@ public class HttpServicePlugin extends HttpServlet {
         for (final ServletDTO servlet : dto.servletDTOs) {
             final StringBuilder sb = new StringBuilder();
             final ServiceReference<?> ref = 
this.getServiceReference(servlet.serviceId);
-            sb.append("${service.id} : 
").append(getServiceLink(servlet.serviceId)).append("\n");
+            sb.append("${service.id} : ");
+            appendServiceLink(sb, servlet.serviceId);
+            sb.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");
+                appendBundleLink(sb, ref.getBundle().getBundleId(), 
ref.getBundle().getSymbolicName());
+                sb.append("\n");
             }
 
             final StringBuilder psb = new StringBuilder();
@@ -638,16 +669,15 @@ public class HttpServicePlugin extends HttpServlet {
             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(getServiceLink(servlet.serviceId)).append("\n");
+            sb.append("${service.id} : ");
+            appendServiceLink(sb, servlet.serviceId);
+            sb.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");
+                appendBundleLink(sb, ref.getBundle().getBundleId(), 
ref.getBundle().getSymbolicName());
+                sb.append("\n");
             }
 
             final StringBuilder psb = new StringBuilder();
@@ -678,15 +708,14 @@ public class HttpServicePlugin extends HttpServlet {
         for (final ResourceDTO rsrc : dto.resourceDTOs) {
             final StringBuilder sb = new StringBuilder();
             final ServiceReference<?> ref = 
this.getServiceReference(rsrc.serviceId);
-            sb.append("${service.id} : 
").append(getServiceLink(rsrc.serviceId)).append("\n");
+            sb.append("${service.id} : ");
+            appendServiceLink(sb, rsrc.serviceId);
+            sb.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");
+                appendBundleLink(sb, ref.getBundle().getBundleId(), 
ref.getBundle().getSymbolicName());
+                sb.append("\n");
             }
 
             final StringBuilder psb = new StringBuilder();
@@ -716,15 +745,14 @@ public class HttpServicePlugin extends HttpServlet {
             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(getServiceLink(rsrc.serviceId)).append("\n");
+            sb.append("${service.id} : ");
+            appendServiceLink(sb, rsrc.serviceId);
+            sb.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");
+                appendBundleLink(sb, ref.getBundle().getBundleId(), 
ref.getBundle().getSymbolicName());
+                sb.append("\n");
             }
 
             final StringBuilder psb = new StringBuilder();
@@ -755,16 +783,15 @@ public class HttpServicePlugin extends HttpServlet {
         for (final ErrorPageDTO ep : dto.errorPageDTOs) {
             final StringBuilder sb = new StringBuilder();
             final ServiceReference<?> ref = 
this.getServiceReference(ep.serviceId);
-            sb.append("${service.id} : 
").append(getServiceLink(ep.serviceId)).append("\n");
+            sb.append("${service.id} : ");
+            appendServiceLink(sb, ep.serviceId);
+            sb.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");
+                appendBundleLink(sb, ref.getBundle().getBundleId(), 
ref.getBundle().getSymbolicName());
+                sb.append("\n");
             }
 
             final StringBuilder psb = new StringBuilder();
@@ -797,16 +824,15 @@ public class HttpServicePlugin extends HttpServlet {
             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(getServiceLink(ep.serviceId)).append("\n");
+            sb.append("${service.id} : ");
+            appendServiceLink(sb, ep.serviceId);
+            sb.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");
+                appendBundleLink(sb, ref.getBundle().getBundleId(), 
ref.getBundle().getSymbolicName());
+                sb.append("\n");
             }
 
             final StringBuilder psb = new StringBuilder();
@@ -839,15 +865,14 @@ public class HttpServicePlugin extends HttpServlet {
         for (final ListenerDTO ep : dto.listenerDTOs) {
             final StringBuilder sb = new StringBuilder();
             final ServiceReference<?> ref = 
this.getServiceReference(ep.serviceId);
-            sb.append("${service.id} : 
").append(getServiceLink(ep.serviceId)).append("\n");
+            sb.append("${service.id} : ");
+            appendServiceLink(sb, ep.serviceId);
+            sb.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");
+                appendBundleLink(sb, ref.getBundle().getBundleId(), 
ref.getBundle().getSymbolicName());
+                sb.append("\n");
             }
             final StringBuilder tsb = new StringBuilder();
             for(final String t : ep.types) {
@@ -875,15 +900,14 @@ public class HttpServicePlugin extends HttpServlet {
             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(getServiceLink(ep.serviceId)).append("\n");
+            sb.append("${service.id} : ");
+            appendServiceLink(sb, ep.serviceId);
+            sb.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");
+                appendBundleLink(sb, ref.getBundle().getBundleId(), 
ref.getBundle().getSymbolicName());
+                sb.append("\n");
             }
             final StringBuilder tsb = new StringBuilder();
             for(final String t : ep.types) {

Reply via email to