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?
Solved! Go to Solution.
Views
Replies
Total Likes
I have tried both ways. It is working fine for me
@Override
public void onChange(List<ResourceChange> changes) {
logger.info("On Change Event !!!");
changes.forEach(change -> {
logger.info("Resource event: {} at: {}", change.getType(), change.getPath());
});
}
@Override
public void onChange(@NotNull List<ResourceChange> changes) {
logger.info("On Change Event !!!");
changes.forEach(change -> {
logger.info("Resource event: {} at: {}", change.getType(), change.getPath());
});
}
I dont think it is mandatory to define notnull here. Refer below
The @notnull Annotation is, actually, an explicit contract declaring the following:
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.
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);
}
I
I have tried both ways. It is working fine for me
@Override
public void onChange(List<ResourceChange> changes) {
logger.info("On Change Event !!!");
changes.forEach(change -> {
logger.info("Resource event: {} at: {}", change.getType(), change.getPath());
});
}
@Override
public void onChange(@NotNull List<ResourceChange> changes) {
logger.info("On Change Event !!!");
changes.forEach(change -> {
logger.info("Resource event: {} at: {}", change.getType(), change.getPath());
});
}
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