unable to use OSGi @Component if I'm using import com.day.cq.wcm.api.components.Component | Community
Skip to main content
Level 3
August 20, 2018
Solved

unable to use OSGi @Component if I'm using import com.day.cq.wcm.api.components.Component

  • August 20, 2018
  • 3 replies
  • 1962 views

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 Vissersmacdonald2008Arun Patidar

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by arunpatidar

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

3 replies

arunpatidar
Community Advisor
arunpatidarCommunity AdvisorAccepted solution
Community Advisor
August 20, 2018

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

Arun Patidar
Feike_Visser1
Adobe Employee
Adobe Employee
August 20, 2018

that was also going to be my suggestion

Level 3
August 20, 2018

Thanks Arun. It's working.