Hi All,
I'm migrating from felix to OSGI annotations. In one of my servlet I'm trying to use @Component (OSGI annoation) instead of @Slingservlet. But it's throwing an error The import com.day.cq.wcm.api.components.Component collides with another import statement. In my servlet I have already used wcm api component , so now i'm unable to use OSGI @Component. Below is my sample code. Can any one help me to fix this? Appreciate your help.
import com.day.cq.wcm.api.components.Component;
import com.day.cq.wcm.api.components.ComponentManager;
import com.google.common.collect.ImmutableMap;
import com.google.gson.Gson;
import java.io.IOException;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.GregorianCalendar;
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.osgi.service.component.annotations.Component;
@Component(service = {Servlet.class},
property = {
"sling.servlet.resourceTypes=" + "sling/servlet/default",
"sling.servlet.selectors=" + "referencepreview",
"sling.servlet.methods=" + "GET",
"sling.servlet.extensions=" + "json"
})
public class ReferencePreviewServlet extends SlingSafeMethodsServlet {
private static final DateTimeFormatter DATE_TIME_FORMATTER =
DateTimeFormatter.ofPattern("dd.MM.YYYY HH:mm");
@Override
protected void doGet(@Nonnull SlingHttpServletRequest request,
@Nonnull SlingHttpServletResponse response) throws ServletException, IOException {
response.setContentType(FileType.JSON.getMimeType());
ComponentManager componentManager =
request.getResourceResolver().adaptTo(ComponentManager.class);
@SuppressWarnings({"ComponentManager can not be null", "squid:S2259", "ConstantConditions"})
Component component = componentManager.getComponentOfResource(request.getResource());
if (component == null) {
new Gson().toJson(ImmutableMap.of("renderable", false), response.getWriter());
return;
}
ValueMap properties = request.getResource().getValueMap();
Map<String, String> propertyMap = properties.keySet().stream()
.filter(this::excludeSystemProperties).map(key -> Pair.of(key, properties.get(key)))
.map(this::getFormattedPair).collect(Collectors.toMap(Pair::getKey, Pair::getValue));
new Gson()
.toJson(
ImmutableMap.of("renderable", true, "name",
StringUtils.defaultString(component.getTitle()), "properties", propertyMap),
response.getWriter());
}
Thanks,
Vijay
Feike Visser smacdonald2008 Arun Patidar
Solved! Go to Solution.
Views
Replies
Total Likes
Hi,
remove import com.day.cq.wcm.api.components.Component and change your line of code like below:
com.day.cq.wcm.api.components.Component component = componentManager.getComponentOfResource(request.getResource());
Thanks
Arun
Views
Replies
Total Likes
Hi,
remove import com.day.cq.wcm.api.components.Component and change your line of code like below:
com.day.cq.wcm.api.components.Component component = componentManager.getComponentOfResource(request.getResource());
Thanks
Arun
Views
Replies
Total Likes
that was also going to be my suggestion
Views
Replies
Total Likes
Thanks Arun. It's working.
Views
Replies
Total Likes
Views
Likes
Replies