From 364ecfbdb8c004071e540ba84450435e1adaed56 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 16 Sep 2013 11:43:50 +0200 Subject: [PATCH] configuration entry store should be able to read the defect format of earlier versions --- .../store/JAXBConfigurationEntryStore.java | 18 +++++++++---- .../JAXBConfigurationEntryStoreTest.java | 24 +++++++++++++++++ .../sonia/scm/store/wrong.format.xml | 27 +++++++++++++++++++ 3 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 scm-dao-xml/src/test/resources/sonia/scm/store/wrong.format.xml diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStore.java b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStore.java index 8470cc5ba3..3fafd26e6d 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStore.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStore.java @@ -346,7 +346,7 @@ public class JAXBConfigurationEntryStore // configuration reader.nextTag(); - + // entry start reader.nextTag(); @@ -366,6 +366,7 @@ public class JAXBConfigurationEntryStore if (!element.isNil()) { V v = element.getValue(); + logger.trace("add element {} to configuration entry store", v); entries.put(key, v); @@ -375,11 +376,13 @@ public class JAXBConfigurationEntryStore logger.warn("could not unmarshall object of entry store"); } - // closed entry tag - reader.nextTag(); + // closed or new entry tag + if (reader.nextTag() == XMLStreamReader.END_ELEMENT) + { - // start new entry - reader.nextTag(); + // fixed format, start new entry + reader.nextTag(); + } } } catch (Exception ex) @@ -412,6 +415,7 @@ public class JAXBConfigurationEntryStore ); //J+ writer.writeStartDocument(); + // configuration start writer.writeStartElement(TAG_CONFIGURATION); @@ -421,11 +425,14 @@ public class JAXBConfigurationEntryStore for (Entry e : entries.entrySet()) { + // entry start writer.writeStartElement(TAG_ENTRY); + // key start writer.writeStartElement(TAG_KEY); writer.writeCharacters(e.getKey()); + // key end writer.writeEndElement(); @@ -434,6 +441,7 @@ public class JAXBConfigurationEntryStore e.getValue()); m.marshal(je, writer); + // entry end writer.writeEndElement(); } diff --git a/scm-dao-xml/src/test/java/sonia/scm/store/JAXBConfigurationEntryStoreTest.java b/scm-dao-xml/src/test/java/sonia/scm/store/JAXBConfigurationEntryStoreTest.java index a2057e87a3..d0f17fc313 100644 --- a/scm-dao-xml/src/test/java/sonia/scm/store/JAXBConfigurationEntryStoreTest.java +++ b/scm-dao-xml/src/test/java/sonia/scm/store/JAXBConfigurationEntryStoreTest.java @@ -97,6 +97,30 @@ public class JAXBConfigurationEntryStoreTest assertEquals("tuser3", a3.getName()); } + + /** + * Method description + * + * + * @throws IOException + */ + @Test + public void testLoadWrongFormat() throws IOException + { + ConfigurationEntryStore store = + createPermissionStore(RESOURCE_WRONG); + AssignedPermission a1 = store.get("3ZOHKUePB3"); + + assertEquals("tuser", a1.getName()); + + AssignedPermission a2 = store.get("7COHL2j1G1"); + + assertEquals("tuser2", a2.getName()); + + AssignedPermission a3 = store.get("A0OHL3Qqw2"); + + assertEquals("tuser3", a3.getName()); + } /** * Method description diff --git a/scm-dao-xml/src/test/resources/sonia/scm/store/wrong.format.xml b/scm-dao-xml/src/test/resources/sonia/scm/store/wrong.format.xml new file mode 100644 index 0000000000..72a3969879 --- /dev/null +++ b/scm-dao-xml/src/test/resources/sonia/scm/store/wrong.format.xml @@ -0,0 +1,27 @@ + + + + 3ZOHKUePB3 + + false + tuser + repository:*:READ + + + A0OHL3Qqw2 + + false + tuser3 + repository:*:OWNER + + + 7COHL2j1G1 + + false + tuser2 + repository:*:WRITE + + + + +