All i have a workflow process step and it references class A that exposes a service, but when i check for the value of A in the process step, it appears to be null,
i am injecting this service A using the @Reference.
Solved! Go to Solution.
Views
Replies
Total Likes
So Scott, i finally have a response and after consultation and weeks of debugging assuming i was doing something wrong for something that is so simple,
i am asked (by adobe) to avoid using @reference in abstract classes , and this worked on 6.2 and is something that breaks in 6.4, , with bunch of scr annotation errors and components appear to be in satisfied state
Infact abstract keyword for a service at times sets the component to state "16", solution - remove abstract keyword
If you have nested inheritance and a class that is abstract and implement workflowprocess, keep it simple, take off abstract keyword and avoid inheritance since if a child class(extending parent class that implements workflow process) is invoked the annotations of the parent class is null, so just keep child class that implements workflowprocess and avoid inheritance where the parent class uses annotation and no abstract keyword.
Anyone?
Hi,
Which annotation are you using Felix or Osgi?
How did you created your service? Are you able to see your service at http://localhost:4502/system/console/services
I created a Demo Process and shared with you which include Reference to my custom service HandleSession and I am able to get the Service reference inside workflow process.
Thanks
Arun
Views
Replies
Total Likes
I used the OSGI, yes i see the service as well. Sent the code over, its a custom service and not OOTB so i am not sure if that affects anything.
I took off the @Reference annotation and just instantiated the class and it worked fine. i wonder why the annotation would not work within a workflow.
I do see errors as well, could this be related?
[com.adobe.granite.workflow.core.job.ExternalProcessPollingHandler(917)] : Could not get service from ref [com.adobe.granite.workflow.exec.WorkflowProcess]
15.06.2018 20:10:15.785 *WARN* [FelixStartLevel] com.adobe.granite.workflow.core bundle com.adobe.granite.workflow.core:2.0.168 (275)[com.adobe.granite.workflow.core.job.ExternalProcessPollingHandler(917)] : DependencyManager : invokeUnbindMethod : Service not available from service registry for ServiceReference [com.adobe.granite.workflow.exec.WorkflowProcess] for reference WorkflowProcess
15.06.2018 20:10:15.785 *ERROR* [FelixStartLevel] com.test.core bundle com.test.core:1.5.10.SNAPSHOT (1033)[com.test.core.workflows.BaseWorkflowProcess(3632)] : Error during instantiation of the implementation object: null
15.06.2018 20:10:15.785 *ERROR* [FelixDispatchQueue] com.adobe.granite.workflow.core FrameworkEvent ERROR (org.osgi.framework.ServiceException: Service factory returned null. (Component: com.test.core.workflows.BaseWorkflowProcess (3632)))
org.osgi.framework.ServiceException: Service factory returned null. (Component: com.test.core.workflows.BaseWorkflowProcess (3632))
Views
Replies
Total Likes
I also tried @Reference ResourceResolverFactory rrf; and it appears to be null as well, so curious if @reference throws null for some unknown reason>
Hi,
Check below article with same kind of issue, something may be wrong with service
Could you please check the sample code to Create Service WorkflowProcess and invoked using @Reference inside Process Step
aem63app-repo/demo at master · arunpatidar02/aem63app-repo · GitHub
Thanks
Arun
Will be logging a ticket with Adobe,
Created classes as you've shared and weird issues were noted
1. With @reference annotation, custom workflow process (java)step did not appear in the dropdown for the workflow
2.Without @Reference annotation, the process step java class was visible.
What Annotations are you using - DS Annotations or Felix Src annotations.
Post some of your code - including your import statements - that will tell us exactly what you are trying to do. I do not believe using @Reference ins a custom workflow step has an issue.
Views
Replies
Total Likes
I got this to work with Maven Arch 13 and i have also created a nice video. Scott's Digital Community: Learn how to use DS Annotations and Inject a custom AEM Service into a Cu...
Views
Replies
Total Likes
Sure thanks i believe i used maven arch 13, but i am attaching the code here
package com.test.core.workflows.general;
public interface DemoWFService {
public String showMessage(String msg);
}
------------------------------------
package com.test.core.workflows.general;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DemoWFServiceImpl implements DemoWFService {
protected final Logger log = LoggerFactory.getLogger(this.getClass());
String PrefixMessage = "Service Invoked by Workflow -- ";
@Override
public String showMessage(String msg) {
return PrefixMessage+msg;
}
}
------------------------
package com.test.core.workflows.general;
import org.osgi.framework.Constants;
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;
@Component(immediate = false,service= WorkflowProcess.class, property={
Constants.SERVICE_DESCRIPTION + "=Test.",
Constants.SERVICE_VENDOR + "=Test",
"process.label" + "=Test"
})
public class WFProcessStep implements WorkflowProcess {
@Reference
private DemoWFService ws;
private static final Logger logger = LoggerFactory.getLogger(WFProcessStep.class);
@Override
public void execute(WorkItem arg0, WorkflowSession arg1, MetaDataMap arg2) throws WorkflowException {
logger.info("********************* WF");
logger.info("wfff"+ws.showMessage("text"));
}
}
See my video - it works
Views
Replies
Total Likes
Hi,
*you missed @Component annotation in your service implementation.
below is correct code:you can try with this
Views
Replies
Total Likes
Thanks Arun, i had that in my workflow, but missed adding it here ..
so here are the updates:
I got a custom workflow to work but the one i was trying didn't work and would not appear in the dropdown in the custom process step
reasons:
1. Class that implements workflow process is marked abstract
Yet to investigate, ..
This worked smooth on 6.2..
Views
Replies
Total Likes
Please watch the video - i show all the code and shows it works in 6.4
Views
Replies
Total Likes
Yes Scott, that helps, but with the keyword abstract there are issues , so looking into it
In my example - i did not use that. Simply used an interface and the implementation class that uses @Component.
Let me know if you find a solution when that keyword is used (which seems to be causing an issue).
Views
Replies
Total Likes
So Scott, i finally have a response and after consultation and weeks of debugging assuming i was doing something wrong for something that is so simple,
i am asked (by adobe) to avoid using @reference in abstract classes , and this worked on 6.2 and is something that breaks in 6.4, , with bunch of scr annotation errors and components appear to be in satisfied state
Infact abstract keyword for a service at times sets the component to state "16", solution - remove abstract keyword
If you have nested inheritance and a class that is abstract and implement workflowprocess, keep it simple, take off abstract keyword and avoid inheritance since if a child class(extending parent class that implements workflow process) is invoked the annotations of the parent class is null, so just keep child class that implements workflowprocess and avoid inheritance where the parent class uses annotation and no abstract keyword.
Views
Likes
Replies