[isis] 01/04: ISIS-1939: overrides ObjectInputStream's class-loading to use Isis' default class-loader
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 ce91cd599a2f427a35698829c8b36e236fd1d82d Author: Andi HuberAuthorDate: Fri Apr 27 13:18:51 2018 +0200 ISIS-1939: overrides ObjectInputStream's class-loading to use Isis' default class-loader --- .../applib/internal/memento/_Mementos_MementoDefault.java | 13 - 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/core/applib/src/main/java/org/apache/isis/applib/internal/memento/_Mementos_MementoDefault.java b/core/applib/src/main/java/org/apache/isis/applib/internal/memento/_Mementos_MementoDefault.java index 9b58f00..deb3af0 100644 --- a/core/applib/src/main/java/org/apache/isis/applib/internal/memento/_Mementos_MementoDefault.java +++ b/core/applib/src/main/java/org/apache/isis/applib/internal/memento/_Mementos_MementoDefault.java @@ -21,8 +21,10 @@ package org.apache.isis.applib.internal.memento; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.io.ObjectStreamClass; import java.io.Serializable; import java.util.Map; import java.util.Objects; @@ -34,6 +36,7 @@ import org.apache.isis.applib.internal.base._Casts; import org.apache.isis.applib.internal.base._NullSafe; import org.apache.isis.applib.internal.collections._Maps; import org.apache.isis.applib.internal.collections._Sets; +import org.apache.isis.applib.internal.context._Context; import org.apache.isis.applib.internal.memento._Mementos.Memento; import org.apache.isis.applib.internal.memento._Mementos.SerializingAdapter; import org.apache.isis.applib.services.urlencoding.UrlEncodingService; @@ -108,7 +111,15 @@ class _Mementos_MementoDefault implements _Mementos.Memento { if(_NullSafe.isEmpty(str)) { return null; } - try(ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(codec.decode(str { + try(ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(codec.decode(str))) { + //override ObjectInputStream's classloading + protected Class resolveClass(ObjectStreamClass desc) + throws IOException, ClassNotFoundException + { + String name = desc.getName(); + return Class.forName(name, false, _Context.getDefaultClassLoader()); + } + }) { // read in the entire map final Map valuesByKey = _Casts.uncheckedCast(ois.readObject()); return new _Mementos_MementoDefault(codec, serializer, valuesByKey); -- To stop receiving notification emails like this one, please contact ahu...@apache.org.
[isis] branch master updated (9340178 -> 9a51b98)
This is an automated email from the ASF dual-hosted git repository. ahuber pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/isis.git. from 9340178 ISIS-898 remove temporary class new ce91cd5 ISIS-1939: overrides ObjectInputStream's class-loading to use Isis' default class-loader new 3bc8e4f ISIS-1940 uses the invocation-preprocessor for support method validation new e7224f4 ISIS-1942 New Facet: XmlAccessorTypeFacet new 9a51b98 ISIS-1940 let the SortedSet-of-list adapter return a comparator=null The 4 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: .../collections/_Collections_SortedSetOfList.java | 5 +- .../internal/memento/_Mementos_MementoDefault.java | 13 - .../isis/core/commons/lang/MethodExtensions.java | 2 +- .../lang/MethodInvocationPreprocessor.java}| 16 +-- .../isis/core/metamodel/facets/Annotations.java| 2 + ...ctionInvocationFacetForDomainEventAbstract.java | 5 +- ...pterFacetFactory.java => JaxbFacetFactory.java} | 55 ++ .../XmlAccessorTypeFacet.java} | 8 ++-- ...ault.java => XmlAccessorTypeFacetAbstract.java} | 19 +--- ...fault.java => XmlAccessorTypeFacetDefault.java} | 11 +++-- .../specloader/specimpl/ObjectActionDefault.java | 1 + .../dflt/ProgrammingModelFacetsJava5.java | 4 +- 12 files changed, 107 insertions(+), 34 deletions(-) rename core/metamodel/src/main/java/org/apache/isis/core/{metamodel/facets/actions/action/invocation/RelaxedMethodInvoker.java => commons/lang/MethodInvocationPreprocessor.java} (85%) rename core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/{XmlJavaTypeAdapterFacetFactory.java => JaxbFacetFactory.java} (90%) copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/{collparam/semantics/CollectionSemanticsFacet.java => jaxb/XmlAccessorTypeFacet.java} (78%) copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/{XmlJavaTypeAdapterFacetDefault.java => XmlAccessorTypeFacetAbstract.java} (66%) copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/{XmlTransientFacetDefault.java => XmlAccessorTypeFacetDefault.java} (76%) -- To stop receiving notification emails like this one, please contact ahu...@apache.org.
[isis] 03/04: ISIS-1942 New Facet: XmlAccessorTypeFacet
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 e7224f42c7740de987be726f9deed03914b2a1da Author: Andi HuberAuthorDate: Fri Apr 27 20:41:08 2018 +0200 ISIS-1942 New Facet: XmlAccessorTypeFacet also adds XmlTransient to the list the 'Annotations' scanner searches fields for --- .../isis/core/metamodel/facets/Annotations.java| 2 + ...pterFacetFactory.java => JaxbFacetFactory.java} | 55 ++ .../facets/jaxb/XmlAccessorTypeFacet.java | 31 .../facets/jaxb/XmlAccessorTypeFacetAbstract.java | 40 .../facets/jaxb/XmlAccessorTypeFacetDefault.java | 33 + .../dflt/ProgrammingModelFacetsJava5.java | 4 +- 6 files changed, 154 insertions(+), 11 deletions(-) diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java index 972f06e..1b92a47 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java @@ -33,6 +33,7 @@ import java.util.function.Predicate; import java.util.stream.Collectors; import javax.validation.constraints.Pattern; +import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.apache.isis.applib.annotation.Collection; @@ -583,6 +584,7 @@ public final class Annotations { javax.annotation.Nullable.class, Title.class, XmlJavaTypeAdapter.class, +XmlTransient.class, javax.jdo.annotations.Column.class ) ); diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlJavaTypeAdapterFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbFacetFactory.java similarity index 90% rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlJavaTypeAdapterFacetFactory.java rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbFacetFactory.java index 1477cb8..b3fe9f0 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlJavaTypeAdapterFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbFacetFactory.java @@ -23,7 +23,10 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.List; +import java.util.Optional; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @@ -51,7 +54,7 @@ import com.google.common.collect.Lists; /** * just adds a validator */ -public class XmlJavaTypeAdapterFacetFactory extends FacetFactoryAbstract +public class JaxbFacetFactory extends FacetFactoryAbstract implements MetaModelValidatorRefiner { public static final String ISIS_REFLECTOR_VALIDATOR_JAXB_VIEW_MODEL_NOT_ABSTRACT = @@ -74,42 +77,74 @@ public class XmlJavaTypeAdapterFacetFactory extends FacetFactoryAbstract "isis.reflector.validator.jaxbViewModelDateTimeTypeAdapter"; public static final boolean ISIS_REFLECTOR_VALIDATOR_JAXB_VIEW_MODEL_DATE_TIME_TYPE_ADAPTER_DEFAULT = true; -public XmlJavaTypeAdapterFacetFactory() { +public JaxbFacetFactory() { super(FeatureType.OBJECTS_AND_PROPERTIES); } + +// -- CLASS CONTEXT @Override public void process(final ProcessClassContext processClassContext) { + processXmlJavaTypeAdapter(processClassContext); + processXmlAccessorTypeFacet(processClassContext); +} + +private void processXmlJavaTypeAdapter(final ProcessClassContext processClassContext) { final Class cls = processClassContext.getCls(); final XmlJavaTypeAdapter annotation = Annotations.getAnnotation(cls, XmlJavaTypeAdapter.class); if(annotation == null) { return; } - + final FacetHolder holder = processClassContext.getFacetHolder(); final XmlJavaTypeAdapterFacetDefault facet = new XmlJavaTypeAdapterFacetDefault(holder, annotation.value(), getSpecificationLoader()); FacetUtil.addFacet(facet); } + +private void processXmlAccessorTypeFacet(final ProcessClassContext processClassContext) { +final Class cls = processClassContext.getCls(); + +final XmlAccessorType annotation = Annotations.getAnnotation(cls, XmlAccessorType.class); +if(annotation == null) { +
[isis] 02/04: ISIS-1940 uses the invocation-preprocessor for support method validation
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 3bc8e4fcbc706f6fe65dc87bdb7f2ee754d1e1f2 Author: Andi HuberAuthorDate: Fri Apr 27 14:48:16 2018 +0200 ISIS-1940 uses the invocation-preprocessor for support method validation --- .../apache/isis/core/commons/lang/MethodExtensions.java | 2 +- .../lang/MethodInvocationPreprocessor.java} | 16 +++- .../ActionInvocationFacetForDomainEventAbstract.java | 5 +++-- .../specloader/specimpl/ObjectActionDefault.java | 1 + 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/MethodExtensions.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/MethodExtensions.java index 7215a47..6341054 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/MethodExtensions.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/MethodExtensions.java @@ -41,7 +41,7 @@ public class MethodExtensions { public static Object invoke(final Method method, final Object object, final Object[] arguments) { try { Object[] defaultAnyPrimitive = defaultAnyPrimitive(method.getParameterTypes(), arguments); -return method.invoke(object, defaultAnyPrimitive); +return MethodInvocationPreprocessor.invoke(method, object, defaultAnyPrimitive); } catch (Exception e) { return ThrowableExtensions.handleInvocationException(e, method.getName()); } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/RelaxedMethodInvoker.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/MethodInvocationPreprocessor.java similarity index 85% rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/RelaxedMethodInvoker.java rename to core/metamodel/src/main/java/org/apache/isis/core/commons/lang/MethodInvocationPreprocessor.java index 52dc432..aba3707 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/RelaxedMethodInvoker.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/MethodInvocationPreprocessor.java @@ -17,7 +17,7 @@ * under the License. */ -package org.apache.isis.core.metamodel.facets.actions.action.invocation; +package org.apache.isis.core.commons.lang; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -32,12 +32,18 @@ import org.apache.isis.applib.internal.collections._Arrays; import org.apache.isis.applib.internal.collections._Collections; /** - * Package private utility for method invocation pre-processing. - * Adapts supported collection parameter types List, Set, SortedSet, Collection and Arrays. + * Utility for method invocation pre-processing. + * + * For a given array of parameters, we intercept and adapt those, + * that are not compatible with the expected target parameter type. + * + * + * By now we do this for collection parameter types List, Set, SortedSet, Collection and Arrays. + * */ -class RelaxedMethodInvoker { +public class MethodInvocationPreprocessor { - static Object invoke(Method method, Object targetPojo, Object[] executionParameters) + public static Object invoke(Method method, Object targetPojo, Object[] executionParameters) throws IllegalAccessException, InvocationTargetException { if (_NullSafe.isEmpty(executionParameters)) { diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java index 5f987d1..a071efe 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java @@ -51,6 +51,7 @@ import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider import org.apache.isis.core.commons.config.IsisConfiguration; import org.apache.isis.core.commons.exceptions.IsisException; import org.apache.isis.core.commons.lang.ArrayExtensions; +import org.apache.isis.core.commons.lang.MethodInvocationPreprocessor; import org.apache.isis.core.commons.lang.ThrowableExtensions; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy; @@ -389,11 +390,11 @@ public abstract class
[isis] 04/04: ISIS-1940 let the SortedSet-of-list adapter return a comparator=null
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 9a51b98515fa864d175297e3eae2937a59732b2b Author: Andi HuberAuthorDate: Fri Apr 27 20:43:40 2018 +0200 ISIS-1940 let the SortedSet-of-list adapter return a comparator=null otherwise streaming the elements will throw an exception --- .../applib/internal/collections/_Collections_SortedSetOfList.java| 5 - 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/applib/src/main/java/org/apache/isis/applib/internal/collections/_Collections_SortedSetOfList.java b/core/applib/src/main/java/org/apache/isis/applib/internal/collections/_Collections_SortedSetOfList.java index add7d8a..d78558c 100644 --- a/core/applib/src/main/java/org/apache/isis/applib/internal/collections/_Collections_SortedSetOfList.java +++ b/core/applib/src/main/java/org/apache/isis/applib/internal/collections/_Collections_SortedSetOfList.java @@ -113,7 +113,10 @@ class _Collections_SortedSetOfList implements SortedSet { @Override public Comparator comparator() { - throw new UnsupportedOperationException(JUST_AN_ADAPTER); + return null; + // this set was created from a list, we have no + // info about the intended comparator, + // but a least let stream traverse the elements } @Override -- To stop receiving notification emails like this one, please contact ahu...@apache.org.