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 2020/01/09 16:15:51 UTC

[isis] 02/02: ISIS-2158: further decouple from resteasy

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

commit 76d8846e6c07d2b9bc15ab95dd4d7d1ac6732ade
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jan 9 17:15:40 2020 +0100

    ISIS-2158: further decouple from resteasy
    
    (in the prospect of deploying to a jee container)
---
 .../IsisJaxrsUtilityServiceResteasy4.java          | 42 -----------------
 .../IsisModuleRestfulObjectsJaxrsResteasy4.java    |  1 -
 .../conneg/RestfulObjectsJaxbWriterForXml.java     | 12 +++--
 .../restfulobjects/jaxrsresteasy4/conneg/Util.java | 33 -------------
 .../viewer/IsisJaxrsUtilityService.java            | 32 -------------
 .../viewer/mappers/ExceptionMapperAbstract.java    |  5 +-
 .../mappers/ExceptionMapperForObjectNotFound.java  |  8 ----
 ...xceptionMapperForRestfulObjectsApplication.java | 12 +----
 .../ExceptionMapperForRuntimeException.java        |  9 ----
 .../restfulobjects/viewer/mappers/FailureUtil.java | 54 ++++++++++++++++++++++
 ...tsApplicationExceptionMapper_Test_Contract.java |  7 ---
 .../isis/testdomain/jdo/InventoryManager.java      | 15 ++++--
 12 files changed, 75 insertions(+), 155 deletions(-)

diff --git a/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisJaxrsUtilityServiceResteasy4.java b/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisJaxrsUtilityServiceResteasy4.java
deleted file mode 100644
index 7754201..0000000
--- a/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisJaxrsUtilityServiceResteasy4.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *  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.viewer.restfulobjects.jaxrsresteasy4;
-
-import org.jboss.resteasy.spi.Failure;
-import org.springframework.stereotype.Service;
-
-import org.apache.isis.viewer.restfulobjects.applib.RestfulResponse;
-import org.apache.isis.viewer.restfulobjects.applib.RestfulResponse.HttpStatusCode;
-import org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsUtilityService;
-
-/**
- * @since 2.0
- */
-@Service
-public class IsisJaxrsUtilityServiceResteasy4 implements IsisJaxrsUtilityService {
-
-    @Override
-    public HttpStatusCode getFailureStatusCodeIfAny(Throwable ex) {
-
-        return (ex instanceof Failure)
-                ? RestfulResponse.HttpStatusCode.statusFor(((Failure)ex).getErrorCode())
-                        : null;
-    }
-
-}
diff --git a/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisModuleRestfulObjectsJaxrsResteasy4.java b/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisModuleRestfulObjectsJaxrsResteasy4.java
index 5920701..c254076 100644
--- a/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisModuleRestfulObjectsJaxrsResteasy4.java
+++ b/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/IsisModuleRestfulObjectsJaxrsResteasy4.java
@@ -13,7 +13,6 @@ import org.apache.isis.viewer.restfulobjects.viewer.IsisModuleRestfulObjectsView
         IsisModuleRestfulObjectsViewer.class,
 
         // @Service's
-        IsisJaxrsUtilityServiceResteasy4.class,
         WebModuleJaxrsResteasy4.class,
 
         // @Component's
diff --git a/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/conneg/RestfulObjectsJaxbWriterForXml.java b/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/conneg/RestfulObjectsJaxbWriterForXml.java
index 18a836e..217fc5e 100644
--- a/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/conneg/RestfulObjectsJaxbWriterForXml.java
+++ b/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/conneg/RestfulObjectsJaxbWriterForXml.java
@@ -53,10 +53,6 @@ public class RestfulObjectsJaxbWriterForXml extends JAXBXmlRootElementProvider {
                 hasXRoDomainTypeParameter(mediaType);
     }
 
-    protected boolean hasXRoDomainTypeParameter(final MediaType mediaType) {
-        return Util.hasXRoDomainTypeParameter(mediaType);
-    }
-
     @Override
     protected Marshaller getMarshaller(
             final Class<?> type, 
@@ -69,6 +65,12 @@ public class RestfulObjectsJaxbWriterForXml extends JAXBXmlRootElementProvider {
         marshaller.setAdapter(PersistentEntityAdapter.class, adapter);
         return marshaller;
     }
-
+    
+    // HELPER
+    
+    private static boolean hasXRoDomainTypeParameter(final MediaType mediaType) {
+        final boolean retval = mediaType.getParameters().containsKey("x-ro-domain-type");
+        return retval;
+    }
 
 }
