Java 以编程方式在AEM中添加节点?

Java 以编程方式在AEM中添加节点?,java,service,aem,Java,Service,Aem,我需要使用java服务在AEM中创建一个节点。我创建了一个工作流,其中一个流程在content/dam/Test中触发一个java服务 我需要使用java服务创建一个节点还是简单地通过编程创建一个节点?工作流会话可以适应JCR会话,从那里您可以通过 有多种API可用于创建节点: 1.使用节点API 使资源适应节点 Node-Node=resource.adapto(Node.class) 然后使用函数“addNode(java.lang.String relPath,java.lang.Str

我需要使用java服务在AEM中创建一个节点。我创建了一个工作流,其中一个流程在
content/dam/Test
中触发一个java服务


我需要使用java服务创建一个节点还是简单地通过编程创建一个节点?

工作流会话可以适应JCR会话,从那里您可以通过


有多种API可用于创建节点:
1.使用节点API

  • 使资源适应节点
    Node-Node=resource.adapto(Node.class)
  • 然后使用函数“addNode(java.lang.String relPath,java.lang.String primaryNodeTypeName)”添加一个节点
    node.addNode(nodeName,NodePrimaryType)
  • 您可以使用函数“setProperty(java.lang.String name,Value)”添加属性
  • 保存会话,以便保存新节点及其属性

  • 使用JcrUtil
    JCRUtil有两个API:

    • ApacheJackrabbit 2.0-
    • 以及用于常见JCR任务的另一个实用程序-
  • 您可以通过其中任何一个来创建新节点。

    AFAIK AEM使用,因此它应该足以读取其并应用。的可能重复项
    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 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.Service;
    import org.osgi.framework.Constants;
    
    import javax.jcr.Node;
    import javax.jcr.Session;
    
    @Component
    @Service
    @Properties({@Property(name = Constants.SERVICE_DESCRIPTION, value = "Some Service")})
    public class AddTheNodeWorkflow implements WorkflowProcess {
    
        @Override
        public final void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap args) throws WorkflowException {
            try {
                final String payloadPath = getPayloadPath(workItem);
                final Session session = workflowSession.adaptTo(Session.class);
    
                // get the node for the workflow payload
                final Node payloadNode = session.getNode(payloadPath);
    
                // add the node
                final Node somenode = payloadNode.addNode("somenode");
                somenode.setProperty("myproperty", "my property value");
    
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private String getPayloadPath(WorkItem workItem) {
            return workItem.getWorkflowData().getPayload().toString();
        }
    }