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 6812aa0843fd381e28f9e1b6d288fadf40d29cde
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Sat Jun 17 13:40:27 2023 +0200

    Give public access to JAXB adapters in internal API.
    It reduces the needs for `opens` statements in `module-info.java`.
---
 .../gui/referencing/PositionableProjection.java    | 10 +++++
 .../sis/internal/jaxb/code/MD_ObligationCode.java  |  2 +-
 .../jaxb/code/MD_PixelOrientationCode.java         |  2 +-
 .../internal/jaxb/code/MD_TopicCategoryCode.java   |  2 +-
 .../internal/jaxb/code/SV_ParameterDirection.java  |  2 +-
 .../sis/internal/jaxb/gco/GO_CharacterString.java  | 20 ++++++----
 .../apache/sis/internal/jaxb/gco/GO_DateTime.java  |  4 +-
 .../apache/sis/internal/jaxb/gco/GO_Distance.java  |  2 +-
 .../apache/sis/internal/jaxb/gco/GO_Integer.java   |  2 +-
 .../apache/sis/internal/jaxb/gco/GO_Measure.java   |  2 +-
 .../internal/jaxb/gco/GO_MultiplicityRange.java    |  8 ++--
 .../org/apache/sis/internal/jaxb/gco/GO_Real.java  |  2 +-
 .../apache/sis/internal/jaxb/gco/GO_Record.java    |  2 +-
 .../sis/internal/jaxb/gco/GO_RecordType.java       |  2 +-
 .../apache/sis/internal/jaxb/gco/GO_Temporal.java  |  4 +-
 .../org/apache/sis/internal/jaxb/gco/GO_URL.java   |  6 +--
 .../sis/internal/jaxb/gco/GO_UnlimitedInteger.java |  4 +-
 .../jaxb/gco/InternationalStringAdapter.java       |  2 +-
 .../apache/sis/internal/jaxb/gco/Multiplicity.java |  2 +-
 .../sis/internal/jaxb/gco/MultiplicityRange.java   |  8 ++--
 .../sis/internal/jaxb/gco/StringAdapter.java       |  2 +-
 .../sis/internal/jaxb/gco/UnlimitedInteger.java    | 16 +++++---
 .../org/apache/sis/internal/jaxb/gcx/Anchor.java   |  2 +-
 .../org/apache/sis/internal/jaxb/gcx/FileName.java |  4 +-
 .../apache/sis/internal/jaxb/gcx/MimeFileType.java |  4 +-
 .../sis/internal/jaxb/geometry/GM_Object.java      |  2 +-
 .../sis/internal/jaxb/gml/CodeListAdapter.java     | 12 +++---
 .../apache/sis/internal/jaxb/gml/GMLAdapter.java   |  2 +-
 .../apache/sis/internal/jaxb/gml/TimePeriod.java   |  4 +-
 .../apache/sis/internal/jaxb/gts/TM_Duration.java  |  2 +-
 .../sis/internal/jaxb/gts/TM_PeriodDuration.java   |  2 +-
 .../org/apache/sis/internal/jaxb/lan/Country.java  | 20 ++++++----
 .../apache/sis/internal/jaxb/lan/LanguageCode.java |  6 +--
 .../jaxb/lan/LocalisedCharacterString.java         |  6 +--
 .../apache/sis/internal/jaxb/lan/PT_FreeText.java  |  4 +-
 .../apache/sis/internal/jaxb/lan/PT_Locale.java    | 30 +++++++++------
 .../apache/sis/internal/jaxb/lan/TextGroup.java    |  4 +-
 .../internal/jaxb/metadata/replace/Parameter.java  |  5 +++
 .../jaxb/metadata/replace/QualityParameter.java    | 23 ++++++-----
 .../metadata/replace/ReferenceSystemMetadata.java  |  6 ++-
 .../internal/jaxb/metadata/replace/SensorType.java | 12 +++++-
 .../jaxb/metadata/replace/ServiceParameter.java    | 45 ++++++++++++++--------
 .../sis/internal/metadata/legacy/MediumName.java   | 10 +++++
 .../apache/sis/internal/jaxb/referencing/Code.java |  6 +--
 .../jaxb/referencing/SC_DerivedCRSType.java        |  6 +--
 45 files changed, 200 insertions(+), 123 deletions(-)

diff --git 
a/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/PositionableProjection.java
 
b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/PositionableProjection.java
index c059ddd01f..43fb18c092 100644
--- 
a/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/PositionableProjection.java
+++ 
b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/PositionableProjection.java
@@ -186,6 +186,16 @@ public abstract class PositionableProjection extends 
CodeList<PositionableProjec
         return values();
     }
 
+    /**
+     * Disables the search for UML identifiers because we do not export this 
package to GeoAPI.
+     *
+     * @return {@code null}.
+     */
+    @Override
+    public String identifier() {
+        return null;
+    }
+
     /**
      * Returns a name for this enumeration which can be used in a user 
interface.
      *
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/MD_ObligationCode.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/MD_ObligationCode.java
index cfea9da3de..a08b5877ea 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/MD_ObligationCode.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/MD_ObligationCode.java
@@ -36,7 +36,7 @@ public final class MD_ObligationCode extends 
EnumAdapter<MD_ObligationCode, Obli
      * The enumeration value.
      */
     @XmlElement(name = "MD_ObligationCode", namespace = Namespaces.MEX)
-    private String value;
+    public String value;
 
     /**
      * Empty constructor for JAXB only.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/MD_PixelOrientationCode.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/MD_PixelOrientationCode.java
index 86d7fac564..b67f37ed44 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/MD_PixelOrientationCode.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/MD_PixelOrientationCode.java
@@ -37,7 +37,7 @@ public final class MD_PixelOrientationCode extends 
EnumAdapter<MD_PixelOrientati
      * The enumeration value.
      */
     @XmlElement(name = "MD_PixelOrientationCode", namespace = Namespaces.MSR)
-    private String value;
+    public String value;
 
     /**
      * Empty constructor for JAXB only.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/MD_TopicCategoryCode.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/MD_TopicCategoryCode.java
index ce95d6e80e..b314e4a385 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/MD_TopicCategoryCode.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/MD_TopicCategoryCode.java
@@ -38,7 +38,7 @@ public final class MD_TopicCategoryCode extends 
EnumAdapter<MD_TopicCategoryCode
      * The enumeration value.
      */
     @XmlElement(name = "MD_TopicCategoryCode", namespace = Namespaces.MRI)
