-
Notifications
You must be signed in to change notification settings - Fork 17
Configuring XDI messaging containers
The xdi2-server component uses its configuration files to configure XDI messaging containers.
The Java Spring Framework and its Inversion of Control principles are used to configure the messaging containers.
Every Spring bean in the applicationContext.xml configuration file whose name starts with a slash ('/') is expected to be a messaging container. The bean name becomes the relative path at which the messaging container is "mounted" and exposed as an XDI endpoint that can receive and process incoming XDI messages.
Many important classes of the XDI2 library are compatible with the Spring bean mechanism, for example implementations of the GraphFactory and Graph interfaces of the xdi2-core component.
The simplest way to set up an XDI endpoint is as follows:
- Instantiate an implementation of the GraphFactory interface as a Spring bean.
- Use the openGraph() method of the GraphFactory bean to instantiate an implementation of the Graph interface.
- Instantiate the GraphMessagingContainer class and set its "graph" property to the Graph bean.
The following configuration sets up a simple XDI endpoint backed by an in-memory graph at the relative path /mem-graph.
<bean id="graphfactory1" class="xdi2.core.impl.memory.MemoryGraphFactory">
</bean>
<bean id="graph1" factory-bean="graphfactory1" factory-method="openGraph" />
<bean name="/mem-graph" class="xdi2.messaging.container.impl.graph.GraphMessagingContainer">
<property name="graph" ref="graph1" />
</bean>
Messaging containers can be assigned interceptors and contributors in order to add specific functionality.
<bean id="graphfactory4" class="xdi2.core.impl.memory.MemoryGraphFactory">
</bean>
<bean id="graph4" factory-bean="graphfactory4" factory-method="openGraph">
<constructor-arg><value>(=!:uuid:1111)</value></constructor-arg>
</bean>
<bean name="/=alice" class="xdi2.messaging.container.impl.graph.GraphMessagingContainer">
<property name="graph" ref="graph4" />
<property name="interceptors">
<util:list>
<bean class="xdi2.messaging.container.interceptor.impl.BootstrapInterceptor">
<property name="bootstrapOwner" value="=!:uuid:1111" />
<property name="bootstrapOwnerSynonyms">
<util:list>
<value>=alice</value>
</util:list>
</property>
<property name="bootstrapRootLinkContract" value="true" />
<property name="bootstrapPublicLinkContract" value="true" />
<property name="bootstrapTimestamp" value="true" />
<property name="bootstrapGraph">
<value>
({$self}/$public)$do/$get/{$self}$msg$encrypt$keypair<$public><$key>
({$self}/$public)($do/$get){$self}$msg$encrypt$keypair/$is#/{}
({$self}/$public)$do/$get/{$self}$msg$sig$keypair<$public><$key>
({$self}/$public)($do/$get){$self}$msg$sig$keypair/$is#/{}
</value>
</property>
<property name="bootstrapMessageEnvelope">
<value>
($anon[$msg]*!1$do/$do$keypair){$self}$msg$encrypt$keypair/$is#/$rsa$2048
($anon[$msg]*!1$do/$do$keypair){$self}$msg$sig$keypair/$is#/$rsa$2048
</value>
</property>
</bean>
<bean class="xdi2.messaging.container.interceptor.impl.RefInterceptor" />
<bean class="xdi2.messaging.container.interceptor.impl.ToInterceptor" />
<bean class="xdi2.messaging.container.interceptor.impl.authentication.secrettoken.AuthenticationSecretTokenInterceptor">
<property name="secretTokenAuthenticator">
<bean class="xdi2.messaging.container.interceptor.impl.authentication.secrettoken.StaticSecretTokenAuthenticator">
<property name="globalSalt" value="00000000-0000-0000-0000-000000000000" />
<property name="localSaltAndDigestSecretTokens">
<util:map>
<entry key="=!:uuid:1111" value="xdi2-digest:ec136367-5969-4e69-9c8a-483e330c317f:8a447e411ad21477b67b8793e5be16749416b996c61a40476c17231be4d9390a8e703b87cf8750b66fb541f208799d3b564ee6ed33cae8f9f84ce39c1527e62e" />
</util:map>
</property>
</bean>
</property>
</bean>
<bean class="xdi2.messaging.container.interceptor.impl.linkcontract.LinkContractInterceptor" />
</util:list>
</property>
<property name="contributors">
<util:list>
<bean class="xdi2.messaging.container.contributor.impl.digest.GenerateDigestSecretTokenContributor">
<property name="globalSalt" value="00000000-0000-0000-0000-000000000000" />
</bean>
<bean class="xdi2.messaging.container.contributor.impl.keygen.GenerateKeyContributor" />
</util:list>
</property>
</bean>
This work is licensed under a Creative Commons Attribution 4.0 International License.