Calling Service in component | Community
Skip to main content
varuns46785756
New Participant
February 26, 2016
Solved

Calling Service in component

  • February 26, 2016
  • 16 replies
  • 5437 views

Hi,

I am trying to call Service from my component and my service return json data, but when I am trying to call the service from Component , I am getting error.Please let me know how can I call the json data in my component jsp.

Please find attached my interface and implementation class.I am trying to call :

<%
com.petco.www.core.service.servlets.IContentService servicedata = sling.getService(com.petco.www.core.service.servlets.IContentService.class);
%>

<%=servicedata.getContent(String path)%>

CODE:

package com.abc.www.core.service.servlets;

import java.io.IOException;

import javax.jcr.RepositoryException;

import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;

import com.petco.www.core.service.exceptions.ContentServiceExceptions;

/*
 * This is an interface class to retrieve content from the AEM Services. This interface will be invoked by different channel 
 * to get content using AEM services
 * 
 
 */

public interface IContentService {
    
    /**
     * This method will be invoked to get the content from AEM services.
     * 
     * @param pageType
     * @param path
     * @return String
     */
    public JSONObject getContent(String path) 
            throws ContentServiceExceptions,RepositoryException,IOException,JSONException;
}

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 Jitendra_S_Toma

iNTERFACE HAS METHOD WITH STRING.

<%
com.abc.www.core.service.servlets.IContentService servicedata = sling.getService(com.abc.www.core.service.servlets.IContentService.class);

JSONObject finalJsonObjects = servicedata.getContent(); // ARGUMENT IS MISSING HERE. YOUR SHOULD PASS SOMETHING HERE.

%>

16 replies

varuns46785756
New Participant
March 4, 2016

thanks Jitendra, 

its working , thank you :)

Jitendra_S_Toma
New Participant
February 29, 2016

Hey Varun,

You don't have annotations at the getContent() method. That's the reason, service is not able to identify this method. Just just @Override above this method and try.

@Override public JSONObject getContent(String path) throws ContentServiceExceptions, RepositoryException, IOException, JSONException { methodName = "getContent()"; // if block will be executed if path object is null or empty if(ContentServiceUtil.isEmpty(path)){ throw new ContentServiceExceptions("["+className+"."+methodName+"] "+ContentServiceConstants.EMPTY_PATH_TYPE_ERROR_MSG); } jsonContent = getStaticContent(path); return jsonContent; }

-----------------------------------------------------------------------------------------------

--------Jitendra

varuns46785756
New Participant
February 29, 2016

please find attached ContentService.java class

varuns46785756
New Participant
February 29, 2016
IContentService.java : interface ---------------------------------- package com.abc.www.core.service.servlets; import java.io.IOException; import javax.jcr.RepositoryException; import org.apache.sling.commons.json.JSONException; import org.apache.sling.commons.json.JSONObject; import com.abc.www.core.service.exceptions.ContentServiceExceptions; public interface IContentService { public JSONObject getContent(String path) throws ContentServiceExceptions,RepositoryException,IOException,JSONException; }
component jsp ----------------- <%@include file="/libs/foundation/global.jsp"%> <%@ page import="org.apache.sling.commons.json.io.*,org.w3c.dom.*" %> <%@taglib prefix="cq" uri="http://www.day.com/taglibs/cq/1.0" %> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@page import="com.abc.www.core.service.servlets.IContentService,org.apache.sling.commons.json.JSONException,org.apache.sling.commons.json.JSONObject"%> <%@ page import="org.apache.sling.commons.json.io.*,com.adobe.cq.*" %> <% com.abc.www.core.service.servlets.IContentService servicedata = sling.getService(com.abc.www.core.service.servlets.IContentService.class); JSONObject jsobject= servicedata.getContent(path); %>
Jitendra_S_Toma
New Participant
February 29, 2016

Provide code of interface & your Implementation. Also mention component jsp where service method is being invoked.

---Jitendra

edubey
New Participant
February 28, 2016

1. Make sure you pass parameter as the method in interface accepts the parameter.

2. Have jar file in your maven pom which helps you to use JSONObject 

3. import json that class in jsp

varuns46785756
New Participant
February 28, 2016

Hi,

I have created new new package in new AEM instance , I have tested ,

upto calling service nothing is wrong


com.abc.www.core.service.servlets.IContentService servicedata = sling.getService(com.abc.www.core.service.servlets.IContentService.class);

(I am getting error when I am adding " JSONObject finalJsonObjects = servicedata.getContent(); " 

:I have tested with passing parameter also but getting the error:"

"Only a type can be imported" and 
"The method getContent(String) in the type IContentService is not applicable for the arguments ().."

 

:Return type in my service class is JSONObject and problem is only with my way to call the jsonobject. with this line: "JSONObject finalJsonObjects = servicedata.getContent();"

Please let me know how can I call JSONObject in my component jsp.

 

Regards,

 

 

 

%>

smacdonald2008
New Participant
February 26, 2016

Here is a community article that may help what is going on: 

http://www.wemblog.com/2013/05/how-to-perform-system-clean-up-in-adobe.html

I suspect that your project has issues as described in the article. 

To see if this is an issue- try installing your project on a fresh instance of AEM. 

Jitendra_S_Toma
Jitendra_S_TomaAccepted solution
New Participant
February 26, 2016

iNTERFACE HAS METHOD WITH STRING.

<%
com.abc.www.core.service.servlets.IContentService servicedata = sling.getService(com.abc.www.core.service.servlets.IContentService.class);

JSONObject finalJsonObjects = servicedata.getContent(); // ARGUMENT IS MISSING HERE. YOUR SHOULD PASS SOMETHING HERE.

%>

smacdonald2008
New Participant
February 26, 2016

As i stated - try to place service in new package and try again. Sometimes package conflicts occur. 

However - your code is correct in terms of calling a service. I think its a package issue. I have seen that before.