Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.

Event Handler Path property is throwing null

Avatar

Level 2

Can you please to solve the null pointer exception in the handle event method.
Environment: AEMASCS

Below is the sample code which will execute when the content is published in this path(/content/dam).
paths is throwing the null pointer exception.

SlingConstants.PROPERTY_PATH = path
@Component(immediate = true, service = EventHandler.class, property = {
Constants.SERVICE_DESCRIPTION + "= This event handler listens the events on page activation",
EventConstants.EVENT_TOPIC + "=org/apache/sling/distribution/agent/package/distributed",
EventConstants.EVENT_FILTER + "=(&(distribution.paths=/content/dam/*) (|(distribution.type=ADD)(distribution.type=DELETE)))",
})
public class TestHandler implements EventHandler {
public void handleEvent(Event event) {
log.info("Testing on DEV...");
String[] paths = (String[]) event.getProperty(SlingConstants.PROPERTY_PATH);
}

Please help me.

6 Replies

Avatar

Community Advisor

@Nishma  I tried the same scenario in AEMaaCS and it worked for us. Please refer to below code snippet

 

@Component(immediate = true, property = { "event.topics=org/apache/sling/distribution/importer/package/imported",
"event.filter=(|(distribution.type=ADD)(distribution.type=DELETE))" })
public class AkamaiSlingDistributionEventHandler implements EventHandler {
public static final String DISTRIBUTION_PATHS = "distribution.paths";

@Override
public void handleEvent(Event event) {
if (event.getProperty(DISTRIBUTION_PATHS) != null) {
String[] pagePath = (String[]) event.getProperty(DISTRIBUTION_PATHS);
}
}

 

Avatar

Level 2

@Jagadeesh_Prakash Thanks for the response. Just want to check how you validated in your local server. since it will trigger when content distribution is configured. I'm unable to configure in the local server.

Avatar

Community Advisor

@Nishma There is no special configurations needed to do in local to test it. It should get triggered when ever there is any page or asset replication is done. 

 

Or you can test in cloud dev environment as well 

Avatar

Level 2

@Jagadeesh_Prakash when ever we are publishing the assert sling content distribution will trigger(that setup i was unable to do in local). so i tried in dev environment by publishing the assert but still it is not triggering. Please suggest me. I got struck.

 

@Component(immediate = true, service = EventHandler.class, property = {
        Constants.SERVICE_DESCRIPTION + "= This event handler listens the events on page activation",
        EventConstants.EVENT_TOPIC + "=org/apache/sling/distribution/importer/package/imported",
        EventConstants.EVENT_FILTER + "=(&(distribution.paths=/content/dam/test/*) (|(distribution.type=ADD)(distribution.type=DELETE)))",
})
public class TestHandler implements EventHandler {
    private static final Logger log = LoggerFactory.getLogger(TestHandler.class);@Override
    public void handleEvent(Event event) {
        log.info("Testing on DEV...");
}} 

 

 

Avatar

Community Advisor

@Nishma Please check the logs in publisher and not in the author. 

Avatar

Community Advisor

@Nishma If still you are facing issue, try below one. But i recommand the previous post which worked for me and below code was working in local but not in the AEMcs environment. 

 

Note: I removed some code. Please improvise and try according to your requirement

 

@Component(
service = EventHandler.class, configurationPolicy = ConfigurationPolicy.REQUIRE,
property = {EventConstants.EVENT_TOPIC+"=" + ReplicationAction.EVENT_TOPIC})

public class ReplicationListenerOnAuthor implements Runnable, EventHandler {
private BundleContext bundleContext;

@Override
public void handleEvent(Event event) {
if (isAuthor()) {
final ReplicationActionType replicationType = ReplicationAction.fromEvent(event).getType();
if (replicationType == ReplicationActionType.ACTIVATE || replicationType == ReplicationActionType.DEACTIVATE || replicationType == ReplicationActionType.DELETE)
{ // service call here

}
}
}

@Override
public void run() {
log.debug("{} Running...", this.getClass().getName());
}

@Activate
protected void activate(ComponentContext componentContext) {
bundleContext = componentContext.getBundleContext();
}

@Deactivate
protected void deactivate() {
bundleContext = null;
}

}