unsatisfied (reference) Error | Community
Skip to main content
Level 2
May 10, 2018
Solved

unsatisfied (reference) Error

  • May 10, 2018
  • 5 replies
  • 3085 views

Creating a Java file to convert the Crx data in to xml based on few condition for RSS so i have created a below java file. but i a m facing error ( unsatisfied (reference)). As i am new to AEM i am not able to find the fix for this..error message attached..http://

**************************

package com.hmi.aem.component;

import java.io.File;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import javax.annotation.Nonnull;

import javax.jcr.RepositoryException;

import javax.jcr.Session;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.transform.OutputKeys;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import java.io.IOException;

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 java.util.Dictionary;

import org.apache.sling.api.resource.ResourceResolver;

import org.apache.sling.api.resource.ValueMap;

import org.osgi.service.cm.Configuration;

import org.osgi.service.cm.ConfigurationAdmin;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import com.day.cq.search.Query;

import com.day.cq.search.QueryBuilder;

import com.day.cq.search.result.Hit;

import com.day.cq.search.result.SearchResult;

import com.day.cq.wcm.api.NameConstants;

import com.hmi.constants.AppConstant;

import com.day.cq.replication.Replicator;

import com.day.cq.search.PredicateGroup;

@Component(metatype = true)

@Service(Runnable.class)

@Properties({ @Property(name = "enableService", boolValue = false, label = "Enable/Disable", description = "Tick to Enable Service"),

                @Property(name = "scheduler.expression", description = "CRON Expression for frequency of Execution", label = "Frequency")})

public class TopNewsService implements Runnable {

/** The Constant LOGGER. */

private static final Logger LOGGER = LoggerFactory.getLogger(TopNewsService.class);

public static final String TAG_ID = "tagid";

private static final String PROPERTIES = "jcr:path jcr:content/jcr:title jcr:content/jcr:description jcr:content/cq:lastReplicated jcr:content/ownername";

private static final String PATH = "/etc/insidedata/NewsFeed.xml";

/** The resource resolver. */

@Reference

private ResourceResolver resourceResolver;

@Reference

private QueryBuilder builder;

@Reference

private Session session;

@Reference

private Replicator replicator;

@Reference

