Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • MDA-166: The ItemSerializer and ItemCollectionSerializer interfaces now allow serializers to throw IOException when appropriate. The provided DOMItemSerializer will throw an IOException wrapping a TransformerException if the latter is thrown during XML serialization. Previously, this condition would only have resulted in logging at ERROR level.
  • MDA-167: The ItemIdTransformStage now transforms identifiers using a collection of Function objects rather than of the similar Converter provided by the Spring framework. This also affects the type of the MDQueryMD5ItemIdTransformer and MDQuerySHA1ItemIdTransformer classes. This change will not affect existing configurations if only those classes are in use. This matches the use of Function elsewhere in the API.
  • MDA-169: The SAMLMetadataSupport.getDescriptorExtensions method has been renamed to getDescriptorExtension to reflect the fact that it returns a single result.
  • MDA-170: The PKCS11PrivateKeyFactoryBean temporarily introduced in v0.9.2 has, as indicated for that release, moved to the spring-extensions module; configurations will need to be adjusted accordingly:
    Old class name: net.shibboleth.metadata.util.PKCS11PrivateKeyFactoryBean
    New class name: net.shibboleth.ext.spring.factory.PKCS11PrivateKeyFactoryBean
  • MDA-171: The SAMLMetadataSupport.getDescriptorExtension method's parameters must now be non-null; their annotations have been changed to @Nonnull to correspond with this. In previous releases, they were annotated as @Nullable and passing null would result in the method returning null.
  • MDA-175: The ItemOrderingStrategy interface defined by the EntitiesDescriptorAssemblerStage now allows the ordering strategy to throw a StageProcessingException if, for example, the items presented are invalid in some way and can not be ordered. Such an exception will be propagated upwards to the caller of the stage's execute method.
  • MDA-179: The Version class's getMicroVersion method has been renamed to getPatchVersion to align with current (semantic versioning) terminology.
  • MDA-182: Several classes exposed as part of the API for building custom stages have been reworked to simplify implementation of other stages and to correspond to current naming conventions:
    • BaseStage has been renamed to AbstractStage
    • BaseIteratingStage has been renamed to AbstractFilteringStage
    • A new AbstractIteratingStage allows the simpler construction of stages which process each Item independently
  • MDA-188: The AbstractDOMTraversalStage framework has been generalised to allow the use of custom context objects specific to the particular traversal, rather than relying on sometimes tortured uses of the ClassToInstanceMultiMap to carry everything. This is a breaking change, but will only affect writers of stages derived from AbstractDOMTraversalStage:
    • Context objects must implement the DOMTraversalContext interface. This no longer includes the getStash method (returning a ClassToInstanceMultiMap but does add a new end() method to be called at the end of the traversal.
    • A basic implementation of SimpleDOMTraversalContext is provided without any data fields. This can be used in many cases where custom storage is not required in the context; for an example, see AbstractElementVisitingStage.
    • More complex cases can extend SimpleDOMTraversalContext to include additional fields and method. For a very straightforward example, see CRDetectionStage. A more complex example, including use of the end() method from DOMTraversalContext, can be found in ElementsStrippingStage.
  • MDA-198: In previous releases, the three X.509 validation component (X509RSAExponentValidatorX509RSAKeyLengthValidator and X509RSAOpenSSLBlacklistValidator) all set a default ID related to their names (e.g., RSAKeyLength). This default ID setting behaviour has been removed. This may have two effects on configurations which do not explicitly set the component ID:
    • If a configuration did not set the component ID, initializing the component will now fail with a ComponentInitializationException.
    • Configurations that implicitly set the component ID to a defaulted Spring component ID using IdentifiableBeanPostProcessor may give different results, as the Spring component ID may now appear in status objects replacing the previous default.
  • MDA-191: The stages PullUpCacheDurationStage, PullUpValidUntilStage, SetCacheDurationStage, SetValidUntilStage and ValidateValidUntilStage now use the Instant and Duration classes (introduced in Java 8) in their APIs rather than using long values representing milliseconds as in previous releases.
    • This aligns the metadata aggregator with other Shibboleth projects based on the Java 11 platform. If you use the Java language to configure these stages, you will need to re-code appropriately; in most cases, this can be done quickly using Instant.fromEpochMilli() and Duration.ofMillis(), but we recommend adopting the modern java.time classes throughout.
    • The DurationToLongConverter is no longer included as part of the java-support dependency. If you were using it as part of an XML configuration to specify durations in ISO 8601 format (e.g., "PT15M") then you should replace references to DurationToLongConverter with references to the new StringToDurationConverter.
  • MDA-206: The PipelineDemultiplexerStage's waitingForPipelines property previously defaulted to false, which could result in unexpected behaviour if the stage was invoked a second time without arranging to synchronise execution with the called pipelines. As a result, most deployments set waitingForPipelines to true so that the called pipelines will all complete before control is passed on from the PipelineDemultiplexerStage; this behaviour is now the default.
  • MDA-219: In previous releases, the DOMResourceSourceStage tested for the existence of the supplied Resource as part of component initialization, potentially resulting in a ComponentInitializationException during initialize(). Unfortunately, this could also cause large remote resources to be fetched unnecessarily, and in addition did not guarantee that the Resource  would be accessible during normal operation. This check has been removed: now, a StageProcessingException will be thrown during stage execution instead, in the same way as was already the case for other I/O errors related to the Resource.
  • MDA-222: The contract for bean properties representing collections has changed:
    • Property setters for collection properties are now annotated as @Nonnull @NonnullElements @Unmodifiable.
      • Previously, some setters allowed a null value to act in place of an empty collection. This usage will now result in most cases in a NullPointerException.
      • Previously, some setters filtered null values out of provided collections. Again, this usage will now result in most cases in a NullPointerException.
      • Setters now guarantee not to modify the passed collection. This was previously true in practice in most cases, but is now guaranteed.
    • Most property getters for collection properties are also now annotated as @Nonnull @NonnullElements @Unmodifiable.
      • In exceptional cases, getters may be annotated as @NonnullAfterInit instead of @Nonnull. This is only done when an "empty collection" default is inappropriate for the property and would normally be accompanied by @NotEmpty on both the setter and the getter.
  • MDA-232: Previously, an invalid XPath expression provided to an XPathFilteringStage went largely unremarked: if the expression failed to compile, no filtering would be performed. If the expression could not be evaluated (for example, because it referenced a $variable) errors would be logged, and all items would be filtered out. Now:
    • An XPath expression which fails to compile will result in a ComponentInitializationException  when the stage is initialized.
    • An XPath expression which fails to evaluate will result in a StageProcessingException when the stage is executed.
  • MDA-234: The EntitiesDescriptorAssemblerStage previously allowed entities to be reordered by setting a property to an instance of an ItemOrderingStrategy sub-interface that was specific to Item<Element>. This interface has been extracted to the pipeline  package and expressed as a generic, allowing it to be reused for the new ItemOrderingStage. If you are using the orderingStrategy  property, your implementation of ItemOrderingStrategy will need to be retargeted at the new definition.
  • MDA-238: All uses of the Guava functional interfaces (Function, Predicate and Supplier) have been replaced with their Java 8 equivalents.
    • This aligns the metadata aggregator with other Shibboleth projects based on the Java 11 platform.
    • This change should be largely transparent, but if you use Java configuration you should note that Predicate's method name has changed from apply to test.
  • MDA-239: The collection of items passed to an ItemCollectionSerializer is now explicitly annotated as @NonnullElements. This constraint was previously assumed by implementations.
  • MDA-240: The QName constants used as part of the API of EntityRoleFilterStage have been moved to the SAMLMetadataSupport class. This will affect configurations which use those fields directly, but not configurations which construct their own equivalent QNames.
  • MDA-242: The entire framework has been reviewed for thread safety. The major highlights of this are:
    • Implementations of Item are no longer expected to be @ThreadSafe and in fact are expected to be @NotThreadSafe. In particular, the DOMElementItem implementation has always had mutable but unsynchronized contents both in the DOM data it wraps and in the ClassIndexedMultiMap that is used to store the item's ItemMetadata (although the ItemMetadata objects themselves are immutable and therefore thread-safe). Find more about this topic and its implications in the Javadoc for Item.
    • All classes that are part of configurations (pipelines, stages, validators, serializers, strategy functors etc.) are now @ThreadSafe or @Immutable.
    • These revisions have resulted in a number of minor changes to the API, such as the removal of some getters provided for non-property values and the movement of some non-API classes to "impl" sub-packages.
  • MDA-247: The ComponentInfo class is now @Immutable as required by all ItemMetadata subclasses. Callers need to migrate to a new constructor, as the existing ones relied on the presence of setter methods; all setter methods have been removed.
  • MDA-248: The Item and ItemMetadata interfaces no longer extend Serializable. This dated back to early design work related to state management in the Shibboleth V3 identity provider. The IdP later took a different direction, but the unnecessary constraint remained in the MDA until now. The effect of this removal is mainly to simplify implementations, and remove the need for extension classes to include a serialVersionUID variable. The inability to use Java serialization on these classes is not expected to be noticed in practice.
  • MDA-253: The signature of the Stage interface's execute method has changed from Collection<Item<T>> to List<Item<T>> to signify that the ordering of the items is significant, as it is for almost all use cases. This has always been the case in practice as the underlying implementation provided by SimpleItemCollectionFactory is an ArrayList. This should not significantly affect existing deployments, but will affect downstream packages where Stages are defined.
  • MDA-254ItemIdentificationStrategy is now a generic interface, parameterised by the type of Item to be identified. This makes it possible to write type-safe implementations of the interface specialised for specific types of Item such as ItemIdentificationStrategy<Element> to process Item<Element>.
  • MDA-257: The contract implemented between AbstractItemMetadataSelectionStage and its subclasses (ItemMetadataFilterStage, ItemMetadataTerminationStage, StatusMetadataLoggingStage) has changed to add a type bound for the selection criteria, and to pass a ClassToInstanceMultiMap of that bound back to the subclasses. If you have a custom subclass of AbstractItemMetadataSelectionStage you will need to track this change. It should not affect existing deployments unless StatusMetadataLoggingStage has wrongly been passed selection criteria which were not subclasses of StatusMetadata.

Improvements

  • MDA-183: the compromised-1024.txt and compromised-2048.txt resources have been extended with keys shipped with some releases of the Jetty container.

...