CAUSEWAY-3676: adds scalar support for jdk and joda dates and times
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
index 36ef5f5..036f2ba 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
+++ b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
@@ -2420,13 +2420,17 @@
             public static class ScalarMarshaller {
 
                 /**
+                 * For both JDK8's {@link java.time.LocalTime} and JodaTime's {@link org.joda.time.LocalTime}
+                 */
+                private String localTimeFormat = "HH:mm:ss";
+                /**
                  * For both JDK8's {@link java.time.LocalDate} and JodaTime's {@link org.joda.time.LocalDate}
                  */
                 private String localDateFormat = "yyyy-MM-dd";
                 /**
                  * for JDK8's {@link java.time.ZonedDateTime} and JodaTime's {@link org.joda.time.DateTime}
                  */
-                private String zonedDateTimeFormat = "yyyy-MM-dd HH:mm:ss z";
+                private String zonedDateTimeFormat = "yyyy-MM-dd'T'HH:mm:ssXXX";
             }
 
             @Getter
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerBigDecimal.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerBigDecimal.java
index 515a3f9..de87001 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerBigDecimal.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerBigDecimal.java
@@ -24,6 +24,7 @@
 import javax.inject.Inject;
 
 import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
 
 import org.springframework.stereotype.Component;
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerBigInteger.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerBigInteger.java
index 4e14d07..247d731 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerBigInteger.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerBigInteger.java
@@ -24,6 +24,7 @@
 import javax.inject.Inject;
 
 import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
 
 import org.springframework.stereotype.Component;
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerBytePrimitive.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerBytePrimitive.java
index b7b198c..68428a1 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerBytePrimitive.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerBytePrimitive.java
@@ -22,6 +22,7 @@
 import javax.inject.Inject;
 
 import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
 
 import org.springframework.stereotype.Component;
 
@@ -36,7 +37,7 @@
 
     @Inject
     public ScalarMarshallerBytePrimitive(final CausewayConfiguration causewayConfiguration) {
-        super(byte.class, Scalars.GraphQLInt, causewayConfiguration);
+        super(byte.class, ExtendedScalars.GraphQLByte, causewayConfiguration);
     }
 
     @Override
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerByteWrapper.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerByteWrapper.java
index 18016d6..0177c48 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerByteWrapper.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerByteWrapper.java
@@ -22,6 +22,7 @@
 import javax.inject.Inject;
 
 import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
 
 import org.springframework.stereotype.Component;
 
@@ -36,7 +37,7 @@
 
     @Inject
     public ScalarMarshallerByteWrapper(final CausewayConfiguration causewayConfiguration) {
-        super(Byte.class, Scalars.GraphQLInt, causewayConfiguration);
+        super(Byte.class, ExtendedScalars.GraphQLByte, causewayConfiguration);
     }
 
     @Override
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerCharacterWrapper.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerCharacterWrapper.java
index e8c96f7..5509bd3 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerCharacterWrapper.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerCharacterWrapper.java
@@ -22,6 +22,7 @@
 import javax.inject.Inject;
 
 import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
 
 import org.springframework.stereotype.Component;
 
