Per-entity Output
This command line configuration example:
reads a file
path/to/input/aggregate.xml
 containing a SAML metadata aggregatedecomposes that aggregate into its constituent entity metadata documents
signs each of those per-entity documents using a private key located inÂ
path/to/secrets/private-key.pem
writes the results into multiple files in the directoryÂ
path/to/output
. Each file is named as a function of the entity'sÂentityID
attribute:the string
"_"
, followed bya lower-case, hex-encoded, SHA-1 hash of theÂ
entityID
, followed bythe string
".xml"
You can execute the example as follows:
$ .../mda.sh per-entity.xml main
The example configuration file is as follows; it has been verified with MDA version 0.10.0-SNAPSHOT as of 2023-10-25:
<?xml version="1.0" encoding="UTF-8"?>
<beans default-init-method="initialize"
xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- Import the Standard bean definition resource. -->
<!-- See https://shibboleth.atlassian.net/wiki/spaces/MA1/pages/3162439683/Standard+bean+definition+resource -->
<import resource="classpath:net/shibboleth/metadata/beans.xml"/>
<!-- First, we define the stages for our pipeline -->
<bean id="source" parent="mda.DOMFilesystemSourceStage">
<property name="id" value="source"/>
<property name="parserPool">
<bean parent="mda.BasicParserPool"/>
</property>
<property name="source">
<bean class="java.io.File">
<constructor-arg value="path/to/input/aggregate.xml"/>
</bean>
</property>
</bean>
<bean id="disassembleEntitiesDescriptor" parent="mda.EntitiesDescriptorDisassemblerStage">
<property name="id" value="disassembleEntitiesDescriptor"/>
</bean>
<bean id="populateItemIds" parent="mda.EntityDescriptorItemIdPopulationStage">
<property name="id" value="populateItemIds"/>
</bean>
<bean id="generateContentReferenceId" parent="mda.GenerateIdStage">
<property name="id" value="generateContentReferenceId" />
</bean>
<bean id="signMetadata" parent="mda.XMLSignatureSigningStage">
<property name="id" value="signMetadata"/>
<property name="privateKey">
<bean parent="mda.PrivateKeyFactoryBean">
<property name="resource">
<bean class="org.springframework.core.io.FileSystemResource">
<constructor-arg>
<bean class="java.io.File">
<constructor-arg value="path/to/secrets/private-key.pem"/>
</bean>
</constructor-arg>
</bean>
</property>
</bean>
</property>
</bean>
<bean id="serialize" parent="mda.MultiOutputSerializationStage">
<property name="id" value="serializeIdPs"/>
<property name="serializer">
<bean id="domSerializer" parent="mda.DOMElementSerializer"/>
</property>
<property name="outputStrategy">
<bean parent="mda.FilesInDirectoryMultiOutputStrategy">
<property name="nameSuffix" value=".xml"/>
<property name="namePrefix" value="_"/>
<property name="directory">
<bean class="java.io.File">
<constructor-arg value="path/to/output"/>
</bean>
</property>
<property name="nameTransformer">
<bean parent="mda.SHA1StringTransformer"/>
</property>
</bean>
</property>
</bean>
<!-- Next we define a pipeline with all the stages in it -->
<bean id="main" parent="mda.SimplePipeline">
<property name="id" value="main"/>
<property name="stages">
<list>
<ref bean="source"/>
<ref bean="disassembleEntitiesDescriptor"/>
<ref bean="populateItemIds"/>
<ref bean="generateContentReferenceId"/>
<ref bean="signMetadata"/>
<ref bean="serialize"/>
</list>
</property>
</bean>
</beans>