diff --git a/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/conneg/Util.java b/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/conneg/Util.java
deleted file mode 100644
index d77b85b..0000000
--- a/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/conneg/Util.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *  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.viewer.restfulobjects.jaxrsresteasy4.conneg;
-
-import javax.ws.rs.core.MediaType;
-
-final class Util {
-
-    private Util(){
-    }
-
-    static boolean hasXRoDomainTypeParameter(final MediaType mediaType) {
-        final boolean retval = mediaType.getParameters().containsKey("x-ro-domain-type");
-        return retval;
-    }
-
-}
diff --git a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/IsisJaxrsUtilityService.java b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/IsisJaxrsUtilityService.java
deleted file mode 100644
index 7a81215..0000000
--- a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/IsisJaxrsUtilityService.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  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.viewer.restfulobjects.viewer;
-
-import org.apache.isis.viewer.restfulobjects.applib.RestfulResponse.HttpStatusCode;
-
-/**
- * Replaces the former 'IsisJaxrsServerPlugin'.
- * 
- * @since 2.0
- */
-public interface IsisJaxrsUtilityService {
-
-    HttpStatusCode getFailureStatusCodeIfAny(Throwable ex);
-
-}
diff --git a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperAbstract.java b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperAbstract.java
index ceffa51..7add1ba 100644
--- a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperAbstract.java
+++ b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperAbstract.java
@@ -35,7 +35,6 @@ import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.RestfulResponse;
 import org.apache.isis.viewer.restfulobjects.rendering.ExceptionWithBody;
 import org.apache.isis.viewer.restfulobjects.rendering.ExceptionWithHttpStatusCode;
-import org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsUtilityService;
 import org.apache.isis.viewer.restfulobjects.viewer.mappers.entity.ExceptionDetail;
 import org.apache.isis.viewer.restfulobjects.viewer.mappers.entity.ExceptionPojo;
 import org.apache.isis.viewer.restfulobjects.viewer.resources.serialization.SerializationStrategy;
@@ -86,13 +85,11 @@ public abstract class ExceptionMapperAbstract<T extends Throwable> implements Ex
         return builder.build();
     }
 
