diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/Item.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/Item.java index 25b7be0f757..538220a41ef 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/Item.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/Item.java @@ -528,7 +528,7 @@ protected void diffInternal(Item other, Collection del // No need to process this value again iterator.remove(); break; - } + } } if (!found) { // We have the value and the other does not, this is delete of the entire value diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/marshaller/ItemInfo.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/marshaller/ItemInfo.java index c04efb57191..0027af29521 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/marshaller/ItemInfo.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/marshaller/ItemInfo.java @@ -103,7 +103,7 @@ private static ID augmentWithType(ID definition, Cla } ItemDefinition rawDefFromType = schemaRegistry.findItemDefinitionByType(typeName); if (rawDefFromType == null) { - throw new SchemaException("Unknown type name " + typeName); + return definition; // TODO warning if wrong type? } if (!definitionClass.isAssignableFrom(rawDefFromType.getClass())) { throw new SchemaException("Wrong type name " + typeName + " (not a " + definitionClass.getClass().getSimpleName() + ")"); // TODO context of error diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/marshaller/QueryConvertor.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/marshaller/QueryConvertor.java index ac4ee772339..4430fd6004b 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/marshaller/QueryConvertor.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/marshaller/QueryConvertor.java @@ -321,11 +321,11 @@ private static ObjectFilter parseComparisonFilter(QN Entry expressionEntry = clauseXMap.getSingleEntryThatDoesNotMatch( ELEMENT_VALUE, ELEMENT_MATCHING, ELEMENT_PATH); if (expressionEntry != null) { - RootXNode expressionRoot = clauseXMap.getEntryAsRoot(expressionEntry.getKey()); - PrismPropertyValue expressionPropertyValue = prismContext.parserFor(expressionRoot).parseItemValue(); if (preliminaryParsingOnly) { return null; } else { + RootXNode expressionRoot = clauseXMap.getEntryAsRoot(expressionEntry.getKey()); + PrismPropertyValue expressionPropertyValue = prismContext.parserFor(expressionRoot).parseItemValue(); ExpressionWrapper expressionWrapper = new ExpressionWrapper(); expressionWrapper.setExpression(expressionPropertyValue.getValue()); if (isEq) { @@ -432,15 +432,15 @@ private static RefFilter parseRefFilter(MapXNode claus XNode valueXnode = clauseXMap.get(ELEMENT_VALUE); if (valueXnode != null) { + if (preliminaryParsingOnly) { + return null; + } RootXNode valueRoot = new RootXNode(ELEMENT_VALUE, valueXnode); Item item = prismContext.parserFor(valueRoot) .name(itemName) .definition(itemDefinition) .context(ParsingContext.allowMissingRefTypes()) .parseItem(); - if (preliminaryParsingOnly) { - return null; - } PrismReference ref = (PrismReference)item; if (item.getValues().size() < 1) { throw new IllegalStateException("No values to search specified for item " + itemName); diff --git a/infra/prism/src/main/java/com/evolveum/prism/xml/ns/_public/types_3/RawType.java b/infra/prism/src/main/java/com/evolveum/prism/xml/ns/_public/types_3/RawType.java index 5221ee74067..c5124f88b8e 100644 --- a/infra/prism/src/main/java/com/evolveum/prism/xml/ns/_public/types_3/RawType.java +++ b/infra/prism/src/main/java/com/evolveum/prism/xml/ns/_public/types_3/RawType.java @@ -10,6 +10,7 @@ import com.evolveum.midpoint.util.exception.SystemException; import org.apache.commons.lang.Validate; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jvnet.jaxb2_commons.lang.Equals; import org.jvnet.jaxb2_commons.lang.EqualsStrategy; import org.jvnet.jaxb2_commons.locator.ObjectLocator; @@ -82,7 +83,8 @@ public PrismContext getPrismContext() { //region Parsing and serialization // itemDefinition may be null; in that case we do the best what we can - public IV getParsedValue(ItemDefinition itemDefinition, QName itemName) throws SchemaException { + public IV getParsedValue(@Nullable ItemDefinition itemDefinition, @Nullable QName itemName) throws SchemaException { + Validate.isTrue(itemDefinition != null || itemName != null); if (parsed != null) { return (IV) parsed; } else if (xnode != null) { @@ -99,6 +101,7 @@ public IV getParsedValue(ItemD value = null; } } else { + assert itemName != null; PrismProperty subItem = PrismProperty.createRaw(xnode, itemName, prismContext); value = (IV) subItem.getValue(); } diff --git a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestDeltaConverter.java b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestDeltaConverter.java index ec4c708fe6b..620f0842a9a 100644 --- a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestDeltaConverter.java +++ b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestDeltaConverter.java @@ -274,7 +274,7 @@ public void testProtectedStringObjectDelta() throws Exception { RawType val = valueElements.get(0); MapXNode valXNode = (MapXNode) val.serializeToXNode(); PrimitiveXNode clearValueNode = (PrimitiveXNode) valXNode.get(ProtectedStringType.F_CLEAR_VALUE); - val.getParsedValue(null, null); + val.getParsedValue(null, new QName("dummy")); // System.out.println("clear value " + clearValueNode); assertEquals("Wrong element value", protectedString.getClearValue(), clearValueNode.getParsedValue(DOMUtil.XSD_STRING)); // List values = val.getContent(); diff --git a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestSchemaRegistry.java b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestSchemaRegistry.java index cbf19514006..c5b3d7beb0b 100644 --- a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestSchemaRegistry.java +++ b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestSchemaRegistry.java @@ -32,6 +32,7 @@ import javax.xml.validation.Schema; import javax.xml.validation.Validator; +import com.evolveum.midpoint.prism.*; import com.evolveum.midpoint.prism.schema.SchemaRegistryImpl; import com.evolveum.midpoint.schema.constants.SchemaConstants; @@ -40,14 +41,6 @@ import org.w3c.dom.Element; import org.xml.sax.SAXException; -import com.evolveum.midpoint.prism.ItemDefinition; -import com.evolveum.midpoint.prism.PrismContainerDefinition; -import com.evolveum.midpoint.prism.PrismContext; -import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.prism.PrismObjectDefinition; -import com.evolveum.midpoint.prism.PrismPropertyDefinition; -import com.evolveum.midpoint.prism.PrismReferenceDefinition; -import com.evolveum.midpoint.prism.PrismReferenceValue; import com.evolveum.midpoint.prism.polystring.PolyString; import com.evolveum.midpoint.prism.schema.PrismSchema; import com.evolveum.midpoint.prism.schema.SchemaRegistry; @@ -145,7 +138,7 @@ public void testReferenceInExtension() throws SchemaException, SAXException, IOE System.out.println("UserRef definition:"); System.out.println(itemDefinition.debugDump()); - assertEquals("Wrong userRef definition class", PrismReferenceDefinition.class, itemDefinition.getClass()); + assertEquals("Wrong userRef definition class", PrismReferenceDefinitionImpl.class, itemDefinition.getClass()); } @Test