[ https://issues.apache.org/jira/browse/ISIS-1401?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15330272#comment-15330272 ]
Dan Haywood commented on ISIS-1401: ----------------------------------- To reproduce, I've added: {code} @Action( restrictTo = RestrictTo.PROTOTYPING ) @MemberOrder(sequence = "499.10.2") public Object test() { final BusRulesObjectsFixture fixtureScript = new BusRulesObjectsFixture(); return wrapperFactory.wrap(this).runFixtureScript(fixtureScript, null); } @Inject WrapperFactory wrapperFactory; {code} to {{KitchensinkFixturesService}} in the kitchensink app. One solution is to manually inject services into the fixture script beforehand: {code} @Action( restrictTo = RestrictTo.PROTOTYPING ) @MemberOrder(sequence = "499.10.2") public Object test() { final BusRulesObjectsFixture fixtureScript = new BusRulesObjectsFixture(); serviceRegistry2.injectServicesInto(fixtureScript); return wrapperFactory.wrap(this).runFixtureScript(fixtureScript, null); } @Inject WrapperFactory wrapperFactory; @Inject ServiceRegistry2 serviceRegistry2; {code} An alternative would be to refactor the FixtureScript superclass to use @ViewModel or @XmlRootElement. However, this could, perhaps, have unexpected side-effects, so I'd rather leave things as they are for now. > NPE when wrapping call to FixtureScripts#runFixtureScript for a newly > instantiated FixtureScript > ------------------------------------------------------------------------------------------------- > > Key: ISIS-1401 > URL: https://issues.apache.org/jira/browse/ISIS-1401 > Project: Isis > Issue Type: Bug > Components: Core > Affects Versions: 1.12.1 > Reporter: Oscar Bou > Assignee: Dan Haywood > Fix For: 1.13.0 > > > The FixtureScripts#runFixtureScript action is marked as "Prototyping", and > basically there's no need to invoke it wrapped, but perhaps is relevant for > other use cases. > When executing something like: > this.wrap(this.fixtureScripts).runFixtureScript( > new MyFixtureScript(), null); > A NullPointerException is thrown, as for the execution on > DomainObjectInvokationHandler#handleActionMethod requires to create an > adapter for the contributee (line 590): > [java] > contributeeAdapter = adapterFor(contributed); > [/java] > As the MyFixtureScript is a ViewModel, this will be delegated to > FixtureScript#viewModelMemento() which in fact will contain: > [java] > @Programmatic > @Override > public String viewModelMemento() { > return fixtureScripts.mementoFor(this); > } > [/java] > Being "fixtureScripts" null. > Not sure how to solve this, as basically the FixtureScript requires to be > injected before executing it. > As perhaps this will be the only method that can potentially been invoked > before the FixtureScript being wrapped on the "FixtureScripts" service, an > easy solution would be to check if the "fixtureScript" variable is null and, > in that case, inject its own instance on this same method. -- This message was sent by Atlassian JIRA (v6.3.4#6332)