我创建了一个自定义工作流程步骤,但问题是当我尝试将其添加到新工作流程时,它不会显示在列表中。
我已经按照指南进行了操作并按照描述完成了所有操作。
我找不到任何错误消息。
在Web控制台中,我可以看到我的包。每次安装时它都会正确更新,但是,当我的工作流程包可见时,服务本身不可见。因此,看起来它没有被加载出于某种原因。
注意:可能不相关但使用“路径”的servlet也不起作用(它们在控制台的捆绑中不可见)。 AEM原型附带的示例servlet工作正常,但工作方式不同(它使用resourceType而不是路径)。
此外,在Eclipse中,它表示不推荐使用Felix scr注释,并且它们通过它们有一条线。我没有使用eclipse进行构建和安装,所以我不确定这是什么问题,但我认为值得一提。
由于
编辑 - 这是一些示例代码:
package company.aem.core.workflow;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Workspace;
import org.apache.felix.scr.annotations.Component; // <--- shows up as deprecated
import org.apache.felix.scr.annotations.Properties;// <--- shows up as deprecated
import org.apache.felix.scr.annotations.Property;// <--- shows up as deprecated
import org.apache.felix.scr.annotations.Service;// <--- shows up as deprecated
import org.apache.sling.api.resource.ResourceResolver;
import org.osgi.framework.Constants;
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;
@Component // <----- this shows up as deprecated in eclipse
@Service // <----- this shows up as deprecated in eclipse
public class CommunityObjectsDeploymentWorkflow implements WorkflowProcess {
@Property(value = "Test workflow implementation") // <----- this shows up as deprecated in eclipse
static final String DESCRIPTION = Constants.SERVICE_DESCRIPTION;
@Property(value = "Some vendor") // <----- this shows up as deprecated in eclipse
static final String VENDOR = Constants.SERVICE_VENDOR;
@Property(value = "My Sample Workflow Process") // <----- this shows up as deprecated in eclipse
static final String LABEL="My test workflow";
@Override
public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap) throws WorkflowException {
Session session = (Session) workflowSession.adaptTo(Session.class);
Workspace workspace = session.getWorkspace();
try {
// do JCR related stuff
} catch (RepositoryException e) {
e.printStackTrace();
}
}
}
改变这个:
import org.apache.felix.scr.annotations.Component;
对此:
import org.osgi.service.component.annotations.Component;
现在服务正在运行,并且在Web控制台中可见。
注意:尽管其他注释在技术上已被弃用,但它们仍然有效。看起来只需要改变组件一。
要在流程编辑器中显示它,它需要 process.label 属性(使用Felix包中的Property注释),如下所示:
import org.apache.felix.scr.annotations.Property;
@Property(value = "My Sample Workflow Process")
static final String LABEL="process.label";
答案 0 :(得分:2)
任何工作流程过程都需要名称为 process.label 的属性才能显示在工作流程步骤的流程列表中。 给定的示例代码中缺少此属性。
关于Apache Felix SCR注释的弃用警告的另一个注释。这些注释已被弃用,有利于标准的OSGi声明性服务注释。
答案 1 :(得分:1)
我已经更新了原帖以及更多详细信息。问题是@Component注释导入。我正在使用Felix。我将它更改为OSGi,它在Eclipse中作为一个选项出现并且有效。
另外,要在工作流编辑器中显示自定义工作流步骤,您还需要具有 process.label 属性。我的原始代码没有,但我已经改变了它,现在也可以看到它。