Proble while Persisting CQ data in the Java Content Repository
Hi All,
While persisting i am getting the below error
Please let me know what is the problem with the code
<h1>Error during include of component '/apps/test/components/page1/templateJCR'</h1><h3>Error Message:</h3><pre>org.apache.sling.api.scripting.ScriptEvaluationException: org.apache.sling.scripting.jsp.jasper.JasperException: Unable to compile class for JSP:An error occurred at line: 8 in the jsp file: /apps/test/components/page1/templateJCR/persist.json.jspcom.adobe.cq1.CustomerService cannot be resolved to a type5: String phone = request.getParameter("phone");6: String desc = request.getParameter("desc");7:8: com.adobe.cq1.CustomerService cs = sling.getService(com.adobe.cq1.CustomerService.class);9:10: int myPK = cs.injectCustData(first, last, phone, desc) ;11:An error occurred at line: 8 in the jsp file: /apps/test/components/page1/templateJCR/persist.json.jspcom.adobe.cq1.CustomerService cannot be resolved to a type5: String phone = request.getParameter("phone");6: String desc = request.getParameter("desc");7:8: com.adobe.cq1.CustomerService cs = sling.getService(com.adobe.cq1.CustomerService.class);9:10: int myPK = cs.injectCustData(first, last, phone, desc) ;11:</pre><h3>Processing Info:</h3><table style='font-family: monospace'><tr><td>Page</td><td>=</td><td>/content/test1<td></tr><tr><td>Resource Path</td><td>=</td><td>/content/test1/jcr:content<td></tr><tr><td>Cell</td><td>=</td><td>templateJCR<td></tr><tr><td>Cell Search Path</td><td>=</td><td>templateJCR|page<td></tr><tr><td>Component Path</td><td>=</td><td>/apps/test/components/page1/templateJCR<td></tr></table><h3>Sling Request Progress:</h3>
The Service interface
package com.adobe.cq1;
public interface CustomerService {
public int injectCustData(String firstName, String lastName, String phone, String desc);
}
The service implemetation
package com.adobe.cq1;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.StringWriter;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
import javax.jcr.Repository;
import javax.jcr.SimpleCredentials;
import javax.jcr.Node;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.jackrabbit.commons.JcrUtils;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import javax.jcr.RepositoryException;
import org.apache.felix.scr.annotations.Reference;
import org.apache.jackrabbit.commons.JcrUtils;
import javax.jcr.Session;
import javax.jcr.Node;
//Sling Imports
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.Resource;
//This is a component so it can provide or consume services
@Component
// This component provides the service defined through the interface
@Service
public class CustomerServiceImp implements CustomerService {
/** Default log. */
protected final Logger log = LoggerFactory.getLogger(this.getClass());
// Inject a Sling ResourceResolverFactory
@Reference
private ResourceResolverFactory resolverFactory;
private Session session;
// Stores customer data in the Adobe CQ JCR
public int injectCustData(String firstName, String lastName, String phone,
String desc) {
int num = 0;
try {
System.out.println("<<<<<<<<<<<<<<<Coming here>>>>>>>>>>");
// Invoke the adaptTo method to create a Session
ResourceResolver resourceResolver = resolverFactory
.getAdministrativeResourceResolver(null);
session = resourceResolver.adaptTo(Session.class);
// Create a node that represents the root node
Node root = session.getRootNode();
// Get the content node in the JCR
Node content = root.getNode("content");
// Determine if the content/customer node exists
Node customerRoot = null;
int custRec = doesCustExist(content);
// -1 means that content/customer does not exist
if (custRec == -1)
// content/customer does not exist -- create it
customerRoot = content.addNode("customer",
"sling:OrderedFolder");
else
// content/customer does exist -- retrieve it
customerRoot = content.getNode("customer");
int custId = custRec + 1; // assign a new id to the customer node
// Store content from the client JSP in the JCR
Node custNode = customerRoot.addNode("customer" + firstName
+ lastName + custId, "nt:unstructured");
// make sure name of node is unique
custNode.setProperty("id", custId);
custNode.setProperty("firstName", firstName);
custNode.setProperty("lastName", lastName);
custNode.setProperty("address", phone);
custNode.setProperty("desc", desc);
// Save the session changes and log out
session.save();
session.logout();
return custId;
}
catch (Exception e) {
log.error("RepositoryException: " + e);
}
return 0;
}
/*
* Determines if the content/customer node exists This method returns these
* values: -1 - if customer does not exist 0 - if content/customer node
* exists; however, contains no children number - the number of children
* that the content/customer node contains
*/
private int doesCustExist(Node content) {
try {
int index = 0;
int childRecs = 0;
java.lang.Iterable<Node> custNode = JcrUtils.getChildNodes(content,
"customer");
Iterator it = custNode.iterator();
// only going to be 1 content/customer node if it exists
if (it.hasNext()) {
// Count the number of child nodes in content/customer
Node customerRoot = content.getNode("customer");
Iterable itCust = JcrUtils.getChildNodes(customerRoot);
Iterator childNodeIt = itCust.iterator();
// Count the number of customer child nodes
while (childNodeIt.hasNext()) {
childRecs++;
childNodeIt.next();
}
return childRecs;
} else
return -1; // content/customer does not exist
} catch (Exception e) {
log.error("RepositoryException"+e);
}
return 0;
}
}
The persisi.json
<%@include file="/libs/foundation/global.jsp"%>
<%@ page import="org.apache.sling.commons.json.io.*,com.adobe.cq1.*" %><%
String first = request.getParameter("first");
String last = request.getParameter("last");
String phone = request.getParameter("phone");
String desc = request.getParameter("desc");
com.adobe.cq1.CustomerService cs = sling.getService(com.adobe.cq1.CustomerService.class);
int myPK = cs.injectCustData(first, last, phone, desc) ;
//Send the data back to the client
JSONWriter writer = new JSONWriter(response.getWriter());
writer.object();
writer.key("pk");
writer.value(myPK);
writer.endObject();
%>