Author: cziegeler
Date: Fri Mar 31 09:38:12 2017
New Revision: 1789646
URL: http://svn.apache.org/viewvc?rev=1789646&view=rev
Log:
SLING-6760 : Improve logging if servlet can't be get from the registry
Modified:
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java
Modified:
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java?rev=1789646&r1=1789645&r2=1789646&view=diff
==============================================================================
---
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
(original)
+++
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
Fri Mar 31 09:38:12 2017
@@ -964,31 +964,29 @@ public class SlingServletResolver
}
}
- private boolean createServlet(final ServiceReference<Servlet> reference) {
+ private boolean createServlet(final ServiceReference<Servlet> reference) {
// check for a name, this is required
final String name = getName(reference);
- if (name == null) {
- LOGGER.error("bindServlet: Cannot register servlet {} without a
servlet name", reference);
- return false;
- }
// check for Sling properties in the service registration
- ServletResourceProvider provider =
servletResourceProviderFactory.create(reference);
+ final ServletResourceProvider provider =
servletResourceProviderFactory.create(reference);
if (provider == null) {
// this is expected if the servlet is not destined for Sling
return false;
}
// only now try to access the servlet service, this may still fail
+ Throwable exception = null;
Servlet servlet = null;
try {
servlet = context.locateService(REF_SERVLET, reference);
} catch (Throwable t) {
- LOGGER.warn("bindServlet: Failed getting the service for reference
" + reference, t);
+ exception = t;
}
if (servlet == null) {
- LOGGER.error("bindServlet: Servlet service not available from
reference {}", reference);
+ LOGGER.error("bindServlet: Servlet service not available from
reference "
+ +
ServletResourceProviderFactory.getServiceReferenceInfo(reference), exception);
return false;
}
@@ -998,12 +996,12 @@ public class SlingServletResolver
// initialize now
try {
servlet.init(new SlingServletConfig(servletContext, reference,
name));
- LOGGER.debug("bindServlet: Servlet {} added", name);
+ LOGGER.debug("bindServlet: Servlet {} initialized", name);
} catch (ServletException ce) {
- LOGGER.error("bindServlet: Component " + name + " failed to
initialize", ce);
+ LOGGER.error("bindServlet: Servlet " +
ServletResourceProviderFactory.getServiceReferenceInfo(reference) + " failed to
initialize", ce);
return false;
} catch (Throwable t) {
- LOGGER.error("bindServlet: Unexpected problem initializing
component " + name, t);
+ LOGGER.error("bindServlet: Unexpected problem initializing servlet
" + ServletResourceProviderFactory.getServiceReferenceInfo(reference), t);
return false;
}
@@ -1016,7 +1014,9 @@ public class SlingServletResolver
createServiceProperties(reference, provider, root));
regs.add(reg);
}
- LOGGER.debug("Registered {}", provider.toString());
+ if ( LOGGER.isDebugEnabled() ) {
+ LOGGER.debug("Registered {}", provider.toString());
+ }
synchronized (this.servletsByReference) {
servletsByReference.put(reference, new ServletReg(servlet, regs));
}
@@ -1107,6 +1107,7 @@ public class SlingServletResolver
* Looks for a name value in the service reference properties. See the
* class comment at the top for the list of properties checked by this
* method.
+ * @return The servlet name. This method never returns {@code null}
*/
private static String getName(final ServiceReference<Servlet> reference) {
String servletName = null;
Modified:
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java?rev=1789646&r1=1789645&r2=1789646&view=diff
==============================================================================
---
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java
(original)
+++
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java
Fri Mar 31 09:38:12 2017
@@ -20,10 +20,12 @@ package org.apache.sling.servlets.resolv
import static
org.apache.sling.api.servlets.ServletResolverConstants.SLING_SERVLET_EXTENSIONS;
import static
org.apache.sling.api.servlets.ServletResolverConstants.SLING_SERVLET_METHODS;
+import static
org.apache.sling.api.servlets.ServletResolverConstants.SLING_SERVLET_NAME;
import static
org.apache.sling.api.servlets.ServletResolverConstants.SLING_SERVLET_PATHS;
import static
org.apache.sling.api.servlets.ServletResolverConstants.SLING_SERVLET_PREFIX;
import static
org.apache.sling.api.servlets.ServletResolverConstants.SLING_SERVLET_RESOURCE_TYPES;
import static
org.apache.sling.api.servlets.ServletResolverConstants.SLING_SERVLET_SELECTORS;
+import static org.osgi.service.component.ComponentConstants.COMPONENT_NAME;
import java.util.HashSet;
import java.util.Set;
@@ -33,9 +35,9 @@ import javax.servlet.Servlet;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.servlets.HttpConstants;
import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
-import org.osgi.service.component.ComponentConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -132,14 +134,14 @@ public class ServletResourceProviderFact
if (log.isDebugEnabled()) {
log.debug(
"create({}): ServiceReference has no registration
settings, ignoring",
- getServiceIdentifier(ref));
+ getServiceReferenceInfo(ref));
}
return null;
}
if (log.isDebugEnabled()) {
log.debug("create({}): Registering servlet for paths {}",
- getServiceIdentifier(ref), pathSet);
+ getServiceReferenceInfo(ref), pathSet);
}
return new ServletResourceProvider(pathSet);
@@ -172,7 +174,7 @@ public class ServletResourceProviderFact
if ( !isNumber ) {
if (log.isDebugEnabled()) {
log.debug("getPrefix({}): Configuration property is
ignored {}",
- getServiceIdentifier(ref), value);
+ getServiceReferenceInfo(ref), value);
}
if ( this.servletRoot != null ) {
return this.servletRoot;
@@ -221,7 +223,7 @@ public class ServletResourceProviderFact
if (types == null || types.length == 0) {
if (log.isDebugEnabled()) {
log.debug("addByType({}): no resource types declared",
- getServiceIdentifier(ref));
+ getServiceReferenceInfo(ref));
}
return;
}
@@ -244,7 +246,7 @@ public class ServletResourceProviderFact
if (log.isDebugEnabled()) {
log.debug(
"addByType({}): No methods declared, assuming
GET/HEAD",
- getServiceIdentifier(ref));
+ getServiceReferenceInfo(ref));
}
methods = DEFAULT_SERVLET_METHODS;
}
@@ -252,7 +254,7 @@ public class ServletResourceProviderFact
} else if (methods.length == 1 && ALL_METHODS.equals(methods[0])) {
if (log.isDebugEnabled()) {
log.debug("addByType({}): Assuming all methods for '*'",
- getServiceIdentifier(ref));
+ getServiceReferenceInfo(ref));
}
methods = null;
}
@@ -315,18 +317,69 @@ public class ServletResourceProviderFact
}
}
- private String getServiceIdentifier(ServiceReference<Servlet> ref) {
- Object id = ref.getProperty(ComponentConstants.COMPONENT_NAME);
- if (id != null) {
- return id.toString();
+ public static String getServiceReferenceInfo(final
ServiceReference<Servlet> reference) {
+ final StringBuilder sb = new StringBuilder("service ");
+ sb.append(String.valueOf(reference.getProperty(Constants.SERVICE_ID)));
+ final Object servletName = reference.getProperty(SLING_SERVLET_NAME);
+ final Object pid = reference.getProperty(Constants.SERVICE_PID);
+ Object componentName = reference.getProperty(COMPONENT_NAME);
+ if ( pid != null && pid.equals(componentName) ) {
+ componentName = null;
+ }
+ if ( servletName != null || pid != null || componentName != null ) {
+ sb.append(" (");
+ boolean needsComma = false;
+ if ( servletName != null ) {
+ sb.append("name=");
+ sb.append(servletName);
+ needsComma = true;
+ }
+ if ( pid != null ) {
+ if ( needsComma ) {
+ sb.append(", ");
+ }
+ sb.append("pid=");
+ sb.append(pid);
+ needsComma = true;
+ }
+ if ( componentName != null ) {
+ if ( needsComma ) {
+ sb.append(", ");
+ }
+ sb.append("component=");
+ sb.append(componentName);
+ needsComma = true;
+ }
+ sb.append(")");
+ }
+ sb.append(" from ");
+ final Bundle bundle = reference.getBundle();
+ if ( bundle == null ) {
+ sb.append("uninstalled bundle");
+ } else {
+ sb.append("bundle ");
+ if ( bundle.getSymbolicName() == null ) {
+ sb.append(String.valueOf(bundle.getBundleId()));
+ } else {
+ sb.append(bundle.getSymbolicName());
+ sb.append(":");
+ sb.append(bundle.getVersion());
+ sb.append(" (");
+ sb.append(String.valueOf(bundle.getBundleId()));
+ sb.append(") ");
+ }
}
-
- id = ref.getProperty(Constants.SERVICE_PID);
- if (id != null) {
- return id.toString();
+ final String[] ocs = (String[]) reference.getProperty("objectClass");
+ if ( ocs != null ) {
+ sb.append("[");
+ for(int i = 0; i < ocs.length; i++) {
+ sb.append(ocs[i]);
+ if (i < ocs.length - 1) {
+ sb.append(", ");
+ }
+ }
+ sb.append("]");
}
-
- // service.id is guaranteed to be set by the framework
- return ref.getProperty(Constants.SERVICE_ID).toString();
+ return sb.toString();
}
}