You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/11/30 13:30:15 UTC

[isis] branch master updated: ISIS-2903: adds reg. test for Jaxb viewmodel w/ JDO entities embedded

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new be4bb91  ISIS-2903: adds reg. test for Jaxb viewmodel w/ JDO entities embedded
be4bb91 is described below

commit be4bb91bfb92bc906fb99ebaaa11b0c915c88845
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Nov 30 14:30:01 2021 +0100

    ISIS-2903: adds reg. test for Jaxb viewmodel w/ JDO entities embedded
---
 .../applib/jaxb/PersistentEntitiesAdapter.java     |  8 +-
 .../isis/applib/jaxb/PersistentEntityAdapter.java  |  4 +-
 .../isis/applib/services/jaxb/JaxbService.java     | 19 +++--
 ...ableObjectFacetForXmlRootElementAnnotation.java | 25 +++---
 .../runtimeservices/jaxb/JaxbServiceDefault.java   | 46 +++++++----
 .../viewmodels/jaxbrefentity/JaxbRefEntity.java    |  4 +-
 .../testdomain/persistence/jdo/JdoJaxbTest.java    | 94 +++++++++++++++++++++
 .../isis/testdomain/jdo/JdoInventoryJaxbVm.java    | 95 ++++++++++++++++++++++
 ...entNegotiationServiceForRestfulObjectsV1_0.java |  6 +-
 9 files changed, 253 insertions(+), 48 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntitiesAdapter.java b/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntitiesAdapter.java
index 571eb21..5f58816 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntitiesAdapter.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntitiesAdapter.java
@@ -35,14 +35,14 @@ import lombok.val;
 /**
  * @since 2.0 {@index}
  */
