AEM工作流:getModel()方法抛出null值

时间:2016-05-27 10:56:14

标签: cq5 aem

我在工作流控制台中创建了一个新的工作流模型,并尝试使用service访问它。从jsp我将工作流名称作为/etc/workflow/models/DeleteNode/jcr:content/model传递,遵循AEM docs中提到的格式。但是当{I}尝试从我通过的路径中获取模型时,WorkFlowModel会抛出空值。

下面是我写的服务:

package com.aem.sample.workflow;
import java.util.Calendar;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.StringWriter;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
import java.io.InputStream;    
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 org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.jcr.api.SlingRepository;    
import javax.jcr.Session;
import javax.jcr.Node; 

//Adobe CQ Workflow APIs
import com.day.cq.workflow.model.WorkflowModel ; 
import com.day.cq.workflow.WorkflowService ; 
import com.day.cq.workflow.WorkflowSession; 
import com.day.cq.workflow.exec.WorkflowData; 

//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

@Service
public class InvokeAEMWorkflowImp implements InvokeAEMWorkflow {

    @Reference
    private WorkflowService workflowService;

    private Session session;

    @Reference
    private ResourceResolverFactory resolverFactory;



@Override
public String StartWorkflow(String workflowName, String workflowContent) {

try
{
    //Invoke the adaptTo method to create a Session 
    ResourceResolver resourceResolver = resolverFactory.getAdministrativeResourceResolver(null);
    session = resourceResolver.adaptTo(Session.class);

 //Create a workflow session 
  WorkflowSession wfSession = workflowService.getWorkflowSession(session);

 // Get the workflow model
WorkflowModel wfModel = wfSession.getModel(workflowName); 

  // Get the workflow data
  // The first param in the newWorkflowData method is the payloadType.  Just a fancy name to let it know what type of workflow it is working with.
 WorkflowData wfData = wfSession.newWorkflowData("JCR_PATH", workflowContent);

   // Run the Workflow.
    wfSession.startWorkflow(wfModel, wfData);

   return workflowName +" has been successfully invoked on this content: "+workflowContent ; 
    }
catch(Exception e)
{
    e.printStackTrace();
}

return null;
 }
}

0 个答案:

没有答案