-    private String value;
+    public String value;
 
     /**
      * Empty constructor for JAXB only.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/SV_ParameterDirection.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/SV_ParameterDirection.java
index c031653930..470e07492c 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/SV_ParameterDirection.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/SV_ParameterDirection.java
@@ -36,7 +36,7 @@ public final class SV_ParameterDirection extends 
EnumAdapter<SV_ParameterDirecti
      * The enumeration value.
      */
     @XmlElement(name = "SV_ParameterDirection", namespace = Namespaces.SRV)
-    private String value;
+    public String value;
 
     /**
      * Empty constructor for JAXB only.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_CharacterString.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_CharacterString.java
index b6872982a9..053aeb455d 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_CharacterString.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_CharacterString.java
@@ -146,7 +146,7 @@ public class GO_CharacterString {
     /**
      * Empty constructor for JAXB and subclasses.
      */
-    protected GO_CharacterString() {
+    public GO_CharacterString() {
     }
 
     /**
@@ -202,6 +202,8 @@ public class GO_CharacterString {
      * instances, as the latter are handled by {@link #getCodeList()}.
      *
      * <p>This method is invoked by JAXB at marshalling time and should not 
need to be invoked directly.</p>
+     *
+     * @return the character string value.
      */
     @XmlElements({
         @XmlElement(type = String.class,       name = "CharacterString"),
@@ -210,7 +212,7 @@ public class GO_CharacterString {
         @XmlElement(type = MimeFileType.class, name = "MimeFileType", 
namespace = Namespaces.GCX),
         @XmlElement(type = GO_URL.class,       name = "URL",          
namespace = LegacyNamespaces.GMD)
     })
-    private Object getValue() {
+    public Object getValue() {
         switch (type) {
             case 0:         return StringAdapter.toString(text);
             case URL:       return new GO_URL(text.toString());
@@ -225,9 +227,10 @@ public class GO_CharacterString {
      * Sets the {@code <gco:CharacterString>}, {@code <gcx:FileName>} or 
{@code <gcx:MimeFileType>} value.
      *
      * <p>This method is invoked by JAXB at unmarshalling time and should not 
need to be invoked directly.</p>
+     *
+     * @param  value  the character string value.
      */
-    @SuppressWarnings("unused")
-    private void setValue(final Object value) {
+    public void setValue(final Object value) {
         if (value instanceof Anchor) {
             setText((Anchor) value, ANCHOR);
         } else if (value instanceof FileName) {
@@ -250,11 +253,13 @@ public class GO_CharacterString {
      * do not have JAXB annotations. If those annotations are added in a 
future GeoAPI implementation, then
      * we could replace this mechanism by a simple property annotated with 
{@code XmlElementRef}.
      *
+     * @return the code list value.
+     *
      * @since 0.7
      */
     @XmlAnyElement
     @Workaround(library = "GeoAPI", version = "3.0")
-    private Object getCodeList() {
+    public Object getCodeList() {
         if (type != ENUM) {
             return null;
         }
@@ -279,9 +284,10 @@ public class GO_CharacterString {
      * Invoked by JAXB for any XML element which is not a {@code 
<gco:CharacterString>}, {@code <gcx:FileName>}
      * or {@code <gcx:MimeFileType>}. This method presumes that the element 
name is the CodeList standard name.
      * If not, the element will be ignored.
+     *
+     * @param  value  the code list value.
      */
-    @SuppressWarnings({"unchecked", "unused"})
-    private void setCodeList(final Object value) {
+    public void setCodeList(final Object value) {
         final Element e = (Element) value;
         if (e.getNodeType() == Element.ELEMENT_NODE) {
             final Class<?> ct = Types.forStandardName(e.getLocalName());
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_DateTime.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_DateTime.java
index 389cfcef33..3b4bc06ceb 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_DateTime.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_DateTime.java
@@ -67,7 +67,7 @@ public class GO_DateTime extends XmlAdapter<GO_DateTime, 
Date> {
      */
     @XmlElement(name = "DateTime")
     @XmlSchemaType(name = "dateTime")
-    private XMLGregorianCalendar dateTime;
+    public XMLGregorianCalendar dateTime;
 
     /**
      * The date value using the {@code "Date"} name,
@@ -75,7 +75,7 @@ public class GO_DateTime extends XmlAdapter<GO_DateTime, 
Date> {
      */
     @XmlElement(name = "Date")
     @XmlSchemaType(name = "date")
-    private XMLGregorianCalendar date;
+    public XMLGregorianCalendar date;
 
     /**
      * Empty constructor for JAXB.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Distance.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Distance.java
index 9864acb523..7251b49350 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Distance.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Distance.java
@@ -41,7 +41,7 @@ public final class GO_Distance extends 
XmlAdapter<GO_Distance, Double> {
      * A proxy representation of the {@code <gco:Distance>} element.
      */
     @XmlElement(name = "Distance")
-    private Measure distance;
+    public Measure distance;
 
     /**
      * Empty constructor used only by JAXB.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Integer.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Integer.java
index 61b9777963..118efa01fa 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Integer.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Integer.java
@@ -41,7 +41,7 @@ public class GO_Integer extends PropertyType<GO_Integer, 
Integer> {
     /**
      * Empty constructor used only by JAXB.
      */
-    GO_Integer() {
+    public GO_Integer() {
     }
 
     /**
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Measure.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Measure.java
index 5f8148a9c4..1e01baf8e8 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Measure.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Measure.java
@@ -41,7 +41,7 @@ public final class GO_Measure extends XmlAdapter<GO_Measure, 
Double> {
      * A proxy representation of the {@code <gco:Measure>} element.
      */
     @XmlElement(name = "Measure")
-    private Measure measure;
+    public Measure measure;
 
     /**
      * Empty constructor used only by JAXB.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_MultiplicityRange.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_MultiplicityRange.java
index 810e2f4095..416a057f42 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_MultiplicityRange.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_MultiplicityRange.java
@@ -29,11 +29,11 @@ import org.apache.sis.measure.NumberRange;
  * @version 1.4
  * @since   1.0
  */
-final class GO_MultiplicityRange extends PropertyType<GO_MultiplicityRange, 
NumberRange<Integer>> {
+public final class GO_MultiplicityRange extends 
PropertyType<GO_MultiplicityRange, NumberRange<Integer>> {
     /**
      * Empty constructor used only by JAXB.
      */
-    GO_MultiplicityRange() {
+    public GO_MultiplicityRange() {
     }
 
     /**
@@ -75,7 +75,7 @@ final class GO_MultiplicityRange extends 
PropertyType<GO_MultiplicityRange, Numb
      * @return the value to be marshalled.
      */
     @XmlElement(name = "MultiplicityRange")
-    private MultiplicityRange getElement() {
+    public MultiplicityRange getElement() {
         return MultiplicityRange.wrap(metadata);
     }
 
@@ -84,7 +84,7 @@ final class GO_MultiplicityRange extends 
PropertyType<GO_MultiplicityRange, Numb
      *
      * @param  metadata  the unmarshalled value.
      */
-    private void setElement(final MultiplicityRange metadata) {
+    public void setElement(final MultiplicityRange metadata) {
         if (metadata != null) {
             this.metadata = metadata.value();
         }
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Real.java 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Real.java
index 6b7bcff1f2..0e7860ca15 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Real.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Real.java
@@ -42,7 +42,7 @@ public class GO_Real extends PropertyType<GO_Real, Double> {
     /**
      * Empty constructor used only by JAXB.
      */
-    GO_Real() {
+    public GO_Real() {
     }
 
     /**
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Record.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Record.java
index 7f1616586b..b0ab926d59 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Record.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Record.java
@@ -34,7 +34,7 @@ public class GO_Record extends PropertyType<GO_Record, 
Record> {
     /**
      * Empty constructor for JAXB only.
      */
-    GO_Record() {
+    public GO_Record() {
     }
 
     /**
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_RecordType.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_RecordType.java
index 269a0a85a5..60b79a89d1 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_RecordType.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_RecordType.java
@@ -34,7 +34,7 @@ public class GO_RecordType extends 
PropertyType<GO_RecordType, RecordType> {
     /**
      * Empty constructor for JAXB only.
      */
-    GO_RecordType() {
+    public GO_RecordType() {
     }
 
     /**
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Temporal.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Temporal.java
index 59e39e1e78..d72e75a13e 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Temporal.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Temporal.java
@@ -65,7 +65,7 @@ public class GO_Temporal extends XmlAdapter<GO_Temporal, 
Temporal> {
      */
     @XmlElement(name = "DateTime")
     @XmlSchemaType(name = "dateTime")
-    private XMLGregorianCalendar dateTime;
+    public XMLGregorianCalendar dateTime;
 
     /**
      * The date value using the {@code "Date"} name,
@@ -73,7 +73,7 @@ public class GO_Temporal extends XmlAdapter<GO_Temporal, 
Temporal> {
      */
     @XmlElement(name = "Date")
     @XmlSchemaType(name = "date")
-    private XMLGregorianCalendar date;
+    public XMLGregorianCalendar date;
 
     /**
      * Empty constructor for JAXB.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_URL.java 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_URL.java
index 70b46b35f7..39984b3ef3 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_URL.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_URL.java
@@ -35,18 +35,18 @@ import jakarta.xml.bind.annotation.XmlValue;
  * @version 1.4
  * @since   1.0
  */
-final class GO_URL {
+public final class GO_URL {
     /**
      * The URI as a string. We uses a string in order to allow
      * the user to catch potential error at unmarshalling time.
      */
     @XmlValue
-    private String uri;
+    public String uri;
 
     /**
      * Empty constructor for JAXB only.
      */
-    GO_URL() {
+    public GO_URL() {
     }
 
     /**
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_UnlimitedInteger.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_UnlimitedInteger.java
index 0bb69868e9..3579b02b9b 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_UnlimitedInteger.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/GO_UnlimitedInteger.java
@@ -35,11 +35,11 @@ import jakarta.xml.bind.annotation.XmlType;
  * @since 1.0
  */
 @XmlType(name = "UnlimitedInteger_PropertyType")
-final class GO_UnlimitedInteger extends PropertyType<GO_UnlimitedInteger, 
UnlimitedInteger> {
+public final class GO_UnlimitedInteger extends 
PropertyType<GO_UnlimitedInteger, UnlimitedInteger> {
     /**
      * Empty constructor used only by JAXB.
      */
-    GO_UnlimitedInteger() {
+    public GO_UnlimitedInteger() {
     }
 
     /**
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/InternationalStringAdapter.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/InternationalStringAdapter.java
index 69025efa1b..eb7cea3ab9 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/InternationalStringAdapter.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/InternationalStringAdapter.java
@@ -38,7 +38,7 @@ public class InternationalStringAdapter extends 
XmlAdapter<GO_CharacterString, I
     /**
      * Empty constructor for JAXB.
      */
-    InternationalStringAdapter() {
+    public InternationalStringAdapter() {
     }
 
     /**
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/Multiplicity.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/Multiplicity.java
index 4773d27910..88d4512cda 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/Multiplicity.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/Multiplicity.java
@@ -58,7 +58,7 @@ public final class Multiplicity {
     @XmlElementWrapper(name = "Multiplicity", required = true)
     @XmlElement(name = "range", required = true)
     @XmlJavaTypeAdapter(GO_MultiplicityRange.class)
-    private List<NumberRange<Integer>> range;
+    public List<NumberRange<Integer>> range;
 
     /**
      * Creates a new multiplicity initialized with no ranges.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/MultiplicityRange.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/MultiplicityRange.java
index cb3dff2b6b..d272f2026f 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/MultiplicityRange.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/MultiplicityRange.java
@@ -35,26 +35,26 @@ import org.apache.sis.xml.NilReason;
     "lower",
     "upper"
 })
-final class MultiplicityRange {
+public final class MultiplicityRange {
     /**
      * The lower bound.
      */
     @XmlElement(required = true)
     @XmlJavaTypeAdapter(GO_Integer.class)
-    private Integer lower;
+    public Integer lower;
 
     /**
      * The upper bound.
      */
     @XmlElement(required = true)
     @XmlJavaTypeAdapter(GO_UnlimitedInteger.class)
-    private UnlimitedInteger upper;
+    public UnlimitedInteger upper;
 
     /**
      * Creates an initially empty range.
      * This is invoked by JAXB at unmarshalling time.
      */
-    private MultiplicityRange() {
+    public MultiplicityRange() {
     }
 
     /**
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/StringAdapter.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/StringAdapter.java
index e16e162021..46817c7911 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/StringAdapter.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/StringAdapter.java
@@ -38,7 +38,7 @@ public class StringAdapter extends 
XmlAdapter<GO_CharacterString, String> {
     /**
      * Empty constructor for JAXB or subclasses.
      */
-    protected StringAdapter() {
+    public StringAdapter() {
     }
 
     /**
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/UnlimitedInteger.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/UnlimitedInteger.java
index 5b015a3ee4..c9d43c66bf 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/UnlimitedInteger.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gco/UnlimitedInteger.java
@@ -37,26 +37,26 @@ import jakarta.xml.bind.annotation.XmlValue;
  */
 @XmlType(name = "UnlimitedInteger_Type")
 @XmlRootElement(name = "UnlimitedInteger")
-final class UnlimitedInteger {
+public final class UnlimitedInteger {
     /**
      * The value, limited to 32 bits integer for now. A null value is 
interpreted as missing value,
      * unless {@link #isInfinite} is {@code true}.
      */
     @XmlValue
     @XmlSchemaType(name = "nonNegativeInteger")
-    private Integer value;
+    public Integer value;
 
     /**
      * Whether the value should be considered infinite.
      * An infinite value implies {@code xsi:nil = true}.
      */
     @XmlAttribute(name = "isInfinite")
-    private Boolean isInfinite;
+    public Boolean isInfinite;
 
     /**
      * Creates a new {@code gco:UnlimitedInteger} for a missing value.
      */
-    UnlimitedInteger() {
+    public UnlimitedInteger() {
     }
 
     /**
@@ -92,17 +92,21 @@ final class UnlimitedInteger {
     /**
      * Returns whether the value should be considered unspecified. An infinite 
value is considered nil.
      * This method never returns {@code false}; if the value is not nil, then 
{@code null} is returned.
+     *
+     * @return the nil status.
      */
     @XmlAttribute(name = "nil", namespace = 
XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI)
-    private Boolean getNil() {
+    public Boolean getNil() {
         return (value == null) ? Boolean.TRUE : null;
     }
 
     /**
      * Sets whether the value should be considered unspecified.
      * This method is invoked by JAXB at unmarshalling time.
+     *
+     * @param  nil  the nil status.
      */
-    private void setNil(final Boolean nil) {
+    public void setNil(final Boolean nil) {
         if (nil != null && nil) {
             value = null;
             // Leave 'isInfinite' unchanged since an infinite value is also 
nil.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gcx/Anchor.java 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gcx/Anchor.java
index 436af07c11..ecf56cb766 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gcx/Anchor.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gcx/Anchor.java
@@ -54,7 +54,7 @@ public final class Anchor extends XLink implements 
InternationalString {
      * This is the value returned by {@link #toString()}.
      */
     @XmlValue
-    private String value;
+    public String value;
 
     /**
      * Creates a uninitialized {@code Anchor}.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gcx/FileName.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gcx/FileName.java
index e73b113582..460a371ac8 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gcx/FileName.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gcx/FileName.java
@@ -47,14 +47,14 @@ public final class FileName {
      * The value of the {@code src} attribute, which is the file path.
      */
     @XmlAttribute
-    private String src;
+    public String src;
 
     /**
      * A human-readable description of the filename.
      * If {@link #src} is null, then this will be taken as the file path.
      */
     @XmlValue
-    private String value;
+    public String value;
 
     /**
      * Empty constructor for JAXB only.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gcx/MimeFileType.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gcx/MimeFileType.java
index 1082b4ffb1..8eaab7d9ac 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gcx/MimeFileType.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gcx/MimeFileType.java
@@ -47,14 +47,14 @@ public final class MimeFileType {
      * The value of the {@code type} attribute, which is the mime type.
      */
     @XmlAttribute
-    private String type;
+    public String type;
 
     /**
      * A human-readable description of the mime type. If {@link #type} is null,
      * then this will be taken as the mime type.
      */
     @XmlValue
-    private String value;
+    public String value;
 
     /**
      * Empty constructor for JAXB only.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/geometry/GM_Object.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/geometry/GM_Object.java
index a4a8f6099b..c650f033bf 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/geometry/GM_Object.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/geometry/GM_Object.java
@@ -40,7 +40,7 @@ public class GM_Object extends XmlAdapter<GM_Object, 
Geometry> {
      * The Geometry value covered by a {@code gml:**} element.
      */
     @XmlElementRef(name = "AbstractGeometry", namespace = Namespaces.GML, type 
= JAXBElement.class)
-    protected JAXBElement<? extends Geometry> geometry;
+    public JAXBElement<? extends Geometry> geometry;
 
     /**
      * Empty constructor for JAXB and subclasses only.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/CodeListAdapter.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/CodeListAdapter.java
index 04dbafc69a..6f4e25a7b0 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/CodeListAdapter.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/CodeListAdapter.java
@@ -37,21 +37,19 @@ import org.apache.sis.util.iso.Types;
  */
 public abstract class CodeListAdapter<BoundType extends CodeList<BoundType>> 
extends XmlAdapter<CodeListAdapter.Value, BoundType> {
     /**
-     * Wraps the {@link CodeList} value in a GML document. This class does not 
need to be public
-     * even if exported from public {@link CodeListAdapter} API, because it is 
used only by JAXB
-     * and JAXB can access private members.
+     * Wraps the {@link CodeList} value in a GML document.
      */
-    static final class Value {
+    public static final class Value {
         /** The code space of the {@link #value} as a URI, or {@code null}. */
         @XmlAttribute
-        String codeSpace;
+        public String codeSpace;
 
         /** The code list identifier. */
         @XmlValue
-        String value;
+        public String value;
 
         /** Empty constructor for JAXB only. */
-        Value() {
+        public Value() {
         }
 
         /** Creates a new wrapper for the given value. */
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/GMLAdapter.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/GMLAdapter.java
index 5aba8d681e..97f1e99a20 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/GMLAdapter.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/GMLAdapter.java
@@ -62,7 +62,7 @@ public abstract class GMLAdapter {
      */
     @XmlID
     @XmlAttribute(namespace = Namespaces.GML, required = true)
-    private String id;
+    public String id;
 
     /**
      * Creates a new GML object with no ID.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/TimePeriod.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/TimePeriod.java
index 8b676f9a11..d7a3fbec1a 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/TimePeriod.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/TimePeriod.java
@@ -52,7 +52,7 @@ public final class TimePeriod extends GMLAdapter {
         @XmlElement(type = TimePeriodBound.GML3.class, name = "beginPosition"),
         @XmlElement(type = TimePeriodBound.GML2.class, name = "begin")
     })
-    TimePeriodBound begin;
+    public TimePeriodBound begin;
 
     /**
      * The end time, which may be marshalled in a GML3 way or GML2 way.
@@ -62,7 +62,7 @@ public final class TimePeriod extends GMLAdapter {
         @XmlElement(type = TimePeriodBound.GML3.class, name = "endPosition"),
         @XmlElement(type = TimePeriodBound.GML2.class, name = "end")
     })
-    TimePeriodBound end;
+    public TimePeriodBound end;
 
     /**
      * Empty constructor used by JAXB.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gts/TM_Duration.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gts/TM_Duration.java
index 9de7a6bef5..bcc00c3715 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gts/TM_Duration.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gts/TM_Duration.java
@@ -40,7 +40,7 @@ public final class TM_Duration extends 
PropertyType<TM_Duration, Duration> {
     /**
      * Empty constructor for JAXB.
      */
-    TM_Duration() {
+    public TM_Duration() {
     }
 
     /**
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gts/TM_PeriodDuration.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gts/TM_PeriodDuration.java
index 3d7c2aa862..b02fcb069b 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gts/TM_PeriodDuration.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gts/TM_PeriodDuration.java
@@ -48,7 +48,7 @@ public class TM_PeriodDuration extends 
PropertyType<TM_PeriodDuration, PeriodDur
     /**
      * Empty constructor for JAXB.
      */
-    TM_PeriodDuration() {
+    public TM_PeriodDuration() {
     }
 
     /**
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/Country.java 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/Country.java
index c1d5e67222..f5923c42d5 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/Country.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/Country.java
@@ -67,7 +67,7 @@ public final class Country extends GO_CharacterString {
     /**
      * Empty constructor for JAXB only.
      */
-    private Country() {
+    public Country() {
     }
 
     /**
@@ -102,33 +102,39 @@ public final class Country extends GO_CharacterString {
 
     /**
      * Gets the value of the Country code using ISO 19139:2007 element name.
+     *
+     * @return the ISO country code.
      */
     @XmlElement(name = "Country", namespace = LegacyNamespaces.GMD)
-    private CodeListUID getCountry() {
+    public CodeListUID getCountry() {
         return isLegacyMetadata ? identifier : null;
     }
 
     /**
      * Sets the value of the Country code in ISO 19139:2007 element name.
+     *
+     * @param  newValue  the ISO country code.
      */
-    @SuppressWarnings("unused")
-    private void setCountry(CodeListUID newValue) {
+    public void setCountry(CodeListUID newValue) {
         identifier = newValue;
     }
 
     /**
      * Gets the value of the Country code using ISO 19115-3 element name.
+     *
+     * @return the ISO country code.
      */
     @XmlElement(name = "CountryCode")
-    private CodeListUID getCountryCode() {
+    public CodeListUID getCountryCode() {
         return isLegacyMetadata ? null : identifier;
     }
 
     /**
      * Sets the value of the Country code in ISO 19115-3 element name.
+     *
+     * @param  newValue  the ISO country code.
      */
-    @SuppressWarnings("unused")
-    private void setCountryCode(CodeListUID newValue) {
+    public void setCountryCode(CodeListUID newValue) {
         identifier = newValue;
     }
 
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/LanguageCode.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/LanguageCode.java
index b4f651dfe1..a129fb6d3a 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/LanguageCode.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/LanguageCode.java
@@ -16,11 +16,11 @@
  */
 package org.apache.sis.internal.jaxb.lan;
 
-import org.apache.sis.internal.jaxb.cat.CodeListUID;
 import java.util.Locale;
 import jakarta.xml.bind.annotation.XmlType;
 import jakarta.xml.bind.annotation.XmlElement;
 import org.apache.sis.internal.jaxb.Context;
+import org.apache.sis.internal.jaxb.cat.CodeListUID;
 import org.apache.sis.internal.jaxb.gco.GO_CharacterString;
 import org.apache.sis.internal.jaxb.gco.CharSequenceAdapter;
 
@@ -62,12 +62,12 @@ public final class LanguageCode extends GO_CharacterString {
      * The language using a {@link org.opengis.util.CodeList}-like format.
      */
     @XmlElement(name = "LanguageCode")
-    private CodeListUID identifier;
+    public CodeListUID identifier;
 
     /**
      * Empty constructor for JAXB only.
      */
-    private LanguageCode() {
+    public LanguageCode() {
     }
 
     /**
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/LocalisedCharacterString.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/LocalisedCharacterString.java
index 3420864b66..e0fec23f50 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/LocalisedCharacterString.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/LocalisedCharacterString.java
@@ -35,7 +35,7 @@ import org.apache.sis.internal.jaxb.Context;
  *
  * @since 0.3
  */
-final class LocalisedCharacterString {
+public final class LocalisedCharacterString {
     /**
      * A prefix to concatenate with the {@linkplain Locale#getISO3Language() 
language code}.
      * This is a hack for a common pattern found in the way locales are 
specified in ISO 19139:2007 files.
@@ -53,12 +53,12 @@ final class LocalisedCharacterString {
      * the {@code <LocalisedCharacterString>} elements in the XML tree at 
marshalling-time.
      */
     @XmlValue
-    String text;
+    public String text;
 
     /**
      * Empty constructor only used by JAXB.
      */
-    LocalisedCharacterString() {
+    public LocalisedCharacterString() {
     }
 
     /**
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/PT_FreeText.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/PT_FreeText.java
index 8f9b6215e8..86c2deb312 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/PT_FreeText.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/PT_FreeText.java
@@ -67,12 +67,12 @@ public final class PT_FreeText extends GO_CharacterString {
      */
     @XmlElementWrapper(name = "PT_FreeText")
     @XmlElement(required = true)
-    private TextGroup[] textGroup;
+    public TextGroup[] textGroup;
 
     /**
      * Empty constructor used only by JAXB.
      */
-    private PT_FreeText() {
+    public PT_FreeText() {
     }
 
     /**
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/PT_Locale.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/PT_Locale.java
index 71e71b1492..7acd850079 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/PT_Locale.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/PT_Locale.java
@@ -81,7 +81,7 @@ public final class PT_Locale {
      * The attributes wrapped in a {@code "PT_Locale"} element.
      */
     @XmlElement(name = "PT_Locale")
-    private Wrapper element;
+    public Wrapper element;
 
     /**
      * Wraps the {@code "locale"} attributes in a {@code "PT_Locale"} element.
@@ -92,7 +92,7 @@ public final class PT_Locale {
         "country",
         "characterEncoding"
     })
-    private static final class Wrapper {
+    public static final class Wrapper {
         /**
          * The language code, or {@code null} if none.
          */
@@ -102,7 +102,7 @@ public final class PT_Locale {
          * The country code, or {@code null} if none.
          */
         @XmlElement
-        Country country;
+        public Country country;
 
         /**
          * The character encoding. If {@code null}, then this property will be 
set to the encoding of XML file.
@@ -121,7 +121,7 @@ public final class PT_Locale {
          */
         @XmlElement(required = true)
         @XmlJavaTypeAdapter(MD_CharacterSetCode.class)
-        Charset characterEncoding;
+        public Charset characterEncoding;
 
         /**
          * {@code true} if marshalling an element from the ISO 19115:2003 
model,
@@ -151,33 +151,39 @@ public final class PT_Locale {
 
         /**
          * Gets the language code for this PT_Locale. Used in ISO 19115:2003 
model.
+         *
+         * @return the ISO language code.
          */
         @XmlElement(name = "languageCode", namespace = LegacyNamespaces.GMD)
-        private LanguageCode getLanguageCode() {
+        public LanguageCode getLanguageCode() {
             return isLegacyMetadata ? language : null;
         }
 
         /**
          * Sets the language code for this PT_Locale. Used in ISO 19115:2003 
model.
+         *
+         * @param  newValue  the ISO language code.
          */
-        @SuppressWarnings("unused")
-        private void setLanguageCode(LanguageCode newValue) {
+        public void setLanguageCode(LanguageCode newValue) {
             language = newValue;
         }
 
         /**
          * Gets the language code for this PT_Locale. Used in ISO 19115:2014 
model.
+         *
+         * @return the ISO language code.
          */
         @XmlElement(name = "language", required = true)
-        private LanguageCode getLanguage() {
+        public LanguageCode getLanguage() {
             return isLegacyMetadata ? null : language;
         }
 
         /**
          * Sets the language code for this PT_Locale. Used in ISO 19115:2014 
model.
+         *
+         * @param  newValue  the ISO language code.
          */
-        @SuppressWarnings("unused")
-        private void setLanguage(LanguageCode newValue) {
+        public void setLanguage(LanguageCode newValue) {
             language = newValue;
         }
 
@@ -188,6 +194,8 @@ public final class PT_Locale {
          *
          * <div class="note"><b>Note:</b> This is redundant with the encoding 
declared in the XML header.
          * But the {@code <lan:characterEncoding>} element is mandatory 
according OGC/ISO schemas.</div>
+         *
+         * @param  marshaller  the marshaller invoking this method.
          */
         public void beforeMarshal(final Marshaller marshaller) {
             if (characterEncoding == null) {
@@ -213,7 +221,7 @@ public final class PT_Locale {
     /**
      * Empty constructor for JAXB only.
      */
-    private PT_Locale() {
+    public PT_Locale() {
     }
 
     /**
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/TextGroup.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/TextGroup.java
index 098873d343..2d885fe901 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/TextGroup.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/TextGroup.java
@@ -74,7 +74,7 @@ import jakarta.xml.bind.annotation.XmlElement;
  *
  * @since 0.3
  */
-final class TextGroup {
+public final class TextGroup {
     /**
      * The set of {@linkplain LocalisedCharacterString localized string}.
      * JAXB uses this field at marshalling-time in order to wrap {@code N}
@@ -85,7 +85,7 @@ final class TextGroup {
      * (as in the first example of class javadoc) for compatibility and 
convenience reasons.</p>
      */
     @XmlElement(name = "LocalisedCharacterString")
-    protected LocalisedCharacterString[] localized;
+    public LocalisedCharacterString[] localized;
 
     /**
      * Empty constructor only used by JAXB.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/Parameter.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/Parameter.java
index d33a467fa7..58e8568b80 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/Parameter.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/Parameter.java
@@ -45,6 +45,11 @@ import static org.apache.sis.util.Utilities.deepEquals;
  * @since   1.3
  */
 abstract class Parameter<T> extends SimpleIdentifiedObject implements 
ParameterDescriptor<T> {
+    /**
+     * For cross-version compatibility.
+     */
+    private static final long serialVersionUID = 1120310941894856951L;
+
     /**
      * A copy of {@code this} as a fully-implemented parameter descriptor.
      * This is created when first needed for implementation of {@link 
#createValue()}.
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/QualityParameter.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/QualityParameter.java
index 4308fd0fe2..ab075177e7 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/QualityParameter.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/QualityParameter.java
@@ -71,13 +71,18 @@ import org.opengis.metadata.quality.ValueStructure;
 })
 @XmlRootElement(name = "DQM_Parameter", namespace = Namespaces.DQM)
 public final class QualityParameter extends Parameter {
+    /**
+     * For cross-version compatibility.
+     */
+    private static final long serialVersionUID = 4333632866772665659L;
+
     /**
      * Name of the data quality parameter, to be represented as identifier 
code.
      *
      * @see #getName()
      */
     @XmlElement(name="name", required=true)
-    String code;
+    public String code;
 
     /**
      * Definition of the data quality parameter.
@@ -86,7 +91,8 @@ public final class QualityParameter extends Parameter {
      * @see #getName()
      */
     @XmlElement(required = true)
-    InternationalString definition;
+    @SuppressWarnings("serial")                 // Most Apache SIS 
implementations are serializable.
+    public InternationalString definition;
 
     /**
      * Description of the data quality parameter.
@@ -94,7 +100,8 @@ public final class QualityParameter extends Parameter {
      * @see #getDescription()
      */
     @XmlElement
-    Description description;
+    @SuppressWarnings("serial")                 // Most Apache SIS 
implementations are serializable.
+    public Description description;
 
     /**
      * Value type of the data quality parameter (shall be one of the data 
types defined in ISO/TS 19103:2005).
@@ -104,7 +111,8 @@ public final class QualityParameter extends Parameter {
      */
     @XmlElement(required = true)
     @XmlJavaTypeAdapter(GO_GenericName.class)   // Not in package-info because 
shall not be applied to getLegacyName().
-    TypeName valueType;
+    @SuppressWarnings("serial")                 // Most Apache SIS 
implementations are serializable.
+    public TypeName valueType;
 
     /**
      * Structure of the data quality parameter.
@@ -112,16 +120,13 @@ public final class QualityParameter extends Parameter {
      * @see #getValueClass()
      */
     @XmlElement
-    ValueStructure valueStructure;
+    public ValueStructure valueStructure;
 
     /**
      * Creates an initially empty parameter.
      * This constructor is needed by JAXB at unmarshalling time.
-     *
-     * <p><strong>Consider this constructor as private</strong> except for 
testing purpose.
-     * See <cite>Note about raw-type usage</cite> in class javadoc.</p>
      */
-    QualityParameter() {
+    public QualityParameter() {
     }
 
     /**
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/ReferenceSystemMetadata.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/ReferenceSystemMetadata.java
index b8dc5df6c1..b38771394e 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/ReferenceSystemMetadata.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/ReferenceSystemMetadata.java
@@ -96,9 +96,11 @@ public class ReferenceSystemMetadata extends 
SimpleIdentifiedObject implements R
     }
 
     /**
-     * Invoked by JAXB {@link jakarta.xml.bind.Marshaller} before this object 
is marshalled to XML.
+     * Invoked by JAXB {@code Marshaller} before this object is marshalled to 
XML.
+     *
+     * @param  marshaller  the invoker.
      */
-    private void beforeMarshal(final Marshaller marshaller) {
+    public void beforeMarshal(final Marshaller marshaller) {
         isLegacyMetadata = !FilterByVersion.CURRENT_METADATA.accept();
     }
 
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/SensorType.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/SensorType.java
index 74c6c5e8bb..d0f0acf34e 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/SensorType.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/SensorType.java
@@ -29,7 +29,7 @@ import org.opengis.util.CodeList;
  * For now GeoAPI does not yet provides it, but this choice may be revisited 
in a future GeoAPI version.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.3
+ * @version 1.4
  * @since   0.7
  */
 @UML(identifier = "MI_SensorTypeCode", specification = 
Specification.ISO_19115_2)   // Actually only in XML schema.
@@ -72,6 +72,16 @@ public final class SensorType extends CodeList<SensorType> {
         }
     }
 
+    /**
+     * Disables the search for UML identifiers because we do not export this 
package to GeoAPI.
+     *
+     * @return {@code null}.
+     */
+    @Override
+    public String identifier() {
+        return null;
+    }
+
     /**
      * Returns the list of codes of the same kind than this code list element.
      * Invoking this method is equivalent to invoking {@link #values()}, 
except that
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/ServiceParameter.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/ServiceParameter.java
index 539633d5d8..f60638b183 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/ServiceParameter.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/metadata/replace/ServiceParameter.java
@@ -74,6 +74,11 @@ import static 
org.apache.sis.internal.util.CollectionsExt.nonNull;
 })
 @XmlRootElement(name = "SV_Parameter", namespace = Namespaces.SRV)
 public final class ServiceParameter extends Parameter {
+    /**
+     * For cross-version compatibility.
+     */
+    private static final long serialVersionUID = 8979265876109276877L;
+
     /**
      * The name, as used by the service for this parameter. Note that in ISO 
19115-3:2016, this element is
      * inside a {@code <gco:MemberName>} element  (i.e. ISO inserts the same 
kind of {@code Property_Type}
@@ -96,7 +101,8 @@ public final class ServiceParameter extends Parameter {
      */
     @XmlElement(required=true, name="name")
     @XmlJavaTypeAdapter(GO_GenericName.Since2014.class)
-    MemberName memberName;
+    @SuppressWarnings("serial")                 // Most Apache SIS 
implementations are serializable.
+    public MemberName memberName;
 
     /**
      * Indication if the parameter is an input to the service, an output or 
both.
@@ -104,7 +110,7 @@ public final class ServiceParameter extends Parameter {
      * @see #getDirection()
      */
     @XmlElement(required = true)
-    ParameterDirection direction;
+    public ParameterDirection direction;
 
     /**
      * A narrative explanation of the role of the parameter.
@@ -112,7 +118,8 @@ public final class ServiceParameter extends Parameter {
      * @see #getDescription()
      */
     @XmlElement
-    InternationalString description;
+    @SuppressWarnings("serial")                 // Most Apache SIS 
implementations are serializable.
+    public InternationalString description;
 
     /**
      * Indication if the parameter is required.
@@ -134,16 +141,13 @@ public final class ServiceParameter extends Parameter {
      * @see #getMaximumOccurs()
      */
     @XmlElement(required = true)
-    boolean repeatability;
+    public boolean repeatability;
 
     /**
      * Creates an initially empty parameter.
      * This constructor is needed by JAXB at unmarshalling time.
-     *
-     * <p><strong>Consider this constructor as private</strong> except for 
testing purpose.
-     * See <cite>Note about raw-type usage</cite> in class javadoc.</p>
      */
-    ServiceParameter() {
+    public ServiceParameter() {
     }
 
     /**
@@ -260,7 +264,7 @@ public final class ServiceParameter extends Parameter {
      * @return the name if marshalling legacy ISO 19139:2007 format, or {@code 
null} otherwise.
      */
     @XmlElement(name = "name", namespace = LegacyNamespaces.SRV)
-    private DefaultMemberName getLegacyName() {
+    public DefaultMemberName getLegacyName() {
         return FilterByVersion.LEGACY_METADATA.accept() ? 
DefaultMemberName.castOrCopy(memberName) : null;
     }
 
@@ -271,8 +275,7 @@ public final class ServiceParameter extends Parameter {
      * @param  value  the new name.
      * @throws IllegalStateException if a name is already defined.
      */
-    @SuppressWarnings("unused")
-    private void setLegacyName(final DefaultMemberName value) {
+    public void setLegacyName(final DefaultMemberName value) {
         if (memberName == null) {
             memberName = value;
         }
@@ -282,10 +285,12 @@ public final class ServiceParameter extends Parameter {
      * For JAXB marshalling of ISO 19139:2007 document only.
      * Note that there is not setter method, because we expect that
      * the same information is provided in the {@link #memberName} attribute 
type.
+     *
+     * @return the type name of value component(s) in this parameter.
      */
     @XmlElement(name = "valueType", namespace = LegacyNamespaces.SRV)
     @XmlJavaTypeAdapter(GO_GenericName.class)    // Not in package-info 
because shall not be applied to getLegacyName().
-    private TypeName getLegacyValueType() {
+    public TypeName getLegacyValueType() {
         return FilterByVersion.LEGACY_METADATA.accept() ? getValueType() : 
null;
     }
 
@@ -340,32 +345,40 @@ public final class ServiceParameter extends Parameter {
 
     /**
      * Returns the optionality as a boolean (ISO 19115-3:2016 way).
+     *
+     * @return optionality of this parameter.
      */
     @XmlElement(name = "optionality", required = true)
-    final Boolean getOptionality() {
+    public Boolean getOptionality() {
         return FilterByVersion.CURRENT_METADATA.accept() ? optionality : null;
     }
 
     /**
      * Sets whether this parameter is optional.
+     *
+     * @param  optional  optionality of this parameter.
      */
-    final void setOptionality(final Boolean optional) {
+    public void setOptionality(final Boolean optional) {
         if (optional != null) optionality = optional;
     }
 
     /**
      * Returns {@code "Optional"} if {@link #optionality} is {@code true} or 
{@code "Mandatory"} otherwise.
      * This is the legacy ISO 19139:2007 way to marshal optionality.
+     *
+     * @return optionality of this parameter.
      */
     @XmlElement(name = "optionality", namespace = LegacyNamespaces.SRV)
-    final String getOptionalityLabel() {
+    public String getOptionalityLabel() {
         return FilterByVersion.LEGACY_METADATA.accept() ? (optionality ? 
"Optional" : "Mandatory") : null;
     }
 
     /**
      * Sets whether this parameter is optional.
+     *
+     * @param  optional  optionality of this parameter.
      */
-    final void setOptionalityLabel(final String optional) {
+    public void setOptionalityLabel(final String optional) {
         if (optional != null) {
             optionality = Boolean.parseBoolean(optional) || 
optional.equalsIgnoreCase("Optional");
         }
diff --git 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/legacy/MediumName.java
 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/legacy/MediumName.java
index d78f206b54..287b6fafcc 100644
--- 
a/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/legacy/MediumName.java
+++ 
b/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/legacy/MediumName.java
@@ -147,6 +147,16 @@ public final class MediumName extends CodeList<MediumName> 
implements Citation {
         return values();
     }
 
+    /**
+     * Disables the search for UML identifiers because we do not export this 
package to GeoAPI.
+     *
+     * @return {@code null}.
+     */
+    @Override
+    public String identifier() {
+        return null;
+    }
+
     /**
      * Returns the medium name that matches the given string, or {@code null} 
if none match it.
      * Contrarily to non-deprecated code list, this method does not create a 
new code if none match the given name.
diff --git 
a/core/sis-referencing/src/main/java/org/apache/sis/internal/jaxb/referencing/Code.java
 
b/core/sis-referencing/src/main/java/org/apache/sis/internal/jaxb/referencing/Code.java
index 95f7e29f9f..91abda948c 100644
--- 
a/core/sis-referencing/src/main/java/org/apache/sis/internal/jaxb/referencing/Code.java
+++ 
b/core/sis-referencing/src/main/java/org/apache/sis/internal/jaxb/referencing/Code.java
@@ -49,7 +49,7 @@ public final class Code {
      * {@link org.apache.sis.metadata.iso.DefaultIdentifier} represents it as 
an XML element.</p>
      */
     @XmlValue
-    String code;
+    public String code;
 
     /**
      * The code space, which is often {@code "EPSG"} with the version in use.
@@ -58,12 +58,12 @@ public final class Code {
      * {@link org.apache.sis.metadata.iso.DefaultIdentifier} represents it as 
an XML element.</p>
      */
     @XmlAttribute
-    String codeSpace;
+    public String codeSpace;
 
     /**
      * Empty constructor for JAXB.
      */
-    Code() {
+    public Code() {
     }
 
     /**
diff --git 
a/core/sis-referencing/src/main/java/org/apache/sis/internal/jaxb/referencing/SC_DerivedCRSType.java
 
b/core/sis-referencing/src/main/java/org/apache/sis/internal/jaxb/referencing/SC_DerivedCRSType.java
index a35a22a0c0..75edb35b59 100644
--- 
a/core/sis-referencing/src/main/java/org/apache/sis/internal/jaxb/referencing/SC_DerivedCRSType.java
+++ 
b/core/sis-referencing/src/main/java/org/apache/sis/internal/jaxb/referencing/SC_DerivedCRSType.java
@@ -35,7 +35,7 @@ public final class SC_DerivedCRSType {
      * The code space (e.g. {@code "EPSG"}).
      */
     @XmlAttribute
-    String codeSpace;
+    public String codeSpace;
 
     /**
      * The derived CRS type. Can be one of the following values (from ISO 
19111:2007):
@@ -49,7 +49,7 @@ public final class SC_DerivedCRSType {
      * </ul>
      */
     @XmlValue
-    String value;
+    public String value;
 
     /**
      * Returns an instance from the given WKT keyword.
@@ -88,6 +88,6 @@ public final class SC_DerivedCRSType {
     /**
      * Empty constructor for JAXB only.
      */
-    private SC_DerivedCRSType() {
+    public SC_DerivedCRSType() {
     }
 }

Reply via email to