-public class PersistentEntitiesAdapter extends XmlAdapter<OidsDto, List<Object>> {
+public class PersistentEntitiesAdapter extends XmlAdapter<OidsDto, Iterable<Object>> {
 
     @Inject @Getter(AccessLevel.PROTECTED)
     private BookmarkService bookmarkService;
 
     @Override
     public List<Object> unmarshal(final OidsDto oidsDto) {
-
+        System.err.printf("unmarshal[] %s%n", oidsDto);
         List<Object> domainObjects = new ArrayList<>();
         for (val oidDto : oidsDto.getOid()) {
             val bookmark = Bookmark.forOidDto(oidDto);
@@ -53,8 +53,8 @@ public class PersistentEntitiesAdapter extends XmlAdapter<OidsDto, List<Object>>
     }
 
     @Override
-    public OidsDto marshal(final List<Object> domainObjects) {
-
+    public OidsDto marshal(final Iterable<Object> domainObjects) {
+        System.err.printf("marshal[] %s%n", domainObjects);
         if(domainObjects == null) {
             return null;
         }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntityAdapter.java b/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntityAdapter.java
index 6745a11..602453e 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntityAdapter.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/jaxb/PersistentEntityAdapter.java
@@ -34,14 +34,14 @@ public class PersistentEntityAdapter extends XmlAdapter<OidDto, Object> {
 
     @Override
     public Object unmarshal(final OidDto oidDto) throws Exception {
-
+        System.err.printf("unmarshal %s%n", oidDto);
         val bookmark = Bookmark.forOidDto(oidDto);
         return bookmarkService.lookup(bookmark).orElse(null);
     }
 
     @Override
     public OidDto marshal(final Object domainObject) throws Exception {
-
+        System.err.printf("marshal %s%n", domainObject);
         if(domainObject == null) {
             return null;
         }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbService.java b/api/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbService.java
index 9fffedb..d4e9ee0 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbService.java
@@ -22,12 +22,13 @@ import java.io.StringReader;
 import java.io.StringWriter;
 import java.util.Map;
 
-import org.springframework.lang.Nullable;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 
+import org.springframework.lang.Nullable;
+
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.resources._Xml;
@@ -57,8 +58,8 @@ public interface JaxbService {
      * @param xml
      */
     default Object fromXml(
-            JAXBContext jaxbContext,
-            String xml) {
+            final JAXBContext jaxbContext,
+            final String xml) {
         return fromXml(jaxbContext, xml, null);
     }
 
@@ -78,7 +79,7 @@ public interface JaxbService {
     /**
      * Unmarshalls the XML to the specified domain class.
      */
-    default <T> T fromXml(Class<T> domainClass, String xml) {
+    default <T> T fromXml(final Class<T> domainClass, final String xml) {
         return fromXml(domainClass, xml, null);
     }
 
@@ -96,7 +97,7 @@ public interface JaxbService {
      * Marshalls the object into XML (using a {@link JAXBContext} for the
      * object's class).
      */
-    default String toXml(Object domainObject) {
+    default String toXml(final Object domainObject) {
         return toXml(domainObject, null);
     }
 
@@ -133,7 +134,7 @@ public interface JaxbService {
         @Override
         @SneakyThrows
         @Nullable
-        public Object fromXml(
+        public final Object fromXml(
                 final @NonNull JAXBContext jaxbContext,
                 final @Nullable String xml,
                 final @Nullable Map<String, Object> unmarshallerProperties) {
@@ -147,7 +148,7 @@ public interface JaxbService {
         @Override
         @SneakyThrows
         @Nullable
-        public <T> T fromXml(
+        public final <T> T fromXml(
                 final @NonNull Class<T> domainClass,
                 final @Nullable String xml,
                 final @Nullable Map<String, Object> unmarshallerProperties) {
@@ -162,7 +163,7 @@ public interface JaxbService {
 
         @Override
         @SneakyThrows
-        public String toXml(
+        public final String toXml(
                 final @NonNull Object domainObject,
                 final @Nullable Map<String, Object> marshallerProperties) {
 
@@ -241,7 +242,7 @@ public interface JaxbService {
 
         @Override
         @SneakyThrows
-        public Map<String, String> toXsd(
+        public final Map<String, String> toXsd(
                 final @NonNull Object domainObject,
                 final @NonNull IsisSchemas isisSchemas) {
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java
index 1b01e3b..63729df 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java
@@ -23,10 +23,11 @@ import org.apache.isis.applib.services.urlencoding.UrlEncodingService;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.HasPostConstructMethodCache;
 
+import lombok.Getter;
+
 public class RecreatableObjectFacetForXmlRootElementAnnotation
 extends RecreatableObjectFacetAbstract {
 
-
     public RecreatableObjectFacetForXmlRootElementAnnotation(
             final FacetHolder holder,
             final HasPostConstructMethodCache postConstructMethodCache) {
@@ -36,30 +37,28 @@ extends RecreatableObjectFacetAbstract {
 
     @Override
     protected Object doInstantiate(final Class<?> viewModelClass, final String mementoStr) {
-
         final String xmlStr = getUrlEncodingService().decodeToString(mementoStr);
         final Object viewModelPojo = getJaxbService().fromXml(viewModelClass, xmlStr);
-
         return viewModelPojo;
     }
 
     @Override
-    public String memento(final Object pojo) {
-
-        final String xml = getJaxbService().toXml(pojo);
+    public String memento(final Object vmPojo) {
+        final String xml = getJaxbService().toXml(vmPojo);
         final String encoded = getUrlEncodingService().encodeString(xml);
-
+        //FIXME[ISIS-2903] gets called about 4 times per same object, why?
+        //System.err.printf("%s%n", encoded);
         return encoded;
     }
 
     // -- DEPENDENCIES
 
-    private JaxbService getJaxbService() {
-        return getServiceRegistry().lookupServiceElseFail(JaxbService.class);
-    }
+    @Getter(lazy=true)
+    private final JaxbService jaxbService =
+        getServiceRegistry().lookupServiceElseFail(JaxbService.class);
 
-    private UrlEncodingService getUrlEncodingService() {
-        return getServiceRegistry().lookupServiceElseFail(UrlEncodingService.class);
-    }
+    @Getter(lazy=true)
+    private final UrlEncodingService urlEncodingService =
+        getServiceRegistry().lookupServiceElseFail(UrlEncodingService.class);
 
 }
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/jaxb/JaxbServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/jaxb/JaxbServiceDefault.java
index 794018c..74cd48a 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/jaxb/JaxbServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/jaxb/JaxbServiceDefault.java
@@ -18,10 +18,20 @@
  */
 package org.apache.isis.core.runtimeservices.jaxb;
 
-import lombok.NonNull;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-import lombok.val;
+import java.util.Map;
+
+import javax.annotation.Priority;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
+
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.domain.DomainObjectList;
 import org.apache.isis.applib.jaxb.PersistentEntitiesAdapter;
@@ -32,18 +42,11 @@ import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.commons.internal.resources._Xml;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Service;
 
-import javax.annotation.Priority;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import java.util.Map;
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import lombok.val;
 
 @Service
 @Named("isis.runtimeservices.JaxbServiceDefault")
@@ -53,7 +56,7 @@ import java.util.Map;
 public class JaxbServiceDefault extends Simple {
 
     private final ServiceInjector serviceInjector;
-    private final SpecificationLoader specificationLoader;
+    private final SpecificationLoader specLoader;
 
     @Override @SneakyThrows
     protected JAXBContext jaxbContextForObject(final @NonNull Object domainObject) {
@@ -61,7 +64,7 @@ public class JaxbServiceDefault extends Simple {
             val domainClass = domainObject.getClass();
             val domainObjectList = (DomainObjectList) domainObject;
             try {
-                val elementType = specificationLoader
+                val elementType = specLoader
                         .specForType(_Context.loadClass(domainObjectList.getElementTypeFqcn()))
                         .map(ObjectSpecification::getCorrespondingClass)
                         .orElse(null);
@@ -106,6 +109,15 @@ public class JaxbServiceDefault extends Simple {
 
     @Override
     protected void configure(final Marshaller marshaller) {
+
+//debug
+//        marshaller.setListener(new Marshaller.Listener() {
+//            @Override
+//            public void beforeMarshal(final Object source) {
+//                System.err.printf("beforeMarshal %s%n", source);
+//            }
+//        });
+
         marshaller.setAdapter(PersistentEntityAdapter.class,
                 serviceInjector.injectServicesInto(new PersistentEntityAdapter()));
         marshaller.setAdapter(PersistentEntitiesAdapter.class,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/JaxbRefEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/JaxbRefEntity.java
index a968316..03925e8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/JaxbRefEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/JaxbRefEntity.java
@@ -18,6 +18,8 @@
  */
 package demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity;
 
+import java.util.Objects;
+
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.ObjectSupport;
 import org.apache.isis.applib.annotation.Property;
@@ -38,7 +40,7 @@ implements
 
     @ObjectSupport
     public String title() {
-        return getName();
+        return Objects.requireNonNull(getName(), "most likely a serialization or re-attach issue");
     }
 
     @Property
diff --git a/regressiontests/stable-persistence-jdo/src/test/java/org/apache/isis/testdomain/persistence/jdo/JdoJaxbTest.java b/regressiontests/stable-persistence-jdo/src/test/java/org/apache/isis/testdomain/persistence/jdo/JdoJaxbTest.java
new file mode 100644
index 0000000..e0bfa74
--- /dev/null
+++ b/regressiontests/stable-persistence-jdo/src/test/java/org/apache/isis/testdomain/persistence/jdo/JdoJaxbTest.java
@@ -0,0 +1,94 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.testdomain.persistence.jdo;
+
+import java.sql.SQLException;
+
+import javax.inject.Inject;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.transaction.annotation.Transactional;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.apache.isis.applib.services.bookmark.BookmarkService;
+import org.apache.isis.applib.services.jaxb.JaxbService;
+import org.apache.isis.core.config.presets.IsisPresets;
+import org.apache.isis.testdomain.conf.Configuration_usingJdo;
+import org.apache.isis.testdomain.jdo.JdoInventoryJaxbVm;
+import org.apache.isis.testing.integtestsupport.applib.IsisIntegrationTestAbstract;
+
+import static org.apache.isis.testdomain.persistence.jdo._TestFixtures.setUp3Books;
+
+import lombok.val;
+
+@SpringBootTest(
+        classes = {
+                Configuration_usingJdo.class,
+        })
+@TestPropertySource(IsisPresets.UseLog4j2Test)
+@Transactional
+class JdoJaxbTest extends IsisIntegrationTestAbstract {
+
+    @Inject private JaxbService jaxbService;
+    @Inject private BookmarkService bookmarkService;
+
+    private JdoInventoryJaxbVm inventoryJaxbVm;
+
+    @BeforeEach
+    void setUp() throws SQLException {
+        setUp3Books(repositoryService);
+        inventoryJaxbVm = factoryService.viewModel(new JdoInventoryJaxbVm());
+    }
+
+    @Test
+    void inventoryJaxbVm_shouldRoundtripProperly() {
+
+        // assert injection worked initially
+        assertEquals("JdoInventoryJaxbVm; 3 products", inventoryJaxbVm.title());
+
+        val books = inventoryJaxbVm.listBooks();
+        val favoriteBook = books.get(0);
+        assertEquals(3, books.size());
+        inventoryJaxbVm.setName("bookstore");
+        inventoryJaxbVm.setBooks(books);
+        inventoryJaxbVm.setFavoriteBook(favoriteBook);
+
+        // round-trip
+        val xml = jaxbService.toXml(inventoryJaxbVm);
+        System.err.printf("%s%n", xml);
+        val recoveredVm =
+                serviceInjector.injectServicesInto(
+                jaxbService.fromXml(JdoInventoryJaxbVm.class, xml));
+
+        assertEquals("JdoInventoryJaxbVm; 3 products", recoveredVm.title());
+        assertEquals("bookstore", recoveredVm.getName());
+        assertEquals(3, recoveredVm.getBooks().size());
+        assertEquals(favoriteBook.getName(), recoveredVm.getFavoriteBook().getName());
+
+        assertEquals(
+                bookmarkService.bookmarkFor(favoriteBook),
+                bookmarkService.bookmarkFor(recoveredVm.getFavoriteBook()));
+
+    }
+
+}
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoInventoryJaxbVm.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoInventoryJaxbVm.java
new file mode 100644
index 0000000..771e98e
--- /dev/null
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoInventoryJaxbVm.java
@@ -0,0 +1,95 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.testdomain.jdo;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.ObjectSupport;
+import org.apache.isis.applib.annotation.Optionality;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.jaxb.PersistentEntitiesAdapter;
+import org.apache.isis.applib.jaxb.PersistentEntityAdapter;
+import org.apache.isis.applib.services.repository.RepositoryService;
+import org.apache.isis.testdomain.jdo.entities.JdoBook;
+import org.apache.isis.testdomain.jdo.entities.JdoProduct;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@XmlRootElement(name = "root")
+@XmlType(
+        propOrder = {"name", "favoriteBook", "books"}
+)
+@XmlAccessorType(XmlAccessType.FIELD)
+@DomainObject(
+        nature=Nature.VIEW_MODEL
+        , logicalTypeName = "testdomain.jdo.JdoInventoryJaxbVm"
+)
+public class JdoInventoryJaxbVm {
+
+    @XmlTransient @Inject
+    private RepositoryService repository;
+
+    @ObjectSupport public String title() {
+        return String.format("JdoInventoryJaxbVm; %d products", listProducts().size());
+    }
+
+    @Property(editing = Editing.ENABLED)
+    @Getter @Setter
+    @XmlElement
+    private String name;
+
+    @Action
+    public List<JdoProduct> listProducts() {
+        return repository.allInstances(JdoProduct.class);
+    }
+
+    @Action
+    public List<JdoBook> listBooks() {
+        return repository.allInstances(JdoBook.class);
+    }
+
+    @Getter @Setter
+    @Property(editing = Editing.ENABLED, optionality = Optionality.OPTIONAL)
+    @XmlElement(required = false)
+    @XmlJavaTypeAdapter(PersistentEntityAdapter.class)
+    private JdoBook favoriteBook = null;
+
+    @Getter @Setter
+    @Collection
+    @XmlElement(name = "book")
+    @XmlJavaTypeAdapter(PersistentEntitiesAdapter.class)
+    private java.util.Collection<JdoBook> books = new ArrayList<>();
+
+}
\ No newline at end of file
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
index ff1e841..c9141a9 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
@@ -212,9 +212,11 @@ implements ContentNegotiationService {
                 final ObjectSpecification actionOwnerSpec = actionOwnerSpecFrom(objectAndActionInvocation);
                 final String actionId = actionIdFrom(objectAndActionInvocation);
                 final String actionArguments = actionArgumentsFrom(objectAndActionInvocation);
-                final DomainObjectList list = domainObjectListFrom(collectionAdapters, elementSpec, actionOwnerSpec, actionId, actionArguments);
+                final DomainObjectList list = domainObjectListFrom(
+                        collectionAdapters, elementSpec, actionOwnerSpec, actionId, actionArguments);
 
-                val listAdapter = ManagedObject.lazy(resourceContext.getMetaModelContext().getSpecificationLoader(), list);
+                val listAdapter = ManagedObject.lazy(
+                        resourceContext.getMetaModelContext().getSpecificationLoader(), list);
                 return responseBuilder(
                         buildResponse(
                                 resourceContext,