-    protected abstract IsisJaxrsUtilityService getIsisJaxrsUtilityService();
-    
     private RestfulResponse.HttpStatusCode determineStatusCode(final T ex) {
 
         RestfulResponse.HttpStatusCode statusCode;
 
-        statusCode = getIsisJaxrsUtilityService().getFailureStatusCodeIfAny(ex);
+        statusCode = FailureUtil.getFailureStatusCodeIfAny(ex);
         if(statusCode!=null) {
             return statusCode;
         }
diff --git a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForObjectNotFound.java b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForObjectNotFound.java
index 389d8dd..884c40a 100644
--- a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForObjectNotFound.java
+++ b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForObjectNotFound.java
@@ -18,25 +18,17 @@
  */
 package org.apache.isis.viewer.restfulobjects.viewer.mappers;
 
-import javax.inject.Inject;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.ext.Provider;
 
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.metamodel.exceptions.persistence.ObjectNotFoundException;
-import org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsUtilityService;
-
-import lombok.AccessLevel;
-import lombok.Getter;
 
 @Component
 @Provider
 public class ExceptionMapperForObjectNotFound extends ExceptionMapperAbstract<ObjectNotFoundException> {
 
-    @Inject @Getter(onMethod = @__(@Override), value = AccessLevel.PROTECTED)
-    IsisJaxrsUtilityService isisJaxrsUtilityService;
-    
     @Override
     public Response toResponse(final ObjectNotFoundException ex) {
         return buildResponse(ex);
diff --git a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForRestfulObjectsApplication.java b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForRestfulObjectsApplication.java
index 7841ada..de6eeea 100644
--- a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForRestfulObjectsApplication.java
+++ b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForRestfulObjectsApplication.java
@@ -18,25 +18,18 @@
  */
 package org.apache.isis.viewer.restfulobjects.viewer.mappers;
 
-import javax.inject.Inject;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.ext.Provider;
 
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
-import org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsUtilityService;
-
-import lombok.AccessLevel;
-import lombok.Getter;
 
 @Component
 @Provider
-public class ExceptionMapperForRestfulObjectsApplication extends ExceptionMapperAbstract<RestfulObjectsApplicationException> {
+public class ExceptionMapperForRestfulObjectsApplication 
+extends ExceptionMapperAbstract<RestfulObjectsApplicationException> {
 
-    @Inject @Getter(onMethod = @__(@Override), value = AccessLevel.PROTECTED)
-    IsisJaxrsUtilityService isisJaxrsUtilityService;
-    
     @Override
     public Response toResponse(final RestfulObjectsApplicationException ex) {
         //XXX code not used, so commented out
@@ -45,5 +38,4 @@ public class ExceptionMapperForRestfulObjectsApplication extends ExceptionMapper
         return buildResponse(ex);
     }
 
-
 }
diff --git a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForRuntimeException.java b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForRuntimeException.java
index ebc7ba2..7aff4b2 100644
--- a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForRuntimeException.java
+++ b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/ExceptionMapperForRuntimeException.java
@@ -18,24 +18,15 @@
  */
 package org.apache.isis.viewer.restfulobjects.viewer.mappers;
 
-import javax.inject.Inject;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.ext.Provider;
 
 import org.springframework.stereotype.Component;
 
-import org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsUtilityService;
-
-import lombok.AccessLevel;
-import lombok.Getter;
-
 @Component
 @Provider
 public class ExceptionMapperForRuntimeException extends ExceptionMapperAbstract<RuntimeException> {
 
-    @Inject @Getter(onMethod = @__(@Override), value = AccessLevel.PROTECTED)
-    IsisJaxrsUtilityService isisJaxrsUtilityService;
-    
     @Override
     public Response toResponse(final RuntimeException ex) {
 
diff --git a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/FailureUtil.java b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/FailureUtil.java
new file mode 100644
index 0000000..f792264
--- /dev/null
+++ b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/FailureUtil.java
@@ -0,0 +1,54 @@
+/*
+ *  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.viewer.restfulobjects.viewer.mappers;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.isis.metamodel.facets.MethodFinderUtils;
+import org.apache.isis.viewer.restfulobjects.applib.RestfulResponse;
+import org.apache.isis.viewer.restfulobjects.applib.RestfulResponse.HttpStatusCode;
+
+import lombok.val;
+import lombok.experimental.UtilityClass;
+
+@UtilityClass
+final class FailureUtil {
+
+    public static HttpStatusCode getFailureStatusCodeIfAny(Throwable ex) {
+
+        // legacy of
+        // return (ex instanceof org.jboss.resteasy.spi.Failure)
+        //                ? RestfulResponse.HttpStatusCode.statusFor(((org.jboss.resteasy.spi.Failure)ex).getErrorCode())
+        //                        : null;
+        
+        val errorCodeGetter = MethodFinderUtils.findMethod(ex.getClass(), "getErrorCode", int.class);
+        if(errorCodeGetter!=null) {
+            try {
+                val errorCode = (int)errorCodeGetter.invoke(ex);
+                return RestfulResponse.HttpStatusCode.statusFor(errorCode);
+            } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+                // ignore
+            }
+        }
+        
+        return null;
+
+    }
+
+}
diff --git a/core/viewers/restfulobjects/viewer/src/test/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/RestfulObjectsApplicationExceptionMapper_Test_Contract.java b/core/viewers/restfulobjects/viewer/src/test/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/RestfulObjectsApplicationExceptionMapper_Test_Contract.java
index 4c76551..fdf002f 100644
--- a/core/viewers/restfulobjects/viewer/src/test/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/RestfulObjectsApplicationExceptionMapper_Test_Contract.java
+++ b/core/viewers/restfulobjects/viewer/src/test/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/RestfulObjectsApplicationExceptionMapper_Test_Contract.java
@@ -36,7 +36,6 @@ import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.RestfulResponse.HttpStatusCode;
 import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
 import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
-import org.apache.isis.viewer.restfulobjects.viewer.IsisJaxrsUtilityService;
 
 /**
  * contract test.
@@ -55,12 +54,6 @@ public abstract class RestfulObjectsApplicationExceptionMapper_Test_Contract {
     public void setUp() throws Exception {
         exceptionMapper = new ExceptionMapperForRestfulObjectsApplication();
         exceptionMapper.httpHeaders = mockHttpHeaders;
-        exceptionMapper.isisJaxrsUtilityService = new IsisJaxrsUtilityService() {
-            @Override
-            public HttpStatusCode getFailureStatusCodeIfAny(Throwable ex) {
-                return null;
-            }
-        };
     }
 
     @Test
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/jdo/InventoryManager.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/jdo/InventoryManager.java
index 7281608..855d787 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/jdo/InventoryManager.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/jdo/InventoryManager.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.testdomain.jdo;
 
+import java.util.List;
+
 import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
@@ -28,6 +30,8 @@ import org.apache.isis.applib.services.repository.RepositoryService;
 @ViewModel
 public class InventoryManager {
 
+    @Inject private RepositoryService repository;
+    
     // -- UPDATE PRODUCT PRICE
 
     public static class UpdateProductPriceEvent extends ActionDomainEvent {}
@@ -42,11 +46,14 @@ public class InventoryManager {
 
     @Action
     public int countProducts() {
-        return repository.allInstances(Product.class).size();
+        return listAllProducts().size();
+    }
+    
+    @Action
+    public List<Product> listAllProducts() {
+        return repository.allInstances(Product.class);
     }
 
-    // -- DEPENDENCIES
-
-    @Inject RepositoryService repository;
+    
 
 }