This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch geoapi-4.0 in repository https://gitbox.apache.org/repos/asf/sis.git
commit 19acaac2f0002dc11fc91a92945ed772425eea80 Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Wed Sep 22 12:43:35 2021 +0200 Fix unmarshalling of <gmi:MI_PolarizationOrientationCode>. --- .../org/apache/sis/xml/RenameOnImport.lst | 1 + .../sis/metadata/iso/content/DefaultBandTest.java | 141 +++++++++++++++++++++ .../apache/sis/test/suite/MetadataTestSuite.java | 1 + 3 files changed, 143 insertions(+) diff --git a/core/sis-metadata/src/main/resources/org/apache/sis/xml/RenameOnImport.lst b/core/sis-metadata/src/main/resources/org/apache/sis/xml/RenameOnImport.lst index 42ad3cf..93ead50 100644 --- a/core/sis-metadata/src/main/resources/org/apache/sis/xml/RenameOnImport.lst +++ b/core/sis-metadata/src/main/resources/org/apache/sis/xml/RenameOnImport.lst @@ -406,6 +406,7 @@ http://standards.iso.org/iso/19115/-3/mrc/1.0 MI_BandDefinition MI_CoverageDescription : MD_CoverageDescription MI_ImageDescription : MD_ImageDescription + MI_PolarizationOrientationCode/MI_PolarisationOrientationCode MI_RangeElementDescription definition name diff --git a/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/content/DefaultBandTest.java b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/content/DefaultBandTest.java new file mode 100644 index 0000000..b359fa5 --- /dev/null +++ b/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/content/DefaultBandTest.java @@ -0,0 +1,141 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.sis.metadata.iso.content; + +import javax.xml.bind.JAXBException; +import org.opengis.metadata.content.PolarisationOrientation; +import org.apache.sis.util.Version; +import org.apache.sis.test.xml.TestCase; +import org.junit.Test; + +import static org.apache.sis.test.MetadataAssert.*; + + +/** + * Tests {@link DefaultBand}. + * + * @author Martin Desruisseaux (Geomatys) + * @version 1.1 + * @since 1.1 + * @module + */ +public final strictfp class DefaultBandTest extends TestCase { + /** + * The XML fragment used for testing. + */ + private static final String XML = + "<mrc:MI_Band xmlns:mrc=\"http://standards.iso.org/iso/19115/-3/mrc/1.0\" xmlns:gco=\"http://standards.iso.org/iso/19115/-3/gco/1.0\">\n" + + " <mrc:numberOfValues>\n" + + " <gco:Integer>1000</gco:Integer>\n" // Only in 2014 schema. + + " </mrc:numberOfValues>\n" + + " <mrc:nominalSpatialResolution>\n" + + " <gco:Real>10.0</gco:Real>\n" + + " </mrc:nominalSpatialResolution>\n" + + " <mrc:detectedPolarisation>\n" + + " <mrc:MI_PolarisationOrientationCode " // Spell with "s" in 2014 schema. + + "codeList=\"http://standards.iso.org/iso/19115/resources/Codelist/cat/codelists.xml#MI_PolarisationOrientationCode\" codeListValue=\"vertical\">" + + "Vertical" + + "</mrc:MI_PolarisationOrientationCode>\n" + + " </mrc:detectedPolarisation>\n" + + "</mrc:MI_Band>\n"; + + /** + * XML fragment using legacy schema. This XML contains an {@link PolarisationOrientation} code list, + * which was spell with a "z" in the 2003 version of ISO 19115 standard. This XML is used for testing + * that the legacy spelling is handled when (un)marshalling a legacy document. + */ + private static final String XML_LEGACY = + "<gmi:MI_Band xmlns:gmi=\"http://standards.iso.org/iso/19115/-2/gmi/1.0\" xmlns:gco=\"http://www.isotc211.org/2005/gco\">\n" + + " <gmi:nominalSpatialResolution>\n" + + " <gco:Real>10.0</gco:Real>\n" + + " </gmi:nominalSpatialResolution>\n" + + " <gmi:detectedPolarisation>\n" + + " <gmi:MI_PolarizationOrientationCode " // Spell with "z" in 2003 schema. + + "codeList=\"http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MI_PolarisationOrientationCode\" codeListValue=\"vertical\">" + + "Vertical" + + "</gmi:MI_PolarizationOrientationCode>\n" + + " </gmi:detectedPolarisation>\n" + + "</gmi:MI_Band>\n"; + + /** + * Tests marshalling a small metadata containing a {@link PolarisationOrientation}. + * + * @throws JAXBException if an error occurred during XML marshalling. + */ + @Test + public void testMarshalling() throws JAXBException { + marshal(VERSION_2014, XML); + } + + /** + * Tests marshalling a small metadata in legacy XML schema. + * + * @throws JAXBException if an error occurred during XML marshalling. + */ + @Test + public void testMarshallingLegacy() throws JAXBException { + marshal(VERSION_2007, XML_LEGACY); + } + + /** + * Implementation of marshalling tests. + * + * @param version version of the XML schema to test. + * @param expected expected XML fragment. + */ + private void marshal(final Version version, final String expected) throws JAXBException { + final DefaultBand band = new DefaultBand(); + band.setNumberOfValues(1000); + band.setNominalSpatialResolution(10d); + band.setDetectedPolarisation(PolarisationOrientation.VERTICAL); + final String actual = marshal(band, version); + assertXmlEquals(expected, actual, "xmlns:*"); + } + + /** + * Tests unmarshalling a small metadata containing a {@link PolarisationOrientation}. + * + * @throws JAXBException if an error occurred during XML unmarshalling. + */ + @Test + public void testUnmarshalling() throws JAXBException { + unmarshal(XML, 1000); + } + + /** + * Tests unmarshalling a small metadata in legacy XML schema. + * + * @throws JAXBException if an error occurred during XML unmarshalling. + */ + @Test + public void testUnmarshallingLegacy() throws JAXBException { + unmarshal(XML_LEGACY, null); + } + + /** + * Implementation of unmarshalling tests. + * + * @param xml XML fragment to test. + * @param numberOfValues expected values of {@code numberOfValues} property. + */ + private void unmarshal(final String xml, final Integer numberOfValues) throws JAXBException { + final DefaultBand band = unmarshal(DefaultBand.class, xml); + assertEquals(Double.valueOf(10), band.getNominalSpatialResolution()); + assertEquals(PolarisationOrientation.VERTICAL, band.getDetectedPolarisation()); + assertEquals(numberOfValues, band.getNumberOfValues()); + } +} diff --git a/core/sis-metadata/src/test/java/org/apache/sis/test/suite/MetadataTestSuite.java b/core/sis-metadata/src/test/java/org/apache/sis/test/suite/MetadataTestSuite.java index 19ce690..9714e54 100644 --- a/core/sis-metadata/src/test/java/org/apache/sis/test/suite/MetadataTestSuite.java +++ b/core/sis-metadata/src/test/java/org/apache/sis/test/suite/MetadataTestSuite.java @@ -107,6 +107,7 @@ import org.junit.BeforeClass; org.apache.sis.metadata.iso.extent.DefaultGeographicBoundingBoxTest.class, org.apache.sis.metadata.iso.extent.DefaultExtentTest.class, org.apache.sis.metadata.iso.extent.ExtentsTest.class, + org.apache.sis.metadata.iso.content.DefaultBandTest.class, org.apache.sis.metadata.iso.spatial.DefaultGeorectifiedTest.class, org.apache.sis.metadata.iso.identification.DefaultKeywordsTest.class, org.apache.sis.metadata.iso.identification.DefaultRepresentativeFractionTest.class,