[PAGES-504] Check for element type when evaluating availability Created: 14/Sep/21  Updated: 16/Aug/22

Status: Open
Project: Magnolia pages module
Component/s: None
Affects Version/s: 6.2.8
Fix Version/s: None

Type: Bug Priority: Minor
Reporter: Richard Gange Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
relation
Template:
Acceptance criteria:
Empty
Task DoD:
[ ]* Doc/release notes changes? Comment present?
[ ]* Downstream builds green?
[ ]* Solution information and context easily available?
[ ]* Tests
[ ]* FixVersion filled and not yet released
[ ]  Architecture Decision Record (ADR)
Bug DoR:
[X]* Steps to reproduce, expected, and actual results filled
[ ]* Affected version filled
[ ]* accepted by developers
Date of First Response:
Epic Link: AuthorX Support
Team: AuthorX

 Description   

We have a report of the following exception be seen in the logs:

ERROR info.magnolia.ui.framework.ContextProperty$Impl 17.08.2021 09:28:52 – Failed to dispatch context property change: class info.magnolia.ui.vaadin.gwt.client.shared.AreaElement cannot be cast to class info.magnolia.ui.vaadin.gwt.client.shared.ComponentElement (info.magnolia.ui.vaadin.gwt.client.shared.AreaElement and info.magnolia.ui.vaadin.gwt.client.shared.ComponentElement are in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @6e28bb87)
 java.lang.ClassCastException: class info.magnolia.ui.vaadin.gwt.client.shared.AreaElement cannot be cast to class info.magnolia.ui.vaadin.gwt.client.shared.ComponentElement (info.magnolia.ui.vaadin.gwt.client.shared.AreaElement and info.magnolia.ui.vaadin.gwt.client.shared.ComponentElement are in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @6e28bb87)
 at info.magnolia.pages.app.detail.action.availability.IsComponentDeletableRule.isAvailableFor(IsComponentDeletableRule.java:46) ~[magnolia-pages-app-6.2.8.jar:?]
 at info.magnolia.ui.availability.rule.AbstractAvailabilityRule.isAvailableForItem(AbstractAvailabilityRule.java:86) ~[magnolia-ui-framework-6.2.9.jar:?]
 at info.magnolia.pages.app.detail.action.availability.AbstractElementAvailabilityRule.isAvailableForItem(AbstractElementAvailabilityRule.java:62) ~[magnolia-pages-app-6.2.8.jar:?]
 at info.magnolia.ui.availability.rule.AbstractAvailabilityRule.isAvailable(AbstractAvailabilityRule.java:63) ~[magnolia-ui-framework-6.2.9.jar:?]
 at info.magnolia.ui.availability.DefaultAvailabilityChecker.isAvailable(DefaultAvailabilityChecker.java:80) ~[magnolia-ui-framework-6.2.9.jar:?]
 at info.magnolia.ui.availability.DefaultAvailabilityChecker.lambda$isAvailable$1(DefaultAvailabilityChecker.java:64) ~[magnolia-ui-framework-6.2.9.jar:?]
 at java.util.stream.MatchOps$1MatchSink.accept(MatchOps.java:90) ~[?:?]
 at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[?:?]
 at java.util.LinkedList$LLSpliterator.tryAdvance(LinkedList.java:1253) ~[?:?]
 at java.util.stream.Streams$ConcatSpliterator.tryAdvance(Streams.java:723) ~[?:?]
 at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127) ~[?:?]
 at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502) ~[?:?]
 at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488) ~[?:?]
 at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[?:?]
 at java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:230) ~[?:?]
 at java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:196) ~[?:?]
 at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
 at java.util.stream.ReferencePipeline.allMatch(ReferencePipeline.java:533) ~[?:?]
 at info.magnolia.ui.availability.DefaultAvailabilityChecker.isAvailable(DefaultAvailabilityChecker.java:64) ~[magnolia-ui-framework-6.2.9.jar:?]
 at info.magnolia.ui.contentapp.browser.actions.ActionbarPresenter.lambda$getAvailabilityFilter$4(ActionbarPresenter.java:156) ~[magnolia-ui-framework-6.2.9.jar:?]
 at info.magnolia.ui.contentapp.browser.actions.ActionbarPresenter.isEnabledAction(ActionbarPresenter.java:130) ~[magnolia-ui-framework-6.2.9.jar:?]
 at info.magnolia.ui.contentapp.browser.actions.ActionbarView.lambda$update$7(ActionbarView.java:141) ~[magnolia-ui-framework-6.2.9.jar:?]
 at java.util.ArrayList.forEach(ArrayList.java:1540) ~[?:?]
 at info.magnolia.ui.contentapp.browser.actions.ActionbarView.update(ActionbarView.java:140) ~[magnolia-ui-framework-6.2.9.jar:?]
 at info.magnolia.ui.contentapp.browser.actions.ActionbarView.lambda$new$0(ActionbarView.java:86) ~[magnolia-ui-framework-6.2.9.jar:?]
 at info.magnolia.ui.ValueContext.lambda$observe$2(ValueContext.java:86) ~[magnolia-ui-framework-6.2.9.jar:?]
 at info.magnolia.ui.framework.ContextProperty$Impl.lambda$observe$5(ContextProperty.java:195) ~[magnolia-ui-framework-6.2.9.jar:?]
 at io.reactivex.internal.subscribers.LambdaSubscriber.onNext(LambdaSubscriber.java:65) ~[rxjava-2.2.18.jar:?]
 at io.reactivex.internal.operators.flowable.FlowableMap$MapSubscriber.onNext(FlowableMap.java:68) ~[rxjava-2.2.18.jar:?]
 at io.reactivex.internal.operators.flowable.FlowableOnBackpressureLatest$BackpressureLatestSubscriber.drain(FlowableOnBackpressureLatest.java:129) ~[rxjava-2.2.18.jar:?]
 at io.reactivex.internal.operators.flowable.FlowableOnBackpressureLatest$BackpressureLatestSubscriber.onNext(FlowableOnBackpressureLatest.java:68) ~[rxjava-2.2.18.jar:?]
 at io.reactivex.internal.operators.flowable.FlowableFromObservable$SubscriberObserver.onNext(FlowableFromObservable.java:54) ~[rxjava-2.2.18.jar:?]
 at io.reactivex.internal.util.NotificationLite.accept(NotificationLite.java:246) ~[rxjava-2.2.18.jar:?]
 at io.reactivex.subjects.BehaviorSubject$BehaviorDisposable.test(BehaviorSubject.java:569) ~[rxjava-2.2.18.jar:?]
 at io.reactivex.subjects.BehaviorSubject$BehaviorDisposable.emitNext(BehaviorSubject.java:564) ~[rxjava-2.2.18.jar:?]
 at io.reactivex.subjects.BehaviorSubject.onNext(BehaviorSubject.java:268) ~[rxjava-2.2.18.jar:?]
 at info.magnolia.ui.framework.ContextProperty$Impl.doSet(ContextProperty.java:250) ~[magnolia-ui-framework-6.2.9.jar:?]
 at info.magnolia.ui.framework.ContextProperty$Impl.set(ContextProperty.java:234) ~[magnolia-ui-framework-6.2.9.jar:?]
 at info.magnolia.ui.framework.ContextProperty$Wrapper.set(ContextProperty.java:127) ~[magnolia-ui-framework-6.2.9.jar:?]
 at info.magnolia.ui.ValueContext.set(ValueContext.java:74) ~[magnolia-ui-framework-6.2.9.jar:?]
 at info.magnolia.ui.ValueContext.set(ValueContext.java:78) ~[magnolia-ui-framework-6.2.9.jar:?]
 at info.magnolia.pages.app.detail.PageEditorStatus.lambda$setSelectedElement$2(PageEditorStatus.java:130) ~[magnolia-pages-app-6.2.8.jar:?]
 at com.machinezoo.noexception.CheckedExceptionHandler.run(CheckedExceptionHandler.java:1709) [noexception-1.4.4.jar:?]
 at info.magnolia.pages.app.detail.PageEditorStatus.setSelectedElement(PageEditorStatus.java:118) [magnolia-pages-app-6.2.8.jar:?]
 at info.magnolia.pages.app.detail.PageEditorPresenter.onElementSelect(PageEditorPresenter.java:177) [magnolia-pages-app-6.2.8.jar:?]
 at info.magnolia.ui.vaadin.editor.PageEditor$1.selectArea(PageEditor.java:69) [magnolia-pages-editor-widget-6.2.8.jar:6.2.8]

The problem here is how to track down such an issue after the fact. The log isn't helping very much in this case.

Rather than assume we received a ComponentElement inside isAvailableFor()

    @Override
    protected boolean isAvailableFor(ComponentElement element) {
        return element.getDeletable();
    }

We could check to be sure it is in fact one. If not provide some more context that would allow the issue to be tracked down.

    @Override
    protected boolean isAvailableFor(AbstractElement element) {
        if (element instanceof ComponentElement) {
            return element.getDeletable();
        }
        else {
            // do something here to help provide context
            log.error("Cannot check availability of type {} at path {}", element.getClass(), element.getPath());
        }
    }


 Comments   
Comment by Roman Kovařík [ 14/Sep/21 ]

The stackstace matches the source code of pages 6.2.8 , not the version set on the support ticket.

Generated at Mon Feb 12 06:19:36 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.