@@ -36,7 +37,7 @@
 
     @Inject
     public ScalarMarshallerCharacterWrapper(final CausewayConfiguration causewayConfiguration) {
-        super(Character.class, Scalars.GraphQLString, causewayConfiguration);
+        super(Character.class, ExtendedScalars.GraphQLChar, causewayConfiguration);
     }
 
     @Override
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJdk8LocalTime.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJdk8LocalTime.java
new file mode 100644
index 0000000..fd6360a
--- /dev/null
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJdk8LocalTime.java
@@ -0,0 +1,58 @@
+/*
+ *  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.causeway.viewer.graphql.model.marshallers;
+
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.time.OffsetTime;
+import java.time.format.DateTimeFormatter;
+
+import javax.annotation.Priority;
+import javax.inject.Inject;
+
+import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
+
+import org.joda.time.LocalDateTime;
+
+import org.springframework.stereotype.Component;
+
+import org.apache.causeway.applib.annotation.PriorityPrecedence;
+import org.apache.causeway.core.config.CausewayConfiguration;
+import org.apache.causeway.viewer.graphql.applib.marshallers.ScalarMarshallerAbstract;
+
+
+@Component
+@Priority(PriorityPrecedence.LATE)
+public class ScalarMarshallerJdk8LocalTime extends ScalarMarshallerAbstract<LocalTime> {
+
+    private final CausewayConfiguration.Viewer.Graphql.ScalarMarshaller scalarMarshallerConfig;
+
+    @Inject
+    public ScalarMarshallerJdk8LocalTime(final CausewayConfiguration causewayConfiguration) {
+        super(LocalTime.class, Scalars.GraphQLString, causewayConfiguration);
+        scalarMarshallerConfig = causewayConfiguration.getViewer().getGraphql().getScalarMarshaller();
+    }
+
+    @Override
+    public LocalTime unmarshal(Object graphValue, Class<?> targetType) {
+        String str = (String) graphValue;
+        return LocalTime.parse(str, DateTimeFormatter.ofPattern(scalarMarshallerConfig.getLocalTimeFormat()));
+    }
+}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJdk8OffsetDateTime.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJdk8OffsetDateTime.java
new file mode 100644
index 0000000..7235f4d
--- /dev/null
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJdk8OffsetDateTime.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.causeway.viewer.graphql.model.marshallers;
+
+import java.time.OffsetDateTime;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+
+import javax.annotation.Priority;
+import javax.inject.Inject;
+
+import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
+
+import org.springframework.stereotype.Component;
+
+import org.apache.causeway.applib.annotation.PriorityPrecedence;
+import org.apache.causeway.core.config.CausewayConfiguration;
+import org.apache.causeway.viewer.graphql.applib.marshallers.ScalarMarshallerAbstract;
+
+
+@Component
+@Priority(PriorityPrecedence.LATE)
+public class ScalarMarshallerJdk8OffsetDateTime extends ScalarMarshallerAbstract<OffsetDateTime> {
+
+    private final CausewayConfiguration.Viewer.Graphql.ScalarMarshaller scalarMarshallerConfig;
+
+    @Inject
+    public ScalarMarshallerJdk8OffsetDateTime(final CausewayConfiguration causewayConfiguration) {
+        super(OffsetDateTime.class, ExtendedScalars.DateTime, causewayConfiguration);
+        scalarMarshallerConfig = causewayConfiguration.getViewer().getGraphql().getScalarMarshaller();
+    }
+
+    @Override
+    public OffsetDateTime unmarshal(Object graphValue, Class<?> targetType) {
+        return (OffsetDateTime) graphValue;
+    }
+}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJdk8OffsetTime.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJdk8OffsetTime.java
new file mode 100644
index 0000000..dbb2d2b
--- /dev/null
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJdk8OffsetTime.java
@@ -0,0 +1,52 @@
+/*
+ *  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.causeway.viewer.graphql.model.marshallers;
+
+import java.time.LocalTime;
+import java.time.OffsetTime;
+
+import javax.annotation.Priority;
+import javax.inject.Inject;
+
+import graphql.scalars.ExtendedScalars;
+
+import org.springframework.stereotype.Component;
+
+import org.apache.causeway.applib.annotation.PriorityPrecedence;
+import org.apache.causeway.core.config.CausewayConfiguration;
+import org.apache.causeway.viewer.graphql.applib.marshallers.ScalarMarshallerAbstract;
+
+
+@Component
+@Priority(PriorityPrecedence.LATE)
+public class ScalarMarshallerJdk8OffsetTime extends ScalarMarshallerAbstract<OffsetTime> {
+
+    private final CausewayConfiguration.Viewer.Graphql.ScalarMarshaller scalarMarshallerConfig;
+
+    @Inject
+    public ScalarMarshallerJdk8OffsetTime(final CausewayConfiguration causewayConfiguration) {
+        super(OffsetTime.class, ExtendedScalars.Time, causewayConfiguration);
+        scalarMarshallerConfig = causewayConfiguration.getViewer().getGraphql().getScalarMarshaller();
+    }
+
+    @Override
+    public OffsetTime unmarshal(Object graphValue, Class<?> targetType) {
+        return (OffsetTime) graphValue;
+    }
+}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJodaLocalDate.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJodaLocalDate.java
index 0673966..1fd93a8 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJodaLocalDate.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJodaLocalDate.java
@@ -18,6 +18,8 @@
  */
 package org.apache.causeway.viewer.graphql.model.marshallers;
 
+import java.time.format.DateTimeFormatter;
+
 import javax.annotation.Priority;
 import javax.inject.Inject;
 
@@ -31,6 +33,8 @@
 import org.apache.causeway.core.config.CausewayConfiguration;
 import org.apache.causeway.viewer.graphql.applib.marshallers.ScalarMarshallerAbstract;
 
+import static org.joda.time.format.DateTimeFormat.*;
+
 
 @Component
 @Priority(PriorityPrecedence.LATE)
@@ -47,6 +51,6 @@
     @Override
     public LocalDate unmarshal(Object graphValue, Class<?> targetType) {
         String argumentStr = (String) graphValue;
-        return LocalDate.parse(argumentStr, org.joda.time.format.DateTimeFormat.forPattern(scalarMarshallerConfig.getLocalDateFormat()));
+        return LocalDate.parse(argumentStr, forPattern(scalarMarshallerConfig.getLocalDateFormat()));
     }
 }
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJodaLocalTime.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJodaLocalTime.java
new file mode 100644
index 0000000..b74cb23
--- /dev/null
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJodaLocalTime.java
@@ -0,0 +1,57 @@
+/*
+ *  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.causeway.viewer.graphql.model.marshallers;
+
+
+import javax.annotation.Priority;
+import javax.inject.Inject;
+
+import graphql.Scalars;
+
+import java.time.format.DateTimeFormatter;
+
+import org.joda.time.LocalTime;
+
+import org.springframework.stereotype.Component;
+
+import org.apache.causeway.applib.annotation.PriorityPrecedence;
+import org.apache.causeway.core.config.CausewayConfiguration;
+import org.apache.causeway.viewer.graphql.applib.marshallers.ScalarMarshallerAbstract;
+
+import static org.joda.time.format.DateTimeFormat.forPattern;
+
+
+@Component
+@Priority(PriorityPrecedence.LATE)
+public class ScalarMarshallerJodaLocalTime extends ScalarMarshallerAbstract<LocalTime> {
+
+    private final CausewayConfiguration.Viewer.Graphql.ScalarMarshaller scalarMarshallerConfig;
+
+    @Inject
+    public ScalarMarshallerJodaLocalTime(final CausewayConfiguration causewayConfiguration) {
+        super(LocalTime.class, Scalars.GraphQLString, causewayConfiguration);
+        scalarMarshallerConfig = causewayConfiguration.getViewer().getGraphql().getScalarMarshaller();
+    }
+
+    @Override
+    public LocalTime unmarshal(Object graphValue, Class<?> targetType) {
+        String str = (String) graphValue;
+        return LocalTime.parse(str, forPattern(scalarMarshallerConfig.getLocalTimeFormat()));
+    }
+}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerUuid.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerUuid.java
new file mode 100644
index 0000000..4a820f5
--- /dev/null
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerUuid.java
@@ -0,0 +1,52 @@
+/*
+ *  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.causeway.viewer.graphql.model.marshallers;
+
+import javax.annotation.Priority;
+import javax.inject.Inject;
+
+import graphql.scalars.ExtendedScalars;
+
+import java.util.UUID;
+
+import org.springframework.stereotype.Component;
+
+import org.apache.causeway.applib.annotation.PriorityPrecedence;
+import org.apache.causeway.core.config.CausewayConfiguration;
+import org.apache.causeway.viewer.graphql.applib.marshallers.ScalarMarshallerAbstract;
+
+
+/**
+ * Maps to a string to avoid loss of precision.
+ */
+@Component
+@Priority(PriorityPrecedence.LATE)
+public class ScalarMarshallerUuid extends ScalarMarshallerAbstract<UUID> {
+
+    @Inject
+    public ScalarMarshallerUuid(final CausewayConfiguration causewayConfiguration) {
+        super(UUID.class, ExtendedScalars.UUID, causewayConfiguration);
+    }
+
+    @Override
+    public UUID unmarshal(Object graphValue, Class<?> targetType) {
+        return (UUID)graphValue;
+    }
+
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/calc/Calculator.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/calc/Calculator.java
index 37614c2..867fb6f 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/calc/Calculator.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/calc/Calculator.java
@@ -2,8 +2,14 @@
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.net.URL;
 import java.time.LocalDate;
+import java.time.LocalTime;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
 import java.time.ZonedDateTime;
+import java.util.Locale;
+import java.util.UUID;
 
 import javax.annotation.Priority;
 import javax.inject.Inject;
@@ -18,6 +24,7 @@
 import org.apache.causeway.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
 
 @Named("university.calc.Calculator")
 @DomainService(nature= NatureOfService.VIEW)
@@ -86,25 +93,45 @@
     }
 
     @Action(semantics = SemanticsOf.SAFE)
