AEM Servlet示例:
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.commons.json.JSONArray;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**************************************************************************************
* Java Interface Name : TrialGuideServlet
* Version : 1.0
* Created Date : 8 January 2018
* Function : This class is used for get trial guide message.
* Modification Log :
* *************************************************************************************/
@SuppressWarnings("serial")
@Component(immediate = true, description = "Controller", metatype = true)
@Service(value = javax.servlet.Servlet.class)
@Properties(value = {
@Property(name = "sling.servlet.methods", value = { "GET", "POST" }),
@Property(name = "sling.servlet.paths", value = { "/bin/trialguide" }) })
public class TrialGuideServlet extends SlingAllMethodsServlet {
Logger log = LoggerFactory.getLogger(TrialGuideServlet.class);
@Reference
SCGenericMappingService mappingService;
@SuppressWarnings("null")
@Override
protected void doGet(SlingHttpServletRequest req,
SlingHttpServletResponse response) throws ServletException,
IOException {
Boolean isSuccessful = Boolean.TRUE;
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
JSONObject returnObject = new JSONObject();
response.getWriter().println(returnObject);
}
}
注意:
必须指定:
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
IE浏览器发出的请求,如不指定,获取不到Response.
另外:get请求会被客户端缓存,如涉及到修改后的获取,可以加时间作为参数刷新数据。
6.4更新:
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.HttpConstants;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import com.adobe.cq.mcm.salesforce.SalesforceResponse;
import SFDCConnectorService;
import SFDCConnectorServiceImpl;
@Component(service = Servlet.class, immediate = true,
property = {
"sling.servlet.methods=" + HttpConstants.METHOD_GET,
"sling.servlet.paths" + "=/bin/services/test",
Constants.SERVICE_DESCRIPTION + "= AEM Service API"})
public class SFDCTest extends SlingAllMethodsServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
@Reference
SFDCConnectorService salesforceService;
final String SERVICE_PATH = "/services/data";
@Override
protected void doGet(final SlingHttpServletRequest req,
final SlingHttpServletResponse resp) throws ServletException, IOException {
// final Resource resource = req.getResource();
// resp.getWriter().write("Title = " + resource.adaptTo(ValueMap.class).get("jcr:title"));
resp.setContentType("application/json");
resp.setCharacterEncoding("UTF-8");
String message = "Test";
resp.getWriter().println(message);
if(salesforceService == null){
message = "salesforceService is null before new it";
resp.getWriter().println(message);
salesforceService = new SFDCConnectorServiceImpl();
}
SalesforceResponse salesforceResponse = salesforceService.executeRequest(SERVICE_PATH,null, null, "GET");
if(salesforceResponse == null){
message = "Salesforce response is null.";
}else{
Integer status = salesforceResponse.getCode();
if(status == 200){
message = salesforceResponse.getBody();
}else{
message = "status: "+status;
}
}
resp.getWriter().println(message);
}
}
configuration:
@ObjectClassDefinition(name="PWC salesforce connector",
description = "Properties configuration")
public static @interface Config {
@AttributeDefinition(name = "Cloud services path",
description = "This is the salesforce service path in AEM")
String cloudConfigPath() default "/etc/cloudservices/salesforce/connector";
}
@Activate
public void activate(final Config config) {
this.cloudConfigPath = config.cloudConfigPath();
}