Author: desruisseaux Date: Fri Feb 2 15:53:52 2018 New Revision: 1822977 URL: http://svn.apache.org/viewvc?rev=1822977&view=rev Log: Fix 'required' flag in JAXB annotations.
Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/PT_Locale.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/acquisition/DefaultOperation.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultCitation.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultFeatureCatalogueDescription.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultVerticalExtent.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultOperationMetadata.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultUsage.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/lineage/DefaultNominalResolution.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/maintenance/DefaultMaintenanceInformation.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractElement.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultConformanceResult.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCoverageResult.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDataQuality.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/spatial/DefaultGeoreferenceable.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/spatial/DefaultGridSpatialRepresentation.java sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/test/xml/PackageVerifier.java sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/test/xml/SchemaCompliance.java Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/PT_Locale.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/PT_Locale.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/PT_Locale.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/PT_Locale.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -155,7 +155,7 @@ public final class PT_Locale extends Xml /** * Gets the language code for this PT_Locale. Used in ISO 19115-3. */ - @XmlElement(name = "language") + @XmlElement(name = "language", required = true) private LanguageCode getLanguage() { return isLegacyMetadata ? null : languageCode; } Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/acquisition/DefaultOperation.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/acquisition/DefaultOperation.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/acquisition/DefaultOperation.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/acquisition/DefaultOperation.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -237,7 +237,7 @@ public class DefaultOperation extends IS * @return unique identification of the operation, or {@code null}. */ @Override - @XmlElement(name = "identifier", required = true) + @XmlElement(name = "identifier") public Identifier getIdentifier() { return NonMarshalledAuthority.getMarshallable(identifiers); } @@ -341,7 +341,7 @@ public class DefaultOperation extends IS * @return heritage of the operation, or {@code null}. */ @Override - @XmlElement(name = "parentOperation", required = true) + @XmlElement(name = "parentOperation") public Operation getParentOperation() { return parentOperation; } Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultCitation.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultCitation.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultCitation.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/DefaultCitation.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -297,7 +297,7 @@ public class DefaultCitation extends ISO * @return the reference date. */ @Override - @XmlElement(name = "date", required = true) + @XmlElement(name = "date") public Collection<CitationDate> getDates() { return dates = nonNullCollection(dates, CitationDate.class); } Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultFeatureCatalogueDescription.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultFeatureCatalogueDescription.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultFeatureCatalogueDescription.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultFeatureCatalogueDescription.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -206,7 +206,7 @@ public class DefaultFeatureCatalogueDesc * @return whether or not the feature catalogue is included with the resource. */ @Override - @XmlElement(name = "includedWithDataset", required = true) + @XmlElement(name = "includedWithDataset") public boolean isIncludedWithDataset() { return includedWithDataset; } @@ -299,7 +299,7 @@ public class DefaultFeatureCatalogueDesc * @return bibliographic reference to one or more external feature catalogues. */ @Override - @XmlElement(name = "featureCatalogueCitation", required = true) + @XmlElement(name = "featureCatalogueCitation") public Collection<Citation> getFeatureCatalogueCitations() { return featureCatalogueCitations = nonNullCollection(featureCatalogueCitations, Citation.class); } Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultVerticalExtent.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultVerticalExtent.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultVerticalExtent.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultVerticalExtent.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -214,7 +214,7 @@ public class DefaultVerticalExtent exten * @return the vertical CRS, or {@code null}. */ @Override - @XmlElement(name = "verticalCRS", required = true) + @XmlElement(name = "verticalCRS") public VerticalCRS getVerticalCRS() { return verticalCRS; } Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultOperationMetadata.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultOperationMetadata.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultOperationMetadata.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultOperationMetadata.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -349,7 +349,7 @@ public class DefaultOperationMetadata ex * This attribute has been added by ISO 19115:2014 standard. * If (and only if) marshalling an older standard version, we omit this attribute. */ - @XmlElement(name = "distributedComputingPlatform") + @XmlElement(name = "distributedComputingPlatform", required = true) private Collection<DistributedComputingPlatform> getDistributedComputingPlatform() { return FilterByVersion.CURRENT_METADATA.accept() ? getDistributedComputingPlatforms() : null; } Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultUsage.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultUsage.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultUsage.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultUsage.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -256,7 +256,7 @@ public class DefaultUsage extends ISOMet * @return means of communicating with person(s) and organization(s) using the resource(s). */ @Override - @XmlElement(name = "userContactInfo", required = true) + @XmlElement(name = "userContactInfo") public Collection<Responsibility> getUserContactInfo() { return userContactInfo = nonNullCollection(userContactInfo, Responsibility.class); } Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/lineage/DefaultNominalResolution.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/lineage/DefaultNominalResolution.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/lineage/DefaultNominalResolution.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/lineage/DefaultNominalResolution.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -136,7 +136,7 @@ public class DefaultNominalResolution ex */ @Override @ValueRange(minimum=0, isMinIncluded=false) - @XmlElement(name = "scanningResolution", required = true) + @XmlElement(name = "scanningResolution") public Double getScanningResolution() { return scanningResolution; } @@ -163,7 +163,7 @@ public class DefaultNominalResolution ex */ @Override @ValueRange(minimum=0, isMinIncluded=false) - @XmlElement(name = "groundResolution", required = true) + @XmlElement(name = "groundResolution") public Double getGroundResolution() { return groundResolution; } Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/maintenance/DefaultMaintenanceInformation.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/maintenance/DefaultMaintenanceInformation.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/maintenance/DefaultMaintenanceInformation.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/maintenance/DefaultMaintenanceInformation.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -187,7 +187,7 @@ public class DefaultMaintenanceInformati * @return frequency with which changes and additions are made to the resource, or {@code null}. */ @Override - @XmlElement(name = "maintenanceAndUpdateFrequency", required = true) + @XmlElement(name = "maintenanceAndUpdateFrequency") public MaintenanceFrequency getMaintenanceAndUpdateFrequency() { return maintenanceAndUpdateFrequency; } @@ -506,7 +506,7 @@ public class DefaultMaintenanceInformati * This attribute has been added by ISO 19115:2014 standard. * If (and only if) marshalling an older standard version, we omit this attribute. */ - @XmlElement(name = "maintenanceDate", required = true) + @XmlElement(name = "maintenanceDate") private Collection<CitationDate> getMaintenanceDate() { return FilterByVersion.CURRENT_METADATA.accept() ? getMaintenanceDates() : null; } Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractElement.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractElement.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractElement.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/AbstractElement.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -43,6 +43,7 @@ import org.apache.sis.internal.jaxb.Filt import org.apache.sis.internal.jaxb.LegacyNamespaces; import org.apache.sis.util.collection.CheckedContainer; import org.apache.sis.util.resources.Errors; +import org.apache.sis.xml.Namespaces; import static org.apache.sis.util.collection.Containers.isNullOrEmpty; @@ -534,7 +535,7 @@ public class AbstractElement extends ISO * @return date or range of dates on which a data quality measure was applied. */ @Override - @XmlElement(name = "dateTime") + @XmlElement(name = "dateTime", namespace = Namespaces.DQC) @SuppressWarnings("ReturnOfCollectionOrArrayField") public Collection<Date> getDates() { if (Semaphores.query(Semaphores.NULL_COLLECTION)) { Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultConformanceResult.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultConformanceResult.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultConformanceResult.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultConformanceResult.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -177,7 +177,7 @@ public class DefaultConformanceResult ex * @return explanation of the meaning of conformance, or {@code null}. */ @Override - @XmlElement(name = "explanation", required = true) + @XmlElement(name = "explanation") public InternationalString getExplanation() { return explanation; } Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCoverageResult.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCoverageResult.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCoverageResult.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultCoverageResult.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -25,7 +25,6 @@ import org.opengis.metadata.quality.Cove import org.opengis.metadata.distribution.DataFile; import org.opengis.metadata.spatial.SpatialRepresentation; import org.opengis.metadata.spatial.SpatialRepresentationType; -import org.apache.sis.xml.Namespaces; /** @@ -243,7 +242,7 @@ public class DefaultCoverageResult exten * @return data file containing the result coverage data, or {@code null}. */ @Override - @XmlElement(name = "resultFile", namespace = Namespaces.GCX, required = true) + @XmlElement(name = "resultFile", required = true) public DataFile getResultFile() { return resultFile; } Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDataQuality.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDataQuality.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDataQuality.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultDataQuality.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -189,7 +189,7 @@ public class DefaultDataQuality extends * @return quantitative quality information for the data. */ @Override - @XmlElement(name = "report") + @XmlElement(name = "report", required = true) public Collection<Element> getReports() { return reports = nonNullCollection(reports, Element.class); } Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -204,7 +204,7 @@ public class DefaultQuantitativeResult e * @return value unit for reporting a data quality result, or {@code null}. */ @Override - @XmlElement(name = "valueUnit", required = true) + @XmlElement(name = "valueUnit") public Unit<?> getValueUnit() { return valueUnit; } Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/spatial/DefaultGeoreferenceable.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/spatial/DefaultGeoreferenceable.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/spatial/DefaultGeoreferenceable.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/spatial/DefaultGeoreferenceable.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -26,7 +26,6 @@ import org.opengis.util.InternationalStr import org.opengis.metadata.citation.Citation; import org.opengis.metadata.spatial.Georeferenceable; import org.opengis.metadata.spatial.GeolocationInformation; -import org.apache.sis.xml.Namespaces; /** @@ -290,7 +289,7 @@ public class DefaultGeoreferenceable ext * @return a geolocalisation of the data. */ @Override - @XmlElement(name = "geolocationInformation", namespace = Namespaces.GMI, required = true) + @XmlElement(name = "geolocationInformation", required = true) public Collection<GeolocationInformation> getGeolocationInformation() { return geolocationInformation = nonNullCollection(geolocationInformation, GeolocationInformation.class); } Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/spatial/DefaultGridSpatialRepresentation.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/spatial/DefaultGridSpatialRepresentation.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/spatial/DefaultGridSpatialRepresentation.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/spatial/DefaultGridSpatialRepresentation.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -216,7 +216,7 @@ public class DefaultGridSpatialRepresent * @return information about spatial-temporal axis properties. */ @Override - @XmlElement(name = "axisDimensionProperties", required = true) + @XmlElement(name = "axisDimensionProperties") public List<Dimension> getAxisDimensionProperties() { return axisDimensionProperties = nonNullList(axisDimensionProperties, Dimension.class); } Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/test/xml/PackageVerifier.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/test/xml/PackageVerifier.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/test/xml/PackageVerifier.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/test/xml/PackageVerifier.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -47,7 +47,7 @@ final strictfp class PackageVerifier { /** * Classes or properties having a JAXB annotation in this namespace should be deprecated. */ - private static final Set<String> DEPRECATED_NAMESPACES = Collections.unmodifiableSet(new HashSet<>( + private static final Set<String> LEGACY_NAMESPACES = Collections.unmodifiableSet(new HashSet<>( Arrays.asList(LegacyNamespaces.GMD, LegacyNamespaces.GMI, LegacyNamespaces.SRV))); /** @@ -168,42 +168,61 @@ final strictfp class PackageVerifier { /* * Properties in the legacy GMD or GMI namespaces may be deprecated, depending if a replacement * is already available or not. However properties in other namespaces should not be deprecated. - * Some validations will be disabled for deprecated properties. + * Validation of deprecated properties is skipped because we didn't loaded their schema. */ - boolean isDeprecated = DEPRECATED_NAMESPACES.contains(namespace); - if (!isDeprecated && type.isAnnotationPresent(Deprecated.class)) { + if (LEGACY_NAMESPACES.contains(namespace)) { + return; + } + if (type.isAnnotationPresent(Deprecated.class)) { throw new SchemaException("Unexpected deprecation status of " + type); } + /* + * Verify that class name exists, then verify its namespace (associated to the null key by convention). + */ final Map<String, SchemaCompliance.Info> properties = schemas.typeDefinition(className); if (properties == null) { - if (!isDeprecated) { - throw new SchemaException("Unknown name declared in @XmlRootElement of " + type); + throw new SchemaException("Unknown name declared in @XmlRootElement of " + type); + } + final String expectedNS = properties.get(null).namespace; + if (!namespace.equals(expectedNS)) { + throw new SchemaException(className + " shall be associated to namespace " + expectedNS); + } + for (final Method method : type.getDeclaredMethods()) { + final XmlElement element = method.getDeclaredAnnotation(XmlElement.class); + if (element == null) { + continue; // No @XmlElement annotation - skip this property. + } + final String name = element.name(); + String ns = element.namespace(); + if (ns.equals(AnnotationConsistencyCheck.DEFAULT)) { + ns = namespace; } - } else { /* - * Verify the class namespace (associated to the null key by convention), - * then verify @XmlElement annotation on each property. + * We do not verify fully the properties in legacy namespaces because we didn't loaded their schemas. + * However we verify at least that those properties are not declared as required. */ - final String expectedNS = properties.get(null).namespace; - if (!namespace.equals(expectedNS)) { - throw new SchemaException(className + " shall be associated to namespace " + expectedNS); - } - for (final Method method : type.getDeclaredMethods()) { - final XmlElement element = method.getDeclaredAnnotation(XmlElement.class); - if (element != null) { - final String name = element.name(); - final String ns = element.namespace(); - isDeprecated = DEPRECATED_NAMESPACES.contains(ns); - if (!isDeprecated && method.isAnnotationPresent(Deprecated.class)) { - throw new SchemaException("Unexpected deprecation status of " + className + '.' + name); - } - final SchemaCompliance.Info info = properties.get(name); - if (info == null) { - if (!isDeprecated) { - throw new SchemaException("Unexpected XML element " + className + '.' + name); - } - } + if (LEGACY_NAMESPACES.contains(ns)) { + if (element.required()) { + throw new SchemaException("Legacy property " + className + '.' + name + " should not be required."); } + continue; // Property in a legacy namespace - skip it. + } + /* + * Property in non-legacy namespaces should not be deprecated. Verify also their namespace. + */ + if (method.isAnnotationPresent(Deprecated.class)) { + throw new SchemaException("Unexpected deprecation status of " + className + '.' + name); + } + final SchemaCompliance.Info info = properties.get(name); + if (info == null) { + throw new SchemaException("Unexpected XML element " + className + '.' + name); + } + if (info.namespace != null && !ns.equals(info.namespace)) { + throw new SchemaException(className + '.' + name + " is associated to namespace " + ns + + " while " + info.namespace + " was expected."); + } + if (element.required() != info.isRequired) { + throw new SchemaException("Wrong requirement flag for " + className + '.' + name); } } } Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/test/xml/SchemaCompliance.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/test/xml/SchemaCompliance.java?rev=1822977&r1=1822976&r2=1822977&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/test/xml/SchemaCompliance.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/test/xml/SchemaCompliance.java [UTF-8] Fri Feb 2 15:53:52 2018 @@ -83,6 +83,7 @@ public final strictfp class SchemaCompli m.put("MI_Band_Type", "MD_Band_Type"); m.put("MI_CoverageDescription_Type", "MD_CoverageDescription_Type"); m.put("MI_Georectified_Type", "MD_Georectified_Type"); + m.put("MI_Georeferenceable_Type", "MD_Georeferenceable_Type"); m.put("LE_ProcessStep_Type", "LI_ProcessStep_Type"); m.put("AbstractMX_File_Type", "MX_DataFile_Type"); m.put("Abstract_DataQuality_Type", "DQ_DataQuality_Type"); @@ -208,6 +209,13 @@ public final strictfp class SchemaCompli private String currentPropertyType; /** + * Default value for the {@code required} attribute of {@link XmlElement}. This default value should + * be {@code true} for properties declared inside a {@code <sequence>} element, and {@code false} for + * properties declared inside a {@code <choice>} element. + */ + private boolean requiredByDefault; + + /** * Namespace of the type or properties being defined. * This is specified by {@code <xs:schema targetNamespace="(…)">}. */ @@ -377,6 +385,7 @@ public final strictfp class SchemaCompli * one class for representing those two distincts ISO types. Note that not all ISO 19115-2 * types extend an ISO 19115-1 type, so we need to apply a case-by-case approach. */ + requiredByDefault = true; name = TYPES_TO_MERGE.getOrDefault(name, name); preparePropertyDefinitions(name); storePropertyDefinition(node); @@ -402,29 +411,39 @@ public final strictfp class SchemaCompli */ private void storePropertyDefinition(final Node node) throws SchemaException { if (XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(node.getNamespaceURI())) { - if ("element".equals(node.getNodeName())) { - boolean isRequired = false; - boolean isCollection = false; - final NamedNodeMap attributes = node.getAttributes(); - if (attributes != null) { - Node attr = attributes.getNamedItem("minOccurs"); - if (attr != null) { - final String value = attr.getNodeValue(); - if (value != null) { - isRequired = Integer.parseInt(getMandatoryAttribute(node, "minOccurs")) > 0; + switch (node.getNodeName()) { + case "sequence": { + requiredByDefault = true; + break; + } + case "choice": { + requiredByDefault = false; + break; + } + case "element": { + boolean isRequired = requiredByDefault; + boolean isCollection = false; + final NamedNodeMap attributes = node.getAttributes(); + if (attributes != null) { + Node attr = attributes.getNamedItem("minOccurs"); + if (attr != null) { + final String value = attr.getNodeValue(); + if (value != null) { + isRequired = Integer.parseInt(value) > 0; + } } - } - attr = attributes.getNamedItem("maxOccurs"); - if (attr != null) { - final String value = attr.getNodeValue(); - if (value != null) { - isCollection = value.equals("unbounded") || Integer.parseInt(value) > 1; + attr = attributes.getNamedItem("maxOccurs"); + if (attr != null) { + final String value = attr.getNodeValue(); + if (value != null) { + isCollection = value.equals("unbounded") || Integer.parseInt(value) > 1; + } } } + addProperty(getMandatoryAttribute(node, "name").intern(), + trim(getMandatoryAttribute(node, "type"), PROPERTY_TYPE_SUFFIX).intern(), isRequired, isCollection); + return; } - addProperty(getMandatoryAttribute(node, "name").intern(), - trim(getMandatoryAttribute(node, "type"), PROPERTY_TYPE_SUFFIX).intern(), isRequired, isCollection); - return; } } for (Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) {