-    public LocalDate plusDays(LocalDate date, int numDays) {
+    public LocalDate jdk8LocalPlusDays(LocalDate date, int numDays) {
         return date.plusDays(numDays);
     }
 
     @Action(semantics = SemanticsOf.SAFE)
-    public ZonedDateTime plusDaysAndHoursAndMinutes(ZonedDateTime dateTime, int numDays, int numHours, int numMinutes) {
+    public OffsetDateTime jdk8OffsetPlusDaysAndHoursAndMinutes(OffsetDateTime dateTime, int numDays, int numHours, int numMinutes) {
         return dateTime.plusDays(numDays).plusHours(numHours).plusMinutes(numMinutes);
     }
 
     @Action(semantics = SemanticsOf.SAFE)
-    public org.joda.time.LocalDate plusJodaDays(org.joda.time.LocalDate date, int numDays) {
+    public ZonedDateTime jdk8ZonedPlusDaysAndHoursAndMinutes(ZonedDateTime dateTime, int numDays, int numHours, int numMinutes) {
+        return dateTime.plusDays(numDays).plusHours(numHours).plusMinutes(numMinutes);
+    }
+
+    @Action(semantics = SemanticsOf.SAFE)
+    public OffsetTime jdk8OffsetPlusHoursAndMinutes(OffsetTime time, int numHours, int numMinutes) {
+        return time.plusHours(numHours).plusMinutes(numMinutes);
+    }
+
+    @Action(semantics = SemanticsOf.SAFE)
+    public LocalTime jdk8LocalPlusHoursAndMinutes(LocalTime time, int numHours, int numMinutes) {
+        return time.plusHours(numHours).plusMinutes(numMinutes);
+    }
+
+    @Action(semantics = SemanticsOf.SAFE)
+    public org.joda.time.LocalDate jodaLocalPlusDays(org.joda.time.LocalDate date, int numDays) {
         return date.plusDays(numDays);
     }
 
     @Action(semantics = SemanticsOf.SAFE)
-    public org.joda.time.DateTime plusJodaDaysAndHoursAndMinutes(org.joda.time.DateTime dateTime, int numDays, int numHours, int numMinutes) {
+    public org.joda.time.DateTime jodaPlusDaysAndHoursAndMinutes(org.joda.time.DateTime dateTime, int numDays, int numHours, int numMinutes) {
         return dateTime.plusDays(numDays).plusHours(numHours).plusMinutes(numMinutes);
     }
 
+    @Action(semantics = SemanticsOf.SAFE)
+    public org.joda.time.LocalTime jodaLocalPlusHoursAndMinutes(org.joda.time.LocalTime time, int numHours, int numMinutes) {
+        return time.plusHours(numHours).plusMinutes(numMinutes);
+    }
+
 
     @Action(semantics = SemanticsOf.SAFE)
     public boolean and(boolean x, boolean y) {
@@ -131,4 +158,21 @@
         return prefix + suffix;
     }
 
+    @Action(semantics = SemanticsOf.SAFE)
+    public UUID someUuid() {
+        return UUID.fromString("91be0d2d-1752-4962-ad2c-89a7ef73a656");
+    }
+
+    @SneakyThrows
+    @Action(semantics = SemanticsOf.SAFE)
+    public URL someUrl() {
+        return new URL("https://causeway.apache.org");
+    }
+
+    @SneakyThrows
+    @Action(semantics = SemanticsOf.SAFE)
+    public Locale someLocale() {
+        return Locale.UK;
+    }
+
 }
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_big_decimals._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_big_decimals._.gql
index 8020e05..a397c75 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_big_decimals._.gql
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_big_decimals._.gql
@@ -1,7 +1,7 @@
 {
   university_calc_Calculator {
-    addBigIntegers {
-      invoke(x: "1", y: "2")
+    addBigDecimals {
+      invoke(x: "1.1", y: "2.2")
     }
   }
 }
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_big_decimals.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_big_decimals.approved.json
index 41da73a..6e00f36 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_big_decimals.approved.json
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_big_decimals.approved.json
@@ -1,8 +1,8 @@
 {
   "data" : {
     "university_calc_Calculator" : {
-      "addBigIntegers" : {
-        "invoke" : "3"
+      "addBigDecimals" : {
+        "invoke" : "3.3"
       }
     }
   }
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_joda_days._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_local_plus_days._.gql
similarity index 78%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_joda_days._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_local_plus_days._.gql
index 61b56a4..50abc29 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_joda_days._.gql
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_local_plus_days._.gql
@@ -1,6 +1,6 @@
 {
   university_calc_Calculator {
-    plusJodaDays {
+    jdk8LocalPlusDays {
       invoke(date: "2024-01-26", numDays: 2)
     }
   }
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_days.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_local_plus_days.approved.json
similarity index 77%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_days.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_local_plus_days.approved.json
index d2f2509..4d50ad3 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_days.approved.json
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_local_plus_days.approved.json
@@ -1,7 +1,7 @@
 {
   "data" : {
     "university_calc_Calculator" : {
-      "plusDays" : {
+      "jdk8LocalPlusDays" : {
         "invoke" : "2024-01-28"
       }
     }
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_local_plus_hours_and_minutes._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_local_plus_hours_and_minutes._.gql
new file mode 100644
index 0000000..1b6f907
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_local_plus_hours_and_minutes._.gql
@@ -0,0 +1,7 @@
+{
+  university_calc_Calculator {
+    jdk8LocalPlusHoursAndMinutes {
+      invoke(time: "13:35:05", numHours: 2, numMinutes: 20)
+    }
+  }
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_local_plus_hours_and_minutes.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_local_plus_hours_and_minutes.approved.json
new file mode 100644
index 0000000..9ad6ffd
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_local_plus_hours_and_minutes.approved.json
@@ -0,0 +1,9 @@
+{
+  "data" : {
+    "university_calc_Calculator" : {
+      "jdk8LocalPlusHoursAndMinutes" : {
+        "invoke" : "15:55:05"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_offset_plus_days_and_hours_and_minutes._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_offset_plus_days_and_hours_and_minutes._.gql
new file mode 100644
index 0000000..357cfa5
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_offset_plus_days_and_hours_and_minutes._.gql
@@ -0,0 +1,7 @@
+{
+  university_calc_Calculator {
+    jdk8OffsetPlusDaysAndHoursAndMinutes {
+      invoke(dateTime: "2024-08-12T04:05:20-01:00", numDays: 3, numHours: 2, numMinutes: 15)
+    }
+  }
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_offset_plus_days_and_hours_and_minutes.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_offset_plus_days_and_hours_and_minutes.approved.json
new file mode 100644
index 0000000..a6f97ef
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_offset_plus_days_and_hours_and_minutes.approved.json
@@ -0,0 +1,9 @@
+{
+  "data" : {
+    "university_calc_Calculator" : {
+      "jdk8OffsetPlusDaysAndHoursAndMinutes" : {
+        "invoke" : "2024-08-15T06:20:20.000-01:00"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_offset_plus_hours_and_minutes._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_offset_plus_hours_and_minutes._.gql
new file mode 100644
index 0000000..7fb48ee
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_offset_plus_hours_and_minutes._.gql
@@ -0,0 +1,7 @@
+{
+  university_calc_Calculator {
+    jdk8OffsetPlusHoursAndMinutes {
+      invoke(time: "04:05:20-01:00", numHours: 2, numMinutes: 15)
+    }
+  }
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_offset_plus_hours_and_minutes.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_offset_plus_hours_and_minutes.approved.json
new file mode 100644
index 0000000..4d23d7a
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_offset_plus_hours_and_minutes.approved.json
@@ -0,0 +1,9 @@
+{
+  "data" : {
+    "university_calc_Calculator" : {
+      "jdk8OffsetPlusHoursAndMinutes" : {
+        "invoke" : "06:20:20-01:00"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_zoned_plus_days_and_hours_and_minutes._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_zoned_plus_days_and_hours_and_minutes._.gql
new file mode 100644
index 0000000..35a6229
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_zoned_plus_days_and_hours_and_minutes._.gql
@@ -0,0 +1,7 @@
+{
+  university_calc_Calculator {
+    jdk8ZonedPlusDaysAndHoursAndMinutes {
+      invoke(dateTime: "2022-04-15T08:20:10+02:00", numDays: 3, numHours: 2, numMinutes: 15)
+    }
+  }
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_zoned_plus_days_and_hours_and_minutes.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_zoned_plus_days_and_hours_and_minutes.approved.json
new file mode 100644
index 0000000..d8ce668
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.jdk8_zoned_plus_days_and_hours_and_minutes.approved.json
@@ -0,0 +1,9 @@
+{
+  "data" : {
+    "university_calc_Calculator" : {
+      "jdk8ZonedPlusDaysAndHoursAndMinutes" : {
+        "invoke" : "2022-04-18T10:35:10+02:00"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_joda_days._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_local_plus_days._.gql
similarity index 78%
copy from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_joda_days._.gql
copy to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_local_plus_days._.gql
index 61b56a4..6cd2d75 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_joda_days._.gql
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_local_plus_days._.gql
@@ -1,6 +1,6 @@
 {
   university_calc_Calculator {
-    plusJodaDays {
+    jodaLocalPlusDays {
       invoke(date: "2024-01-26", numDays: 2)
     }
   }
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_days.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_local_plus_days.approved.json
similarity index 77%
copy from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_days.approved.json
copy to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_local_plus_days.approved.json
index d2f2509..769ebd4 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_days.approved.json
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_local_plus_days.approved.json
@@ -1,7 +1,7 @@
 {
   "data" : {
     "university_calc_Calculator" : {
-      "plusDays" : {
+      "jodaLocalPlusDays" : {
         "invoke" : "2024-01-28"
       }
     }
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_local_plus_hours_and_minutes._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_local_plus_hours_and_minutes._.gql
new file mode 100644
index 0000000..e47a2a4
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_local_plus_hours_and_minutes._.gql
@@ -0,0 +1,7 @@
+{
+  university_calc_Calculator {
+    jodaLocalPlusHoursAndMinutes {
+      invoke(time: "13:35:05", numHours: 2, numMinutes: 20)
+    }
+  }
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_local_plus_hours_and_minutes.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_local_plus_hours_and_minutes.approved.json
new file mode 100644
index 0000000..0aa97a5
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_local_plus_hours_and_minutes.approved.json
@@ -0,0 +1,9 @@
+{
+  "data" : {
+    "university_calc_Calculator" : {
+      "jodaLocalPlusHoursAndMinutes" : {
+        "invoke" : "15:55:05.000"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_joda_days._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_plus_days._.gql
similarity index 78%
copy from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_joda_days._.gql
copy to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_plus_days._.gql
index 61b56a4..6cd2d75 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_joda_days._.gql
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_plus_days._.gql
@@ -1,6 +1,6 @@
 {
   university_calc_Calculator {
-    plusJodaDays {
+    jodaLocalPlusDays {
       invoke(date: "2024-01-26", numDays: 2)
     }
   }
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_days.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_plus_days.approved.json
similarity index 77%
copy from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_days.approved.json
copy to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_plus_days.approved.json
index d2f2509..769ebd4 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_days.approved.json
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.joda_plus_days.approved.json
@@ -1,7 +1,7 @@
 {
   "data" : {
     "university_calc_Calculator" : {
-      "plusDays" : {
+      "jodaLocalPlusDays" : {
         "invoke" : "2024-01-28"
       }
     }
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_days._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_days._.gql
deleted file mode 100644
index c631e57..0000000
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_days._.gql
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  university_calc_Calculator {
-    plusDays {
-      invoke(date: "2024-01-26", numDays: 2)
-    }
-  }
-}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_joda_days.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_joda_days.approved.json
deleted file mode 100644
index 6d1ebd2..0000000
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_joda_days.approved.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "data" : {
-    "university_calc_Calculator" : {
-      "plusJodaDays" : {
-        "invoke" : "2024-01-28"
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_locale._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_locale._.gql
new file mode 100644
index 0000000..5286646
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_locale._.gql
@@ -0,0 +1,7 @@
+{
+  university_calc_Calculator {
+    someLocale {
+      invoke
+    }
+  }
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_locale.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_locale.approved.json
new file mode 100644
index 0000000..64cee05
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_locale.approved.json
@@ -0,0 +1,9 @@
+{
+  "data" : {
+    "university_calc_Calculator" : {
+      "someLocale" : {
+        "invoke" : "en_GB"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_url._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_url._.gql
new file mode 100644
index 0000000..d1dc947
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_url._.gql
@@ -0,0 +1,7 @@
+{
+  university_calc_Calculator {
+    someUrl {
+      invoke
+    }
+  }
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_url.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_url.approved.json
new file mode 100644
index 0000000..8d07712
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_url.approved.json
@@ -0,0 +1,9 @@
+{
+  "data" : {
+    "university_calc_Calculator" : {
+      "someUrl" : {
+        "invoke" : "https://causeway.apache.org"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_uuid._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_uuid._.gql
new file mode 100644
index 0000000..5d32cca
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_uuid._.gql
@@ -0,0 +1,7 @@
+{
+  university_calc_Calculator {
+    someUuid {
+      invoke
+    }
+  }
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_uuid.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_uuid.approved.json
new file mode 100644
index 0000000..92ef0f4
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.some_uuid.approved.json
@@ -0,0 +1,9 @@
+{
+  "data" : {
+    "university_calc_Calculator" : {
+      "someUuid" : {
+        "invoke" : "91be0d2d-1752-4962-ad2c-89a7ef73a656"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/viewers/graphql/test/src/test/resources/schema.gql b/viewers/graphql/test/src/test/resources/schema.gql
index a6b6830..2e857f1 100644
--- a/viewers/graphql/test/src/test/resources/schema.gql
+++ b/viewers/graphql/test/src/test/resources/schema.gql
@@ -1872,13 +1872,20 @@
   addShorts: university_calc_Calculator__addShorts__gqlv_action
   and: university_calc_Calculator__and__gqlv_action
   concat: university_calc_Calculator__concat__gqlv_action
+  jdk8LocalPlusDays: university_calc_Calculator__jdk8LocalPlusDays__gqlv_action
+  jdk8LocalPlusHoursAndMinutes: university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__gqlv_action
+  jdk8OffsetPlusDaysAndHoursAndMinutes: university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__gqlv_action
+  jdk8OffsetPlusHoursAndMinutes: university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__gqlv_action
+  jdk8ZonedPlusDaysAndHoursAndMinutes: university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__gqlv_action
+  jodaLocalPlusDays: university_calc_Calculator__jodaLocalPlusDays__gqlv_action
+  jodaLocalPlusHoursAndMinutes: university_calc_Calculator__jodaLocalPlusHoursAndMinutes__gqlv_action
+  jodaPlusDaysAndHoursAndMinutes: university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__gqlv_action
   nextMonth: university_calc_Calculator__nextMonth__gqlv_action
   not: university_calc_Calculator__not__gqlv_action
   or: university_calc_Calculator__or__gqlv_action
-  plusDays: university_calc_Calculator__plusDays__gqlv_action
-  plusDaysAndHoursAndMinutes: university_calc_Calculator__plusDaysAndHoursAndMinutes__gqlv_action
-  plusJodaDays: university_calc_Calculator__plusJodaDays__gqlv_action
-  plusJodaDaysAndHoursAndMinutes: university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__gqlv_action
+  someLocale: university_calc_Calculator__someLocale__gqlv_action
+  someUrl: university_calc_Calculator__someUrl__gqlv_action
+  someUuid: university_calc_Calculator__someUuid__gqlv_action
 }
 
 type university_calc_Calculator__addBigDecimals__gqlv_action {
@@ -1938,9 +1945,9 @@
 type university_calc_Calculator__addByteWrappers__gqlv_action {
   disabled: String
   hidden: Boolean
-  invoke(x: Int!, y: Int): Int
+  invoke(x: Byte!, y: Byte): Int
   params: university_calc_Calculator__addByteWrappers__gqlv_action_params
-  validate(x: Int, y: Int): String
+  validate(x: Byte, y: Byte): String
 }
 
 type university_calc_Calculator__addByteWrappers__gqlv_action_params {
@@ -1950,24 +1957,24 @@
 
 type university_calc_Calculator__addByteWrappers__x__gqlv_action_parameter {
   datatype: String
-  disabled(x: Int): String
+  disabled(x: Byte): String
   hidden: Boolean
   validity: String
 }
 
 type university_calc_Calculator__addByteWrappers__y__gqlv_action_parameter {
   datatype: String
-  disabled(x: Int, y: Int): String
-  hidden(x: Int): Boolean
+  disabled(x: Byte, y: Byte): String
+  hidden(x: Byte): Boolean
   validity: String
 }
 
 type university_calc_Calculator__addBytes__gqlv_action {
   disabled: String
   hidden: Boolean
-  invoke(x: Int!, y: Int!): Int
+  invoke(x: Byte!, y: Byte!): Byte
   params: university_calc_Calculator__addBytes__gqlv_action_params
-  validate(x: Int, y: Int): String
+  validate(x: Byte, y: Byte): String
 }
 
 type university_calc_Calculator__addBytes__gqlv_action_params {
@@ -1977,15 +1984,15 @@
 
 type university_calc_Calculator__addBytes__x__gqlv_action_parameter {
   datatype: String
-  disabled(x: Int): String
+  disabled(x: Byte): String
   hidden: Boolean
   validity: String
 }
 
 type university_calc_Calculator__addBytes__y__gqlv_action_parameter {
   datatype: String
-  disabled(x: Int, y: Int): String
-  hidden(x: Int): Boolean
+  disabled(x: Byte, y: Byte): String
+  hidden(x: Byte): Boolean
   validity: String
 }
 
@@ -2259,6 +2266,294 @@
   validity: String
 }
 
+type university_calc_Calculator__jdk8LocalPlusDays__date__gqlv_action_parameter {
+  datatype: String
+  disabled(date: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jdk8LocalPlusDays__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(date: String!, numDays: Int!): String
+  params: university_calc_Calculator__jdk8LocalPlusDays__gqlv_action_params
+  validate(date: String, numDays: Int): String
+}
+
+type university_calc_Calculator__jdk8LocalPlusDays__gqlv_action_params {
+  date: university_calc_Calculator__jdk8LocalPlusDays__date__gqlv_action_parameter
+  numDays: university_calc_Calculator__jdk8LocalPlusDays__numDays__gqlv_action_parameter
+}
+
+type university_calc_Calculator__jdk8LocalPlusDays__numDays__gqlv_action_parameter {
+  datatype: String
+  disabled(date: String, numDays: Int): String
+  hidden(date: String): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(numHours: Int!, numMinutes: Int!, time: String!): String
+  params: university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__gqlv_action_params
+  validate(numHours: Int, numMinutes: Int, time: String): String
+}
+
+type university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__gqlv_action_params {
+  numHours: university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__numHours__gqlv_action_parameter
+  numMinutes: university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__numMinutes__gqlv_action_parameter
+  time: university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__time__gqlv_action_parameter
+}
+
+type university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__numHours__gqlv_action_parameter {
+  datatype: String
+  disabled(numHours: Int, time: String): String
+  hidden(time: String): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__numMinutes__gqlv_action_parameter {
+  datatype: String
+  disabled(numHours: Int, numMinutes: Int, time: String): String
+  hidden(numHours: Int, time: String): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jdk8LocalPlusHoursAndMinutes__time__gqlv_action_parameter {
+  datatype: String
+  disabled(time: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: DateTime): String
+  hidden: Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(dateTime: DateTime!, numDays: Int!, numHours: Int!, numMinutes: Int!): DateTime
+  params: university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__gqlv_action_params
+  validate(dateTime: DateTime, numDays: Int, numHours: Int, numMinutes: Int): String
+}
+
+type university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__gqlv_action_params {
+  dateTime: university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter
+  numDays: university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__numDays__gqlv_action_parameter
+  numHours: university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__numHours__gqlv_action_parameter
+  numMinutes: university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter
+}
+
+type university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__numDays__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: DateTime, numDays: Int): String
+  hidden(dateTime: DateTime): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__numHours__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: DateTime, numDays: Int, numHours: Int): String
+  hidden(dateTime: DateTime, numDays: Int): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jdk8OffsetPlusDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: DateTime, numDays: Int, numHours: Int, numMinutes: Int): String
+  hidden(dateTime: DateTime, numDays: Int, numHours: Int): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(numHours: Int!, numMinutes: Int!, time: Time!): Time
+  params: university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__gqlv_action_params
+  validate(numHours: Int, numMinutes: Int, time: Time): String
+}
+
+type university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__gqlv_action_params {
+  numHours: university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__numHours__gqlv_action_parameter
+  numMinutes: university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__numMinutes__gqlv_action_parameter
+  time: university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__time__gqlv_action_parameter
+}
+
+type university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__numHours__gqlv_action_parameter {
+  datatype: String
+  disabled(numHours: Int, time: Time): String
+  hidden(time: Time): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__numMinutes__gqlv_action_parameter {
+  datatype: String
+  disabled(numHours: Int, numMinutes: Int, time: Time): String
+  hidden(numHours: Int, time: Time): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jdk8OffsetPlusHoursAndMinutes__time__gqlv_action_parameter {
+  datatype: String
+  disabled(time: Time): String
+  hidden: Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(dateTime: String!, numDays: Int!, numHours: Int!, numMinutes: Int!): String
+  params: university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__gqlv_action_params
+  validate(dateTime: String, numDays: Int, numHours: Int, numMinutes: Int): String
+}
+
+type university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__gqlv_action_params {
+  dateTime: university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter
+  numDays: university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__numDays__gqlv_action_parameter
+  numHours: university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__numHours__gqlv_action_parameter
+  numMinutes: university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter
+}
+
+type university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__numDays__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int): String
+  hidden(dateTime: String): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__numHours__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int, numHours: Int): String
+  hidden(dateTime: String, numDays: Int): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jdk8ZonedPlusDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int, numHours: Int, numMinutes: Int): String
+  hidden(dateTime: String, numDays: Int, numHours: Int): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jodaLocalPlusDays__date__gqlv_action_parameter {
+  datatype: String
+  disabled(date: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jodaLocalPlusDays__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(date: String!, numDays: Int!): String
+  params: university_calc_Calculator__jodaLocalPlusDays__gqlv_action_params
+  validate(date: String, numDays: Int): String
+}
+
+type university_calc_Calculator__jodaLocalPlusDays__gqlv_action_params {
+  date: university_calc_Calculator__jodaLocalPlusDays__date__gqlv_action_parameter
+  numDays: university_calc_Calculator__jodaLocalPlusDays__numDays__gqlv_action_parameter
+}
+
+type university_calc_Calculator__jodaLocalPlusDays__numDays__gqlv_action_parameter {
+  datatype: String
+  disabled(date: String, numDays: Int): String
+  hidden(date: String): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jodaLocalPlusHoursAndMinutes__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(numHours: Int!, numMinutes: Int!, time: String!): String
+  params: university_calc_Calculator__jodaLocalPlusHoursAndMinutes__gqlv_action_params
+  validate(numHours: Int, numMinutes: Int, time: String): String
+}
+
+type university_calc_Calculator__jodaLocalPlusHoursAndMinutes__gqlv_action_params {
+  numHours: university_calc_Calculator__jodaLocalPlusHoursAndMinutes__numHours__gqlv_action_parameter
+  numMinutes: university_calc_Calculator__jodaLocalPlusHoursAndMinutes__numMinutes__gqlv_action_parameter
+  time: university_calc_Calculator__jodaLocalPlusHoursAndMinutes__time__gqlv_action_parameter
+}
+
+type university_calc_Calculator__jodaLocalPlusHoursAndMinutes__numHours__gqlv_action_parameter {
+  datatype: String
+  disabled(numHours: Int, time: String): String
+  hidden(time: String): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jodaLocalPlusHoursAndMinutes__numMinutes__gqlv_action_parameter {
+  datatype: String
+  disabled(numHours: Int, numMinutes: Int, time: String): String
+  hidden(numHours: Int, time: String): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jodaLocalPlusHoursAndMinutes__time__gqlv_action_parameter {
+  datatype: String
+  disabled(time: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(dateTime: String!, numDays: Int!, numHours: Int!, numMinutes: Int!): String
+  params: university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__gqlv_action_params
+  validate(dateTime: String, numDays: Int, numHours: Int, numMinutes: Int): String
+}
+
+type university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__gqlv_action_params {
+  dateTime: university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter
+  numDays: university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__numDays__gqlv_action_parameter
+  numHours: university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__numHours__gqlv_action_parameter
+  numMinutes: university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter
+}
+
+type university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__numDays__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int): String
+  hidden(dateTime: String): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__numHours__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int, numHours: Int): String
+  hidden(dateTime: String, numDays: Int): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__jodaPlusDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int, numHours: Int, numMinutes: Int): String
+  hidden(dateTime: String, numDays: Int, numHours: Int): Boolean
+  validity: String
+}
+
 type university_calc_Calculator__nextMonth__gqlv_action {
   disabled: String
   hidden: Boolean
@@ -2325,144 +2620,25 @@
   validity: String
 }
 
-type university_calc_Calculator__plusDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter {
-  datatype: String
-  disabled(dateTime: String): String
-  hidden: Boolean
-  validity: String
-}
-
-type university_calc_Calculator__plusDaysAndHoursAndMinutes__gqlv_action {
+type university_calc_Calculator__someLocale__gqlv_action {
   disabled: String
   hidden: Boolean
-  invoke(dateTime: String!, numDays: Int!, numHours: Int!, numMinutes: Int!): String
-  params: university_calc_Calculator__plusDaysAndHoursAndMinutes__gqlv_action_params
-  validate(dateTime: String, numDays: Int, numHours: Int, numMinutes: Int): String
+  invoke: String
+  validate: String
 }
 
-type university_calc_Calculator__plusDaysAndHoursAndMinutes__gqlv_action_params {
-  dateTime: university_calc_Calculator__plusDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter
-  numDays: university_calc_Calculator__plusDaysAndHoursAndMinutes__numDays__gqlv_action_parameter
-  numHours: university_calc_Calculator__plusDaysAndHoursAndMinutes__numHours__gqlv_action_parameter
-  numMinutes: university_calc_Calculator__plusDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter
-}
-
-type university_calc_Calculator__plusDaysAndHoursAndMinutes__numDays__gqlv_action_parameter {
-  datatype: String
-  disabled(dateTime: String, numDays: Int): String
-  hidden(dateTime: String): Boolean
-  validity: String
-}
-
-type university_calc_Calculator__plusDaysAndHoursAndMinutes__numHours__gqlv_action_parameter {
-  datatype: String
-  disabled(dateTime: String, numDays: Int, numHours: Int): String
-  hidden(dateTime: String, numDays: Int): Boolean
-  validity: String
-}
-
-type university_calc_Calculator__plusDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter {
-  datatype: String
-  disabled(dateTime: String, numDays: Int, numHours: Int, numMinutes: Int): String
-  hidden(dateTime: String, numDays: Int, numHours: Int): Boolean
-  validity: String
-}
-
-type university_calc_Calculator__plusDays__date__gqlv_action_parameter {
-  datatype: String
-  disabled(date: Date): String
-  hidden: Boolean
-  validity: String
-}
-
-type university_calc_Calculator__plusDays__gqlv_action {
+type university_calc_Calculator__someUrl__gqlv_action {
   disabled: String
   hidden: Boolean
-  invoke(date: Date!, numDays: Int!): Date
-  params: university_calc_Calculator__plusDays__gqlv_action_params
-  validate(date: Date, numDays: Int): String
+  invoke: String
+  validate: String
 }
 
-type university_calc_Calculator__plusDays__gqlv_action_params {
-  date: university_calc_Calculator__plusDays__date__gqlv_action_parameter
-  numDays: university_calc_Calculator__plusDays__numDays__gqlv_action_parameter
-}
-
-type university_calc_Calculator__plusDays__numDays__gqlv_action_parameter {
-  datatype: String
-  disabled(date: Date, numDays: Int): String
-  hidden(date: Date): Boolean
-  validity: String
-}
-
-type university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter {
-  datatype: String
-  disabled(dateTime: String): String
-  hidden: Boolean
-  validity: String
-}
-
-type university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__gqlv_action {
+type university_calc_Calculator__someUuid__gqlv_action {
   disabled: String
   hidden: Boolean
-  invoke(dateTime: String!, numDays: Int!, numHours: Int!, numMinutes: Int!): String
-  params: university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__gqlv_action_params
-  validate(dateTime: String, numDays: Int, numHours: Int, numMinutes: Int): String
-}
-
-type university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__gqlv_action_params {
-  dateTime: university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter
-  numDays: university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__numDays__gqlv_action_parameter
-  numHours: university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__numHours__gqlv_action_parameter
-  numMinutes: university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter
-}
-
-type university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__numDays__gqlv_action_parameter {
-  datatype: String
-  disabled(dateTime: String, numDays: Int): String
-  hidden(dateTime: String): Boolean
-  validity: String
-}
-
-type university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__numHours__gqlv_action_parameter {
-  datatype: String
-  disabled(dateTime: String, numDays: Int, numHours: Int): String
-  hidden(dateTime: String, numDays: Int): Boolean
-  validity: String
-}
-
-type university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter {
-  datatype: String
-  disabled(dateTime: String, numDays: Int, numHours: Int, numMinutes: Int): String
-  hidden(dateTime: String, numDays: Int, numHours: Int): Boolean
-  validity: String
-}
-
-type university_calc_Calculator__plusJodaDays__date__gqlv_action_parameter {
-  datatype: String
-  disabled(date: String): String
-  hidden: Boolean
-  validity: String
-}
-
-type university_calc_Calculator__plusJodaDays__gqlv_action {
-  disabled: String
-  hidden: Boolean
-  invoke(date: String!, numDays: Int!): String
-  params: university_calc_Calculator__plusJodaDays__gqlv_action_params
-  validate(date: String, numDays: Int): String
-}
-
-type university_calc_Calculator__plusJodaDays__gqlv_action_params {
-  date: university_calc_Calculator__plusJodaDays__date__gqlv_action_parameter
-  numDays: university_calc_Calculator__plusJodaDays__numDays__gqlv_action_parameter
-}
-
-type university_calc_Calculator__plusJodaDays__numDays__gqlv_action_parameter {
-  datatype: String
-  disabled(date: String, numDays: Int): String
-  hidden(date: String): Boolean
-  validity: String
+  invoke: UUID
+  validate: String
 }
 
 "University department specializing in a field of study"
@@ -2970,12 +3146,21 @@
   SENIOR_LECTURER
 }
 
-"An RFC-3339 compliant Full Date Scalar"
-scalar Date
+"An 8-bit signed integer"
+scalar Byte
+
+"An RFC-3339 compliant DateTime Scalar"
+scalar DateTime
 
 "A 16-bit signed integer"
 scalar Short
 
+"An RFC-3339 compliant Full Time Scalar"
+scalar Time
+
+"A universally unique identifier compliant UUID Scalar"
+scalar UUID
+
 input causeway_applib_DomainObjectList__gqlv_input {
   id: ID
   ref: String