diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/DomParser.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/DomParser.java index ba26bcb750e..a4bd02576d3 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/DomParser.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/parser/DomParser.java @@ -330,7 +330,9 @@ private static T parsePrimitiveElementValue(Element element, QName typeName) return (T) DOMUtil.getQNameValue(element); } else if (XmlTypeConverter.canConvert(typeName)) { return (T) XmlTypeConverter.toJavaValue(element, typeName); - } else { + } else if (DOMUtil.XSD_ANYTYPE.equals(typeName)) { + return (T) element.getTextContent(); // if parsing primitive as xsd:anyType, we can safely parse it as string + } else { throw new SchemaException("Cannot convert element '"+element+"' to "+typeName); } } diff --git a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestJaxbParsing.java b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestJaxbParsing.java index 65c81b416c0..cb00a623e18 100644 --- a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestJaxbParsing.java +++ b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestJaxbParsing.java @@ -236,15 +236,18 @@ public void testParseAnyValue() throws SchemaException, SAXException, IOExceptio // WHEN - String data = ""; - + String dataAsIs = ""; + String dataValue = "12345"; // THEN - Object o = prismContext.parseAnyValueAsJAXBElement(data, PrismContext.LANG_XML); - System.out.println("Parsed expression evaluator: " + o); - AssertJUnit.assertTrue("o is of wrong class (not JAXBElement): " + o.getClass(), o instanceof JAXBElement); - } + Object oAsIs = prismContext.parseAnyValueAsJAXBElement(dataAsIs, PrismContext.LANG_XML); + System.out.println("Parsed expression evaluator: " + dataAsIs + " as " + oAsIs); + AssertJUnit.assertTrue("result is of wrong class (not JAXBElement): " + oAsIs.getClass(), oAsIs instanceof JAXBElement); + Object oValue = prismContext.parseAnyValueAsJAXBElement(dataValue, PrismContext.LANG_XML); + System.out.println("Parsed expression evaluator: " + dataValue + " as " + oValue); + AssertJUnit.assertTrue("result is of wrong class (not JAXBElement): " + oValue.getClass(), oValue instanceof JAXBElement); + } } diff --git a/infra/util/src/main/java/com/evolveum/midpoint/util/DOMUtil.java b/infra/util/src/main/java/com/evolveum/midpoint/util/DOMUtil.java index 1113d2c3b40..cfa8a14a303 100644 --- a/infra/util/src/main/java/com/evolveum/midpoint/util/DOMUtil.java +++ b/infra/util/src/main/java/com/evolveum/midpoint/util/DOMUtil.java @@ -136,6 +136,7 @@ public class DOMUtil { public static final QName XSD_ANYURI = new QName(W3C_XML_SCHEMA_NS_URI, "anyURI", NS_W3C_XML_SCHEMA_PREFIX); public static final QName XSD_ANY = new QName(W3C_XML_SCHEMA_NS_URI, "any", NS_W3C_XML_SCHEMA_PREFIX); + public static final QName XSD_ANYTYPE = new QName(W3C_XML_SCHEMA_NS_URI, "anyType", NS_W3C_XML_SCHEMA_PREFIX); public static final String NS_XML_ENC = "http://www.w3.org/2001/04/xmlenc#"; public static final String NS_XML_DSIG = "http://www.w3.org/2000/09/xmldsig#";