Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

[AEM Gems Webinar] Accelerating Experience Manager as a Cloud Service development with Rapid Development Environments

How to use #onChange in ResourceChangeListener

Avatar

Level 5

Hi

I would like to know if and why do I need the NotNull Constraint when implementing onChange in ResourceChangeListener. Here is the code:

 

public class ComponentCampaignCleanupListener implements ResourceChangeListener {

private static final Logger logger = LoggerFactory.getLogger(ComponentCampaignCleanupListener.class);

@Reference
private ResourceResolverService resourceResolverService;


@Override
public void onChange(List<ResourceChange> list) {...} //**Do I need here @NotNull for the list parameter and why?
0 Replies

Avatar

Level 6

I dont think it is mandatory to define notnull here. Refer below 

https://github.com/apache/sling-org-apache-sling-discovery-commons/blob/4f7d7ca3224239d52798cc8418ec... 

 

The @notnull Annotation is, actually, an explicit contract declaring the following:

  1. A method should not return null.
  2. A variable (like fields, local variables, and parameters) cannot should not hold null value.

Additionally, @notnull is often checked by ConstraintValidators (eg. in spring and hibernate).

The @notnull annotation doesn't do any validation on its own because the annotation definition does not provide any ConstraintValidator type reference.

Avatar

Level 5

Thanks @tusharbias 

In my specific case the list variable could be null. I am listening to /content ADDED changes. In fact, if I add the @NotNull constraint AEM I cannot render any Page and get a compilation error.

The reason why I posted the question is that I thought according to the interface, this method should have a @NotNull annotation.

 

Here is the interface:

@ConsumerType
public interface ResourceChangeListener {
String PATHS = "resource.paths";
String CHANGES = "resource.change.types";
String PROPERTY_NAMES_HINT = "resource.property.names.hint";

void onChange(@NotNull List<ResourceChange> var1);
}

Avatar

Community Advisor

Hi @anasustic ,

If you want to use Javax validation constraints to ensure that the List<ResourceChange> list

 being passed in is not null then @NotNull annotation is being used.

Fore more details please visit: https://docs.oracle.com/javaee/7/api/javax/validation/constraints/NotNull.html

Hope that helps!

Regards,

Santosh