From c3b78e5a7c043b712bae2e3937090f6e1b68e895 Mon Sep 17 00:00:00 2001 From: Martin Spasov Date: Wed, 8 Aug 2018 09:44:50 +0100 Subject: [PATCH] Fix duplicate key exception for class path catalog loader. --- .../catalog/ClasspathCatalogLoader.java | 4 +++- .../catalog/ClasspathCatalogLoaderTest.java | 22 ++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/catalog-core/src/main/java/uk/gov/justice/schema/catalog/ClasspathCatalogLoader.java b/catalog-core/src/main/java/uk/gov/justice/schema/catalog/ClasspathCatalogLoader.java index f7d0101..24bb322 100644 --- a/catalog-core/src/main/java/uk/gov/justice/schema/catalog/ClasspathCatalogLoader.java +++ b/catalog-core/src/main/java/uk/gov/justice/schema/catalog/ClasspathCatalogLoader.java @@ -12,6 +12,7 @@ import java.net.URL; import java.util.List; import java.util.Map; +import java.util.function.BinaryOperator; import com.fasterxml.jackson.databind.ObjectMapper; @@ -43,8 +44,9 @@ public ClasspathCatalogLoader(final ObjectMapper objectMapper, * @return All found {@link Catalog}s mapped by their URIs */ public Map getCatalogs() { + final BinaryOperator duplicateKeyMapper = (c1, c2) -> c1; return listAllCatalogsFromClasspath().stream() - .collect(toMap(urlConverter::toUri, this::loadCatalog)); + .collect(toMap(urlConverter::toUri, this::loadCatalog, duplicateKeyMapper)); } private Catalog loadCatalog(final URL catalogUrl) { diff --git a/catalog-core/src/test/java/uk/gov/justice/schema/catalog/ClasspathCatalogLoaderTest.java b/catalog-core/src/test/java/uk/gov/justice/schema/catalog/ClasspathCatalogLoaderTest.java index 76b7117..fa8ef53 100644 --- a/catalog-core/src/test/java/uk/gov/justice/schema/catalog/ClasspathCatalogLoaderTest.java +++ b/catalog-core/src/test/java/uk/gov/justice/schema/catalog/ClasspathCatalogLoaderTest.java @@ -1,10 +1,12 @@ package uk.gov.justice.schema.catalog; +import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.startsWith; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import uk.gov.justice.schema.catalog.domain.Catalog; @@ -49,7 +51,7 @@ public void shouldThrowExceptionIfLoadingFileThrowsIOException() throws Exceptio final URL url = new URL("file://src/code/my-file.txt"); final URI uri = url.toURI(); - when(classpathResourceLoader.getResources( "META-INF/schema_catalog.json")).thenReturn(singletonList(url)); + when(classpathResourceLoader.getResources("META-INF/schema_catalog.json")).thenReturn(singletonList(url)); when(urlConverter.toUri(url)).thenReturn(uri); when(objectMapper.readValue(url, Catalog.class)).thenThrow(ioException); @@ -78,4 +80,22 @@ public void shouldThrowExceptionIfLoadingResourcesThrowsIOException() throws Exc } } + + @Test + public void shouldNotThrowExceptionIfDuplicateKeyAdded() throws Exception { + + final URL url = new URL("file://src/code/my-file.txt"); + final URI uri = url.toURI(); + + when(classpathResourceLoader.getResources("META-INF/schema_catalog.json")).thenReturn(asList(url, url)); + when(urlConverter.toUri(url)).thenReturn(uri); + when(objectMapper.readValue(url, Catalog.class)).thenReturn(mock(Catalog.class)); + + try { + classpathCatalogLoader.getCatalogs(); + } catch (final Exception notExpected) { + fail("Should not have thrown any exception"); + } + + } }