【发布时间】:2017-05-25 10:17:46
【问题描述】:
我创建了一个自定义工作流程步骤,但问题是当我尝试将其添加到新工作流程时它没有显示在列表中。
我已按照指南进行操作,但无济于事。
我找不到任何错误消息。
在网络控制台中,我可以看到我的捆绑包。每次我安装它时都会正确更新它,但是,虽然我的工作流包是可见的,但服务本身是不可见的。所以,看起来它由于某种原因没有被加载。
注意:可能不相关,但使用“路径”的 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";
【问题讨论】:
标签: servlets adobe workflow aem