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

SOLVED

[Sling Model] Is there a way to use adaptTo and catch any thrown exceptions?

Elkish
Level 2
Level 2

We have been making decent use of sling models on our site, but one of the things that has been frustrating is that whenever an exception is thrown as part of the adaptTo step it seems to get eaten in the process, leaving behind a null object.  Is there a way to do an adaptTo step and actually catch any exceptions?

1 Accepted Solution
Elkish
Correct answer by
Level 2
Level 2

So I actually found the solution while looking through docs on an unrelated issue:

Apache Sling :: Sling Models

It looks like Sling has a factory class you can use that will pass exceptions when used to adapt objects to new types.  Instead of using the object's adaptTo function, you can simply use:

MyModel model = modelFactory.createModel(object, MyModel.class);

Which will throw catchable exceptions.

View solution in original post

2 Replies
Elkish
Correct answer by
Level 2
Level 2

So I actually found the solution while looking through docs on an unrelated issue:

Apache Sling :: Sling Models

It looks like Sling has a factory class you can use that will pass exceptions when used to adapt objects to new types.  Instead of using the object's adaptTo function, you can simply use:

MyModel model = modelFactory.createModel(object, MyModel.class);

Which will throw catchable exceptions.

View solution in original post

Jörg_Hoh
Employee
Employee

Good to know that you have a found a way to deal with that; but in general adaptTo() does not allow exceptions to be thrown. I remeber a discussion on the sling list of this behavior should be changed, but I do not recall why this proposal has been declined.

Anyway, I find this behavior also odd, unless you start using it in combination with Java8's Optional type.