From 02fb711b672282b8492fec41869ce3d853fe782c Mon Sep 17 00:00:00 2001 From: Pavol Mederly Date: Wed, 5 Oct 2016 18:44:17 +0200 Subject: [PATCH] More serialization cleanup. --- .../midpoint/prism/PrismSerializerImpl.java | 2 +- .../prism/util/ValueSerializationUtil.java | 325 ------------------ .../midpoint/repo/sql/AddGetObjectTest.java | 83 ++--- repo/repo-sql-impl/pom.xml | 8 +- .../midpoint/repo/sql/util/RUtil.java | 20 +- 5 files changed, 36 insertions(+), 402 deletions(-) delete mode 100644 infra/prism/src/main/java/com/evolveum/midpoint/prism/util/ValueSerializationUtil.java diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismSerializerImpl.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismSerializerImpl.java index dac90aa9c04..e6b8b76cc42 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismSerializerImpl.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismSerializerImpl.java @@ -76,7 +76,7 @@ public T serialize(PrismValue value) throws SchemaException { @Override public T serialize(PrismValue value, QName rootElementName) throws SchemaException { - RootXNode xroot = target.parserHelpers.xnodeProcessor.serializeItemValueAsRoot(value, elementName); // TODO context + RootXNode xroot = target.parserHelpers.xnodeProcessor.serializeItemValueAsRoot(value, rootElementName); // TODO context return target.serialize(xroot, context); } diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/ValueSerializationUtil.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/ValueSerializationUtil.java deleted file mode 100644 index 39f78d4bbd6..00000000000 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/ValueSerializationUtil.java +++ /dev/null @@ -1,325 +0,0 @@ -package com.evolveum.midpoint.prism.util; - -import java.util.List; - -import javax.xml.namespace.QName; - -import com.evolveum.midpoint.prism.Containerable; -import com.evolveum.midpoint.prism.ItemDefinition; -import com.evolveum.midpoint.prism.PrismContainer; -import com.evolveum.midpoint.prism.PrismContainerDefinition; -import com.evolveum.midpoint.prism.PrismContainerValue; -import com.evolveum.midpoint.prism.PrismContext; -import com.evolveum.midpoint.prism.PrismProperty; -import com.evolveum.midpoint.prism.PrismPropertyDefinition; -import com.evolveum.midpoint.prism.PrismPropertyValue; -import com.evolveum.midpoint.prism.PrismValue; -import com.evolveum.midpoint.prism.Referencable; -import com.evolveum.midpoint.prism.marshaller.XNodeSerializer; -import com.evolveum.midpoint.prism.xnode.ListXNode; -import com.evolveum.midpoint.prism.xnode.MapXNode; -import com.evolveum.midpoint.prism.xnode.XNode; -import com.evolveum.midpoint.util.exception.SchemaException; - -@Deprecated -public class ValueSerializationUtil { - - - public static String serializeValue(T value, ItemDefinition def, QName itemName, QName parentName, PrismContext prismContext, String language) throws SchemaException{ - if (value == null){ - return null; - } - - XNodeSerializer serializer = prismContext.getXnodeProcessor().createSerializer(); - - if (value instanceof List){ - List values = (List) value; - if (values.isEmpty()){ - return null; - } - - if (def instanceof PrismPropertyDefinition){ - PrismProperty prop = (PrismProperty) def.instantiate(itemName); - for (T val : values){ - PrismPropertyValue pValue = new PrismPropertyValue(val); - prop.add(pValue); - } - - XNode node = serializer.serializeItem(prop); - if (node instanceof ListXNode){ - ListXNode xList = (ListXNode) node; - if (xList.size() == 1){ - XNode sub = xList.iterator().next(); - if (!(sub instanceof MapXNode)){ - throw new IllegalArgumentException("must be a map"); - } - - String s = prismContext.getParserDom().serializeToString(sub, parentName, null); -// System.out.println("serialized: " + s); - return s; - - }else{ - MapXNode xmap = new MapXNode(); - xmap.put(itemName, xList); - String s = prismContext.getParserDom().serializeToString(xmap, parentName, null); -// System.out.println("serialized: " + s); - return s; -// throw new IllegalArgumentException("Check your data."); - } - -// MapXNode xmap = xList.new MapXNode(); -// xmap.put(def.getName(), xList); - - } - String s = prismContext.getParserDom().serializeToString(node, def.getName(), null); -// System.out.println("serialized: " + s); - return s; - } else if (def instanceof PrismContainerDefinition){ - PrismContainer pc = (PrismContainer) def.instantiate(); - for (T val : values){ -// PrismContainerValue pcVal = new PrismContainerValue((Containerable) val); - PrismContainerValue pcVal = ((Containerable) val).asPrismContainerValue(); - pc.add(pcVal.clone()); - } - XNode node = serializer.serializeItem(pc); - if (node instanceof ListXNode){ - ListXNode xList = (ListXNode) node; - MapXNode xmap = new MapXNode(); - xmap.put(def.getName(), xList); - String s = prismContext.getParserDom().serializeToString(xmap, parentName, null); -// System.out.println("serialized: " + s); - return s; - } - String s = prismContext.getParserDom().serializeToString(node, def.getName(), null); -// System.out.println("serialized: " + s); - return s; - } - - } - - PrismValue pVal = null; - - if (value instanceof Containerable){ - pVal = ((Containerable) value).asPrismContainerValue(); - } else if (value instanceof Referencable){ - pVal = ((Referencable) value).asReferenceValue(); - } else { - pVal = new PrismPropertyValue(value); - } - -// Class clazz = prismContext.getSchemaRegistry().determineCompileTimeClass(itemName); -// PrismContainerDefinition def = prismContext.getSchemaRegistry().determineDefinitionFromClass(clazz); -// -// ItemDefinition def = prismContext.getSchemaRegistry().findItemDefinitionByElementName(itemName); - -// QName itemName = null; - if (def != null){ - itemName = def.getName(); - } - - - XNode node = serializer.serializeItemValue(pVal, def); - String s = prismContext.getParserDom().serializeToString(node, itemName, null); -// System.out.println("serialized: " + s); - return s; -// throw new UnsupportedOperationException("need to be implemented"); - } - - public static String serializeValue(T value, QName itemName, PrismContext prismContext, String language) throws SchemaException{ -// System.out.println("value serialization"); - if (value == null){ - return null; - } - - XNodeSerializer serializer = prismContext.getXnodeProcessor().createSerializer(); - - if (value instanceof List){ - List values = (List) value; - if (values.isEmpty()){ - return null; - } - throw new UnsupportedOperationException("take your chance."); - } - - PrismValue pVal = null; - - if (value instanceof Containerable){ - pVal = ((Containerable) value).asPrismContainerValue(); - } else if (value instanceof Referencable){ - pVal = ((Referencable) value).asReferenceValue(); - } else { - pVal = new PrismPropertyValue(value); - } - - XNode node = serializer.serializeItemValue(pVal, null); - String s = prismContext.getParserDom().serializeToString(node, itemName, null); -// System.out.println("serialized: " + s); - return s; -// throw new UnsupportedOperationException("need to be implemented"); - } - -// public static String serializeItemValue(QName itemName, ItemDefinition def, PrismValue value, PrismContext prismContext, String language) throws SchemaException{ -// XNodeSerializer serializer = prismContext.getXnodeProcessor().createSerializer(); -// XNode node = serializer.serializeItemValue(value, def); -// String s = prismContext.getParserDom().serializeToString(node, itemName); -// //System.out.println("serialized ITEM VALUE: " + s); -// return s; -// } - -// public static String serializeFilter(SearchFilterType query, PrismContext prismContext, String language){ -// //System.out.println("query serialization"); -// throw new UnsupportedOperationException("need to be implemented"); -// } - -// public static T deserializeValue(String value, Class clazz, QName itemName, ItemDefinition itemDef, PrismContext prismContext, String language) throws SchemaException{ -// //System.out.println("item value deserialization"); -// -// XNode xnode = prismContext.getParserDom().parse(value); -// -//// System.out.println("xnode: " + xnode.debugDump()); -// -// XNode xmap = null; -// if (xnode instanceof RootXNode){ -// xmap = ((RootXNode) xnode).getSubnode(); -// } -// -//// System.out.println("xmap: " + xmap); -//// else if (xnode instanceof MapXNode){ -//// xmap = (MapXNode) xnode; -//// } else if (xnode instanceof PrimitiveXNode){ -//// xmap = new MapXNode(); -//// xmap.put(itemName, xnode); -//// } -// -// Item item = prismContext.getXnodeProcessor().parseItem(xmap, itemName, itemDef); -// -//// System.out.println("item: " + item.debugDump()); -// -// if (item instanceof PrismProperty){ -// PrismProperty prop = (PrismProperty) item; -// -// if (prop.isSingleValue()){ -// return (T) prop.getRealValue(); -// } -// return (T) prop.getRealValues(); -// } else if (item instanceof PrismContainer){ -// PrismContainer cont = (PrismContainer) item; -// return (T) cont.getValue().asContainerable(); -// } else if (item instanceof PrismReference){ -// PrismReference ref = (PrismReference) item; -// return (T) ref.getValue(); -// } -// if (item != null){ -// return (T) item.getValue(0); -// } -//// if (prismContext.getBeanConverter().canConvert(clazz)){ -//// prismContext.getBeanConverter().unmarshall(xmap, clazz); -//// } else{ -//// prismContext.getXnodeProcessor().parseContainer(xnode, clazz); -//// } -// -// throw new UnsupportedOperationException("need to be implemented"); -// } - -// public static Collection deserializeItemValues(String value, Item item, String language) throws SchemaException{ -// //System.out.println("item value deserialization"); -// PrismContext prismContext = item.getPrismContext(); -// XNode xnode = prismContext.getParserDom().parse(value); -// if (xnode instanceof RootXNode){ -// xnode = ((RootXNode) xnode).getSubnode(); -// } -// //System.out.println("value: " + value); -// Item parsedItem = prismContext.getXnodeProcessor().parseItem(xnode, item.getElementName(), item.getDefinition()); -// return parsedItem.getValues(); -//// throw new UnsupportedOperationException("need to be implemented"); -// } - -// public static SearchFilterType deserializeFilter(String query, String language){ -// //System.out.println("query deserialization"); -// throw new UnsupportedOperationException("need to be implemented"); -// } - -// public static String serializeValue(T value, PrismPropertyDefinition def, -// QName itemName, PrismContext prismContext, String langXml) throws SchemaException{ -//// System.out.println("value serialization"); -// if (value == null){ -// return null; -// } -// -// XNodeSerializer serializer = prismContext.getXnodeProcessor().createSerializer(); -// -// if (value instanceof List){ -// List values = (List) value; -// if (values.isEmpty()){ -// return null; -// } -// -// if (def instanceof PrismPropertyDefinition){ -// PrismProperty prop = (PrismProperty) def.instantiate(); -// for (T val : values){ -// PrismPropertyValue pValue = new PrismPropertyValue(val); -// prop.add(pValue); -// } -// XNode node = serializer.serializeItem(prop); -// if (node instanceof ListXNode){ -// ListXNode xList = (ListXNode) node; -// MapXNode xmap = new MapXNode(); -// xmap.put(def.getName(), xList); -// String s = prismContext.getParserDom().serializeToString(xmap, def.getName()); -//// System.out.println("serialized: " + s); -// return s; -// } -// String s = prismContext.getParserDom().serializeToString(node, def.getName()); -//// System.out.println("serialized: " + s); -// return s; -// } -// -// } -// -// PrismValue pVal = null; -// -// if (value instanceof Containerable){ -// pVal = ((Containerable) value).asPrismContainerValue(); -// } else if (value instanceof Referencable){ -// pVal = ((Referencable) value).asReferenceValue(); -// } else { -// PrismProperty pp = def.instantiate(); -// pVal = new PrismPropertyValue(value); -// pp.add(pVal); -// XNode xnode = serializer.serializeItemValue(pVal, def); -// if (xnode == null){ -// throw new IllegalArgumentException("null node after serialization"); -// } -// MapXNode xmap = null; -// if (xnode instanceof RootXNode){ -// XNode sub = ((RootXNode) xnode).getSubnode(); -// if (!(sub instanceof MapXNode)){ -// throw new IllegalArgumentException("not uspported yet"); -// } -// xmap = (MapXNode) sub; -// } else if (xnode instanceof MapXNode){ -// xmap = (MapXNode) xnode; -// } else if (xnode instanceof PrimitiveXNode){ -// String s = ((PrimitiveXNode) xnode).getStringValue(); -// return s; -//// -// } else{ -// throw new IllegalStateException("hmmm"); -// } -// -// XNode node = xmap.get(itemName); -// String s = prismContext.getParserDom().serializeToString(node, itemName); -// } -// -// -// -// XNode node = serializer.serializeItemValue(pVal, def); -// String s = prismContext.getParserDom().serializeToString(node, itemName); -//// System.out.println("serialized: " + s); -// return s; -//// throw new UnsupportedOperationException("need to be implemented"); -// -// } - - -} diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AddGetObjectTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AddGetObjectTest.java index 9b64c90cf29..320b32b7c8c 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AddGetObjectTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AddGetObjectTest.java @@ -49,7 +49,6 @@ import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.delta.ReferenceDelta; import com.evolveum.midpoint.prism.util.PrismTestUtil; -import com.evolveum.midpoint.prism.util.ValueSerializationUtil; import com.evolveum.midpoint.repo.sql.type.XMLGregorianCalendarType; import com.evolveum.midpoint.repo.sql.util.RUtil; import com.evolveum.midpoint.schema.DeltaConvertor; @@ -496,60 +495,36 @@ private String testIterationToken(String token) throws Exception { return token; } - @Test(enabled = false) - public void deltaOperationSerializationPerformanceTest() throws Exception { - List> elements = - prismContext.parserFor(new File(FOLDER_BASIC, "objects.xml")).parseObjects(); - - //get user from objects.xml - ObjectDelta delta = ObjectDelta.createAddDelta(elements.get(0)); - - final int COUNT = 10000; - //first conversion option - System.out.println(DeltaConvertor.toObjectDeltaTypeXml(delta)); - //second conversion option - System.out.println("\n" + toRepo(DeltaConvertor.toObjectDeltaType(delta), prismContext)); - - long time = System.currentTimeMillis(); - for (int i = 0; i < COUNT; i++) { - String xml = DeltaConvertor.toObjectDeltaTypeXml(delta); - } - time = System.currentTimeMillis() - time; - System.out.println(">>> " + time); - - time = System.currentTimeMillis(); - for (int i = 0; i < COUNT; i++) { - ObjectDeltaType type = DeltaConvertor.toObjectDeltaType(delta); - String xml = toRepo(type, prismContext); - } - time = System.currentTimeMillis() - time; - System.out.println(">>> " + time); - } - - private String toRepo(T value, PrismContext prismContext) - throws SchemaException, JAXBException { - if (value == null) { - return null; - } - - // PrismDomProcessor domProcessor = prismContext.getPrismDomProcessor(); - if (value instanceof Objectable) { - return prismContext.serializeObjectToString(((Objectable) value).asPrismObject(), - PrismContext.LANG_XML); - } +// @Test(enabled = false) +// public void deltaOperationSerializationPerformanceTest() throws Exception { +// List> elements = +// prismContext.parserFor(new File(FOLDER_BASIC, "objects.xml")).parseObjects(); +// +// //get user from objects.xml +// ObjectDelta delta = ObjectDelta.createAddDelta(elements.get(0)); +// +// final int COUNT = 10000; +// //first conversion option +// System.out.println(DeltaConvertor.toObjectDeltaTypeXml(delta)); +// //second conversion option +// //System.out.println("\n" + toRepo(DeltaConvertor.toObjectDeltaType(delta), prismContext)); +// +// long time = System.currentTimeMillis(); +// for (int i = 0; i < COUNT; i++) { +// String xml = DeltaConvertor.toObjectDeltaTypeXml(delta); +// } +// time = System.currentTimeMillis() - time; +// System.out.println(">>> " + time); +// +// time = System.currentTimeMillis(); +// for (int i = 0; i < COUNT; i++) { +// ObjectDeltaType type = DeltaConvertor.toObjectDeltaType(delta); +// String xml = toRepo(type, prismContext); +// } +// time = System.currentTimeMillis() - time; +// System.out.println(">>> " + time); +// } - if (value instanceof Containerable) { - // TODO: createFakeParentElement??? why we don't use the real - // name??? - return prismContext.xmlSerializer() - .serialize(((Containerable) value).asPrismContainerValue(), - QNameUtil.getNodeQName(RUtil.createFakeParentElement())); - } - - - return ValueSerializationUtil.serializeValue(value, new QName("fake"), prismContext, PrismContext.LANG_XML); - - } @Test public void test() throws Exception { diff --git a/repo/repo-sql-impl/pom.xml b/repo/repo-sql-impl/pom.xml index daa82dcca64..6d07d748385 100644 --- a/repo/repo-sql-impl/pom.xml +++ b/repo/repo-sql-impl/pom.xml @@ -93,10 +93,10 @@ xml-apis xml-apis - - javax.xml.bind - jaxb-api - + + + + diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/util/RUtil.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/util/RUtil.java index 90c50da2233..fea48cd3ac6 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/util/RUtil.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/util/RUtil.java @@ -24,7 +24,6 @@ import com.evolveum.midpoint.prism.query.ObjectFilter; import com.evolveum.midpoint.prism.query.ObjectQuery; import com.evolveum.midpoint.prism.query.OrgFilter; -import com.evolveum.midpoint.prism.util.ValueSerializationUtil; import com.evolveum.midpoint.repo.sql.data.audit.RObjectDeltaOperation; import com.evolveum.midpoint.repo.sql.data.common.*; import com.evolveum.midpoint.repo.sql.data.common.any.*; @@ -123,22 +122,6 @@ public static void revive(Objectable object, PrismContext } } - public static String toRepo(ItemDefinition parentDefinition, QName itemName, @NotNull OperationResultType value, - PrismContext prismContext) throws SchemaException, JAXBException { - - ItemDefinition definition = null; - if (parentDefinition instanceof PrismContainerDefinition) { - definition = ((PrismContainerDefinition) parentDefinition).findItemDefinition(itemName); - if (definition == null) { - definition = parentDefinition; - } - } else { - definition = parentDefinition; - } - - return ValueSerializationUtil.serializeValue(value, definition, itemName, parentDefinition.getName(), prismContext, PrismContext.LANG_XML); - } - public static Element createFakeParentElement() { return DOMUtil.createElement(DOMUtil.getDocument(), CUSTOM_OBJECT); } @@ -305,7 +288,8 @@ public static void copyResultFromJAXB(ItemDefinition parentDef, QName itemName, repo.setStatus(getRepoEnumValue(jaxb.getStatus(), ROperationResultStatus.class)); if (repo instanceof OperationResultFull) { try { - ((OperationResultFull) repo).setFullResult(RUtil.toRepo(parentDef, itemName, jaxb, prismContext)); + String full = prismContext.xmlSerializer().serializeAtomicValue(jaxb, itemName); + ((OperationResultFull) repo).setFullResult(full); } catch (Exception ex) { throw new DtoTranslationException(ex.getMessage(), ex); }