    private ConfigurationAdmin configurationAdmin;

private Boolean serviceEnabled;

public Document document;

public void run() {

LOGGER.info("STARTING THE DOCUMENT SERVICE...");

DocumentBuilderFactory documentbuilderfactory = DocumentBuilderFactory.newInstance();

DocumentBuilder documentbuilder;

try {

documentbuilder = documentbuilderfactory.newDocumentBuilder();

document = documentbuilder.newDocument();

Session session = initiliazeSession();

        List<Hit> resultHits = executeQueryAndReturnPageResults();

        for(Hit currentHit : resultHits){

        if (serviceEnabled && null != session && null != currentHit) {

            passingValue(session,resultHits);

        }

     

        }

LOGGER.info("PASS VALUE : PASSING VALUE...");

// output DOM XML to console

DOMSource source = new DOMSource(document);

StreamResult console = new StreamResult(new File(PATH));

Transformer transformer = TransformerFactory.newInstance().newTransformer();

transformer.setOutputProperty(OutputKeys.INDENT, "yes");

transformer.transform(source, console);

LOGGER.info("SOURCE FILE : PASSING VALUE..." + source);

// Output to console for testing

StreamResult consoleResult = new StreamResult(System.out);

transformer.transform(source, consoleResult);

} catch (TransformerException e) {

e.printStackTrace();

} catch (ParserConfigurationException e) {

e.printStackTrace();

}

}

void passingValue(@Nonnull Session session,@Nonnull List<Hit> resultHits) {

try {

resultHits = executeQueryAndReturnPageResults();

for (Hit currentPageResult : resultHits) {

ValueMap currentPageValues = currentPageResult.getProperties();

String pageTitle = currentPageValues.get("jcr:content/jcr:title", " ");

String pageDescription = currentPageValues.get("jcr:content/jcr:description", " ");

String publicationDate = currentPageValues.get("jcr:content/cq:lastReplicated"," ");

String ownerName = currentPageValues.get("jcr:content/ownername"," ");

appendtoXML(pageTitle, pageDescription, publicationDate, ownerName);

session.save();

session.logout();

}

} catch (Exception e) {

}

}

void appendtoXML(String pageTitle, String pageDescription, String publicationDate, String ownerName) {

try {

Element titleElement = document.createElement("Title_Feeds");

titleElement.appendChild(document.createTextNode(pageTitle));

Element pageElement = document.createElement("Page_Description");

pageElement.appendChild(document.createTextNode(pageDescription));

Element publicationElement = document.createElement("Publication_Date");

publicationElement.appendChild(document.createTextNode(publicationDate));

Element ownerNameElement = document.createElement("Owner_Name");

ownerNameElement.appendChild(document.createTextNode(ownerName));

} catch (Exception e) {

}

}

Session initiliazeSession(){

Dictionary<String, Object> propertyMap;

        try {

            Configuration configuration = configurationAdmin.getConfiguration(this.getClass().getCanonicalName());

            propertyMap = configuration.getProperties();

            if (!propertyMap.isEmpty()) {

                String serviceEnabledString = propertyMap.get("enableService").toString();

                if (("true").equalsIgnoreCase(serviceEnabledString)) {

                    setServiceEnabled(true);

                }

            }

        }catch (IOException e) {

        throw new InsideException(e);

}

        return null;

}

List<Hit> executeQueryAndReturnPageResults() {

Map<String, String> pageMap = new HashMap<>();

pageMap.put(AppConstant.TYPE_PROPERTY, NameConstants.NT_PAGE);

pageMap.put(TAG_ID, AppConstant.Global_TOP_NEWS_NODE);

pageMap.put("tagid.property", "jcr:content/cq:tags");

pageMap.put("p.hits", "selective");

pageMap.put("p.properties", PROPERTIES);

pageMap.put("p.limit", "-1");

Query query = getBuilder().createQuery(PredicateGroup.create(pageMap), getSession());

SearchResult searchResult = query.getResult();

return searchResult.getHits();

}

public Replicator getReplicator() {

return replicator;

}

public void setReplicator(Replicator replicator) {

this.replicator = replicator;

}

public ResourceResolver getResourceResolver() {

return resourceResolver;

}

public void setResourceResolver(ResourceResolver resourceResolver) {

this.resourceResolver = resourceResolver;

}

public QueryBuilder getBuilder() {

return builder;

}

public void setBuilder(QueryBuilder builder) {

this.builder = builder;

}

public Session getSession() {

return session;

}

public void setSession(Session session) {

this.session = session;

}

public ConfigurationAdmin getConfigurationAdmin() {

return configurationAdmin;

}

public void setConfigurationAdmin(ConfigurationAdmin configurationAdmin) {

this.configurationAdmin = configurationAdmin;

}

public Boolean getServiceEnabled() {

return serviceEnabled;

}

public void setServiceEnabled(Boolean serviceEnabled) {

this.serviceEnabled = serviceEnabled;

}

}

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 smacdonald2008

I took your code and placed it into a Maven 10 Arch project as you are using felix SCR annotations. (Maven 10 still uses these annotations -- org.apache.felix.scr.annotations.Component).

Adobe Experience Manager Help | Creating your first Adobe Experience Manager 6.2 Project using Adobe Maven Archetype 10

I made a few code changes - like removed the @nonnull - AEM does not like that.

I updated the POM dependencies to run on 6.3 - as shown in this video

Here is my result....

5 replies

smacdonald2008
Level 10
May 10, 2018

How did you create this code? Please explain your steps on how to created the OSGi bundle.

YOu should be using an Adobe Maven Archetype project and use the UBER JAR that corresponds to the version of AEM.

For example - see this artilce to learn how to use Maven Archetype 11 and UBER JAR for 6.3 -- Scott's Digital Community: Creating an Adobe Experience Manager 6.3 Project using Adobe Maven Archetype 11

smacdonald2008
Level 10
May 10, 2018

See this AEM Artilce for 6.4. Its a similiar use case - we are querying the JCR and placing the data into XML to display it within a JQuery plug-in. It will help you -- Scott's Digital Community: Querying Adobe Experience Manager 6.4 JCR data

smacdonald2008
smacdonald2008Accepted solution
Level 10
May 10, 2018

I took your code and placed it into a Maven 10 Arch project as you are using felix SCR annotations. (Maven 10 still uses these annotations -- org.apache.felix.scr.annotations.Component).

Adobe Experience Manager Help | Creating your first Adobe Experience Manager 6.2 Project using Adobe Maven Archetype 10

I made a few code changes - like removed the @nonnull - AEM does not like that.

I updated the POM dependencies to run on 6.3 - as shown in this video

Here is my result....

Level 2
May 11, 2018

Could you please suggest me in which i can proceed.

my requirement is to convert AEM data in to xml

smacdonald2008
Level 10
May 11, 2018

To convert AEM JCR data - you need to QUery the JCR data, then use Java XML classes to convert the data to XML - this is all explained in this article -- Scott's Digital Community: Querying Adobe Experience Manager 6.4 JCR data