How to set json resource for Asset in workflow? | Community
Skip to main content
Level 4
November 9, 2022
Solved

How to set json resource for Asset in workflow?

  • November 9, 2022
  • 2 replies
  • 840 views

how to get  resourceResolver.getResource(payload) json resource while calling this method in junit? 

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 aanchal-sikka

Sharing the code to read a json resource

 

import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import javax.jcr.Binary; import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.Session; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ResourceResolverFactory; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.adobe.granite.workflow.WorkflowException; import com.adobe.granite.workflow.WorkflowSession; import com.adobe.granite.workflow.exec.WorkItem; import com.adobe.granite.workflow.exec.WorkflowProcess; import com.adobe.granite.workflow.metadata.MetaDataMap; import com.day.cq.commons.jcr.JcrConstants; @Component(service = WorkflowProcess.class, property = { "process.label=Update jcr:data binary" }) public class ReadJsonWorkflowProcess implements WorkflowProcess { private static final Logger LOG = LoggerFactory.getLogger(ReadJsonWorkflowProcess.class); @3214626 private ResourceResolverFactory resolverFactory; @9944223 public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap) { String path = getPath(workItem); ResourceResolver resolver = null; try { resolver = getResolver(workflowSession); if (null != resolver) { Resource fileResource = resolver.getResource(path); if (null != fileResource) { Node fileNode = fileResource.adaptTo(Node.class); Session session = resolver.adaptTo(Session.class); if (null != session && null != fileNode && fileNode.hasProperty(JcrConstants.JCR_DATA)) { // Fetching Json from jcr:data property InputStream jsonContent = fileNode.getProperty(JcrConstants.JCR_DATA).getBinary().getStream(); String jsonString = readJson(jsonContent); } } } } catch ( RepositoryException e) { LOG.error("Exception while updating xml:lang attribute : {}", e.getMessage()); } } ResourceResolver getResolver(WorkflowSession workflowSession) { ResourceResolver rr = workflowSession.adaptTo(ResourceResolver.class); return rr; } String getPath(WorkItem workItem) { String path = workItem.getWorkflowData().getPayload().toString() + "/" + JcrConstants.JCR_CONTENT; return path; } public String readJson(InputStream content) { String readLine; BufferedReader br = new BufferedReader(new InputStreamReader(content)); StringBuilder strBuilder = new StringBuilder(); try { while (((readLine = br.readLine()) != null)) { strBuilder.append(readLine); } } catch (IOException e) { LOG.error("IOException while reading InputStream into String : {}", e.getMessage()); } return strBuilder.toString(); } }

2 replies

Manu_Mathew_
Community Advisor
Community Advisor
November 9, 2022

@karthick1356 

You could probably do that using the AemContext object.

...
private AemContext context = new AemContext(ResourceResolverType.RESOURCERESOLVER_MOCK);

...
/* Getting Resolver from current AemContext */ ResourceResolver resourceResolver = context.request().getResourceResolver();
resourceResolver.getResource(payload)

 

Level 4
November 10, 2022

i'm trying to get json as resource.

aanchal-sikka
Community Advisor
aanchal-sikkaCommunity AdvisorAccepted solution
Community Advisor
February 24, 2024

Sharing the code to read a json resource

 

import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import javax.jcr.Binary; import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.Session; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ResourceResolverFactory; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.adobe.granite.workflow.WorkflowException; import com.adobe.granite.workflow.WorkflowSession; import com.adobe.granite.workflow.exec.WorkItem; import com.adobe.granite.workflow.exec.WorkflowProcess; import com.adobe.granite.workflow.metadata.MetaDataMap; import com.day.cq.commons.jcr.JcrConstants; @Component(service = WorkflowProcess.class, property = { "process.label=Update jcr:data binary" }) public class ReadJsonWorkflowProcess implements WorkflowProcess { private static final Logger LOG = LoggerFactory.getLogger(ReadJsonWorkflowProcess.class); @3214626 private ResourceResolverFactory resolverFactory; @9944223 public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap) { String path = getPath(workItem); ResourceResolver resolver = null; try { resolver = getResolver(workflowSession); if (null != resolver) { Resource fileResource = resolver.getResource(path); if (null != fileResource) { Node fileNode = fileResource.adaptTo(Node.class); Session session = resolver.adaptTo(Session.class); if (null != session && null != fileNode && fileNode.hasProperty(JcrConstants.JCR_DATA)) { // Fetching Json from jcr:data property InputStream jsonContent = fileNode.getProperty(JcrConstants.JCR_DATA).getBinary().getStream(); String jsonString = readJson(jsonContent); } } } } catch ( RepositoryException e) { LOG.error("Exception while updating xml:lang attribute : {}", e.getMessage()); } } ResourceResolver getResolver(WorkflowSession workflowSession) { ResourceResolver rr = workflowSession.adaptTo(ResourceResolver.class); return rr; } String getPath(WorkItem workItem) { String path = workItem.getWorkflowData().getPayload().toString() + "/" + JcrConstants.JCR_CONTENT; return path; } public String readJson(InputStream content) { String readLine; BufferedReader br = new BufferedReader(new InputStreamReader(content)); StringBuilder strBuilder = new StringBuilder(); try { while (((readLine = br.readLine()) != null)) { strBuilder.append(readLine); } } catch (IOException e) { LOG.error("IOException while reading InputStream into String : {}", e.getMessage()); } return strBuilder.toString(); } }
Aanchal Sikka