diff --git a/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/xml/XsdTypeMapper.java b/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/xml/XsdTypeMapper.java index 309b1b6812a..3b3cac566b7 100644 --- a/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/xml/XsdTypeMapper.java +++ b/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/xml/XsdTypeMapper.java @@ -111,12 +111,14 @@ private static void addMappingExt(Class javaClass, QName xsdType, boolean both) } } + @NotNull public static QName toXsdType(Class javaClass) { QName xsdType = getJavaToXsdMapping(javaClass); - if (xsdType == null) { + if (xsdType != null) { + return xsdType; + } else { throw new IllegalArgumentException("No XSD mapping for Java type " + javaClass.getCanonicalName()); } - return xsdType; } public static QName getJavaToXsdMapping(Class type) { diff --git a/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/marshaller/BeanUnmarshaller.java b/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/marshaller/BeanUnmarshaller.java index bae9ad8b193..35bf2d96f81 100644 --- a/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/marshaller/BeanUnmarshaller.java +++ b/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/marshaller/BeanUnmarshaller.java @@ -146,8 +146,7 @@ private T unmarshalInternal(@NotNull XNodeImpl xnode, @NotNull Class bean PrimitiveXNodeImpl prim = (PrimitiveXNodeImpl) xnode; if (XmlTypeConverter.canConvert(beanClass)) { QName xsdType = XsdTypeMapper.toXsdType(beanClass); - Object parsedValue = prim.getParsedValue(xsdType, beanClass); - return postConvertUnmarshal(parsedValue, pc); + return prim.getParsedValue(xsdType, beanClass); } else if (beanClass.isEnum()) { return unmarshalEnumFromPrimitive(prim, beanClass, pc); } @@ -1111,8 +1110,7 @@ private T unmarshalSearchFilterType(MapXNodeImpl xm private ItemPathType unmarshalItemPath(PrimitiveXNodeImpl primitiveXNode, Class beanClass, ParsingContext parsingContext) throws SchemaException { - ItemPathType parsedValue = primitiveXNode.getParsedValue(ItemPathType.COMPLEX_TYPE, ItemPathType.class); - return postConvertUnmarshal(parsedValue, parsingContext); + return primitiveXNode.getParsedValue(ItemPathType.COMPLEX_TYPE, ItemPathType.class); } private Object unmarshalPolyStringFromPrimitive(PrimitiveXNodeImpl node, Class beanClass, ParsingContext parsingContext) diff --git a/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/xnode/PrimitiveXNodeImpl.java b/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/xnode/PrimitiveXNodeImpl.java index 1a9e0afc673..5eaff29b7f5 100644 --- a/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/xnode/PrimitiveXNodeImpl.java +++ b/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/xnode/PrimitiveXNodeImpl.java @@ -81,10 +81,12 @@ public T getParsedValue(@NotNull QName typeName) throws SchemaException { return getParsedValue(typeName, null, XNodeProcessorEvaluationMode.STRICT); } + // @post: return value is type-compliant with expectedClass (if both are non-null) public T getParsedValue(@NotNull QName typeName, @Nullable Class expectedClass) throws SchemaException { return getParsedValue(typeName, expectedClass, XNodeProcessorEvaluationMode.STRICT); } + // @post: return value is type-compliant with expectedClass (if both are non-null) public T getParsedValue(@NotNull QName typeName, @Nullable Class expectedClass, XNodeProcessorEvaluationMode mode) throws SchemaException { if (!isParsed()) { parseValue(typeName, mode);