[java-plugin-shibd] branch main updated: Relocate some audit beans to root, and add a message type predicate.

Codeberg noreply at shibboleth.net
Thu Jun 25 15:01:58 UTC 2026


This is an automated email from the git hooks/post-receive script.

codeberg pushed a commit to branch main
in repository java-plugin-shibd.

View the commit online:
https://codeberg.org/Shibboleth/java-plugin-shibd/commit/1e24a39062eabd43290733926f6c822bb070a847

The following commit(s) were added to refs/heads/main by this push:
     new 1e24a39  Relocate some audit beans to root, and add a message type predicate.
1e24a39 is described below

commit 1e24a39062eabd43290733926f6c822bb070a847
Author: Scott Cantor <scott at restingparrotsoftware.com>
AuthorDate: Thu Jun 25 11:01:41 2026 -0400

    Relocate some audit beans to root, and add a message type predicate.
---
 .../META-INF/net.shibboleth.idp/postconfig.xml     | 319 +++++++++++++++++++++
 .../idp/flows/sp/abstract/sp-abstract-beans.xml    |  35 +--
 .../context/logic/MessageTypePredicate.java        |  48 ++++
 .../sp/messaging/context/logic/package-info.java   |  18 ++
 4 files changed, 393 insertions(+), 27 deletions(-)

diff --git a/sp-conf-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml b/sp-conf-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
index eb2a668..0aaf893 100644
--- a/sp-conf-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
+++ b/sp-conf-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
@@ -74,6 +74,21 @@
 
     <!-- Audit beans. -->
 
+    <util:map id="shibboleth.sp.DefaultAuditFormattingMap">
+        <entry key="Shibboleth-Audit.SP" value="%AGENT|%APP|%TX|%OP|%a|%ST|%T|%IDP|%SP|%i|%ac|%t|%attr|%n|%f|%X|%XA|%b|%bb|%e|%S|%SS|%UA" />
+    </util:map>
+
+    <bean id="shibboleth.sp.AbstractPopulateAuditContext" abstract="true"
+        class="net.shibboleth.idp.profile.audit.impl.PopulateAuditContext" scope="prototype"
+        p:formattingMapParser-ref="shibboleth.sp.AuditFormattingMapParser"
+        p:dateTimeFormat="#{getObject('shibboleth.AuditDateTimeFormat')}"
+        p:useDefaultTimeZone="#{getObject('shibboleth.AuditDefaultTimeZone') ?: false}"
+        p:fieldReplacements="#{getObject('shibboleth.AuditFieldReplacementMap')}" />
+        
+    <bean id="shibboleth.sp.AuditFormattingMapParser"
+        class="net.shibboleth.idp.profile.audit.impl.PopulateAuditContext.FormattingMapParser"
+        c:_0="#{getObject('shibboleth.sp.AuditFormattingMap') ?: getObject('shibboleth.sp.DefaultAuditFormattingMap')}" />
+    
     <bean id="shibboleth.sp.DefaultFlowStartAuditExtractors" lazy-init="true"
             class="org.springframework.beans.factory.config.MapFactoryBean">
         <property name="sourceMap">
@@ -129,4 +144,308 @@
         </property>
     </bean>
 
+    <bean id="shibboleth.sp.DefaultInboundResponseAuditExtractors" lazy-init="true"
+            class="org.springframework.beans.factory.config.MapFactoryBean">
+        <property name="sourceMap">
+            <map>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.PROTOCOL"/>
+                    </key>
+                    <ref bean="shibboleth.ProtocolLookupFunction" />
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.RESPONSE_BINDING"/>
+                    </key>
+                    <bean parent="shibboleth.Functions.Compose">
+                        <constructor-arg name="g">
+                            <bean class="org.opensaml.saml.common.messaging.context.navigate.SAMLBindingContextBindingFunction"
+                                p:useShortName="%{idp.audit.shortenBindings:false}" />
+                        </constructor-arg>
+                        <constructor-arg name="f">
+                            <bean parent="shibboleth.Functions.Compose"
+                                c:g-ref="shibboleth.ChildLookup.SAMLBindingContext"
+                                c:f-ref="shibboleth.MessageContextLookup.Inbound" />
+                        </constructor-arg>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.RELAY_STATE"/>
+                    </key>
+                    <bean parent="shibboleth.Functions.Compose">
+                        <constructor-arg name="g">
+                            <bean parent="shibboleth.Functions.Expression"
+                                c:_0="#input != null ? T(org.opensaml.saml.common.binding.SAMLBindingSupport).getRelayState(#input) : null" />
+                        </constructor-arg>
+                        <constructor-arg name="f" ref="shibboleth.MessageContextLookup.Inbound"/>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.SIGNING"/>
+                    </key>
+                    <bean parent="shibboleth.Functions.Compose">
+                        <constructor-arg name="g">
+                            <bean class="net.shibboleth.shared.logic.FunctionSupport" factory-method="forPredicate">
+                                <constructor-arg>
+                                    <bean class="net.shibboleth.shared.spring.expression.SpringExpressionPredicate"
+                                        c:_0="#input != null ? T(org.opensaml.saml.common.binding.SAMLBindingSupport).isMessageSigned(#input) : false" />
+                                </constructor-arg>
+                            </bean>
+                        </constructor-arg>
+                        <constructor-arg name="f" ref="shibboleth.MessageContextLookup.Inbound"/>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.RESPONSE_ID"/>
+                    </key>
+                    <bean parent="shibboleth.Functions.Compose">
+                        <constructor-arg name="g">
+                            <bean class="org.opensaml.saml.common.messaging.context.navigate.SAMLMessageInfoContextIDFunction" />
+                        </constructor-arg>
+                        <constructor-arg name="f">
+                            <bean parent="shibboleth.Functions.Compose"
+                                c:g-ref="shibboleth.ChildLookupOrCreate.SAMLMessageInfoContext"
+                                c:f-ref="shibboleth.MessageContextLookup.Inbound" />
+                        </constructor-arg>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.RESPONSE_ISSUE_INSTANT"/>
+                    </key>
+                    <bean parent="shibboleth.Functions.Compose">
+                        <constructor-arg name="g">
+                            <bean class="org.opensaml.saml.common.messaging.context.navigate.SAMLMessageInfoContextIssueInstantFunction" />
+                        </constructor-arg>
+                        <constructor-arg name="f">
+                            <bean parent="shibboleth.Functions.Compose"
+                                c:g-ref="shibboleth.ChildLookupOrCreate.SAMLMessageInfoContext"
+                                c:f-ref="shibboleth.MessageContextLookup.Inbound" />
+                        </constructor-arg>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.IN_RESPONSE_TO"/>
+                    </key>
+                    <bean class="net.shibboleth.idp.saml.audit.impl.InResponseToAuditExtractor">
+                        <constructor-arg>
+                            <bean parent="shibboleth.Functions.Compose"
+                                c:g-ref="shibboleth.MessageLookup.SAMLObject"
+                                c:f-ref="shibboleth.MessageContextLookup.Inbound" />
+                        </constructor-arg>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.STATUS_CODE"/>
+                    </key>
+                    <bean class="net.shibboleth.idp.saml.audit.impl.StatusCodeAuditExtractor">
+                        <constructor-arg>
+                            <bean parent="shibboleth.Functions.Compose"
+                                c:g-ref="shibboleth.MessageLookup.SAMLObject"
+                                c:f-ref="shibboleth.MessageContextLookup.Inbound" />
+                        </constructor-arg>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.SUBSTATUS_CODE"/>
+                    </key>
+                    <bean class="net.shibboleth.idp.saml.audit.impl.SubStatusCodeAuditExtractor">
+                        <constructor-arg>
+                            <bean parent="shibboleth.Functions.Compose"
+                                c:g-ref="shibboleth.MessageLookup.SAMLObject"
+                                c:f-ref="shibboleth.MessageContextLookup.Inbound" />
+                        </constructor-arg>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.STATUS_MESSAGE"/>
+                    </key>
+                    <bean class="net.shibboleth.idp.saml.audit.impl.StatusMessageAuditExtractor">
+                        <constructor-arg>
+                            <bean parent="shibboleth.Functions.Compose"
+                                c:g-ref="shibboleth.MessageLookup.SAMLObject"
+                                c:f-ref="shibboleth.MessageContextLookup.Inbound" />
+                        </constructor-arg>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.NAMEID_FORMAT"/>
+                    </key>
+                    <bean class="net.shibboleth.idp.saml.audit.impl.NameIDFormatAuditExtractor">
+                        <constructor-arg>
+                            <bean parent="shibboleth.Functions.Compose"
+                                c:g-ref="shibboleth.MessageLookup.SAMLObject"
+                                c:f-ref="shibboleth.MessageContextLookup.Inbound" />
+                        </constructor-arg>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.SP_NAME_QUALIFIER"/>
+                    </key>
+                    <bean class="net.shibboleth.idp.saml.audit.impl.SPNameQualifierAuditExtractor">
+                        <constructor-arg>
+                            <bean parent="shibboleth.Functions.Compose"
+                                c:g-ref="shibboleth.MessageLookup.SAMLObject"
+                                c:f-ref="shibboleth.MessageContextLookup.Inbound" />
+                        </constructor-arg>
+                    </bean>
+                </entry>
+            </map>
+        </property>
+    </bean>
+
+    <bean id="shibboleth.sp.DefaultInboundRequestAuditExtractors" lazy-init="true"
+            class="org.springframework.beans.factory.config.MapFactoryBean">
+        <property name="sourceMap">
+            <map>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.PROTOCOL"/>
+                    </key>
+                    <ref bean="shibboleth.ProtocolLookupFunction" />
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.REQUEST_BINDING"/>
+                    </key>
+                    <bean parent="shibboleth.Functions.Compose">
+                        <constructor-arg name="g">
+                            <bean class="org.opensaml.saml.common.messaging.context.navigate.SAMLBindingContextBindingFunction"
+                                p:useShortName="%{idp.audit.shortenBindings:false}" />
+                        </constructor-arg>
+                        <constructor-arg name="f">
+                            <bean parent="shibboleth.Functions.Compose"
+                                c:g-ref="shibboleth.ChildLookup.SAMLBindingContext"
+                                c:f-ref="shibboleth.MessageContextLookup.Inbound" />
+                        </constructor-arg>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.RELAY_STATE"/>
+                    </key>
+                    <bean parent="shibboleth.Functions.Compose">
+                        <constructor-arg name="g">
+                            <bean parent="shibboleth.Functions.Expression"
+                                c:_0="#input != null ? T(org.opensaml.saml.common.binding.SAMLBindingSupport).getRelayState(#input) : null" />
+                        </constructor-arg>
+                        <constructor-arg name="f" ref="shibboleth.MessageContextLookup.Inbound"/>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.SIGNING"/>
+                    </key>
+                    <bean parent="shibboleth.Functions.Compose">
+                        <constructor-arg name="g">
+                            <bean class="net.shibboleth.shared.logic.FunctionSupport" factory-method="forPredicate">
+                                <constructor-arg>
+                                    <bean class="net.shibboleth.shared.spring.expression.SpringExpressionPredicate"
+                                        c:_0="#input != null ? T(org.opensaml.saml.common.binding.SAMLBindingSupport).isMessageSigned(#input) : false" />
+                                </constructor-arg>
+                            </bean>
+                        </constructor-arg>
+                        <constructor-arg name="f" ref="shibboleth.MessageContextLookup.Inbound"/>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.REQUEST_ID"/>
+                    </key>
+                    <bean parent="shibboleth.Functions.Compose">
+                        <constructor-arg name="g">
+                            <bean class="org.opensaml.saml.common.messaging.context.navigate.SAMLMessageInfoContextIDFunction" />
+                        </constructor-arg>
+                        <constructor-arg name="f">
+                            <bean parent="shibboleth.Functions.Compose"
+                                c:g-ref="shibboleth.ChildLookupOrCreate.SAMLMessageInfoContext"
+                                c:f-ref="shibboleth.MessageContextLookup.Inbound" />
+                        </constructor-arg>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.REQUEST_ISSUE_INSTANT"/>
+                    </key>
+                    <bean parent="shibboleth.Functions.Compose">
+                        <constructor-arg name="g">
+                            <bean class="org.opensaml.saml.common.messaging.context.navigate.SAMLMessageInfoContextIssueInstantFunction" />
+                        </constructor-arg>
+                        <constructor-arg name="f">
+                            <bean parent="shibboleth.Functions.Compose"
+                                c:g-ref="shibboleth.ChildLookupOrCreate.SAMLMessageInfoContext"
+                                c:f-ref="shibboleth.MessageContextLookup.Inbound" />
+                        </constructor-arg>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.NAMEID_FORMAT"/>
+                    </key>
+                    <bean class="net.shibboleth.idp.saml.audit.impl.NameIDFormatAuditExtractor">
+                        <constructor-arg>
+                            <bean parent="shibboleth.Functions.Compose"
+                                c:g-ref="shibboleth.MessageLookup.SAMLObject"
+                                c:f-ref="shibboleth.MessageContextLookup.Inbound" />
+                        </constructor-arg>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.SP_NAME_QUALIFIER"/>
+                    </key>
+                    <bean class="net.shibboleth.idp.saml.audit.impl.SPNameQualifierAuditExtractor">
+                        <constructor-arg>
+                            <bean parent="shibboleth.Functions.Compose"
+                                c:g-ref="shibboleth.MessageLookup.SAMLObject"
+                                c:f-ref="shibboleth.MessageContextLookup.Inbound" />
+                        </constructor-arg>
+                    </bean>
+                </entry>
+            </map>
+        </property>
+    </bean>
+
+    <bean id="shibboleth.sp.DefaultPostLookupAuditExtractors" lazy-init="true"
+            class="org.springframework.beans.factory.config.MapFactoryBean">
+        <property name="sourceMap">
+            <map>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.profile.IdPAuditFields.RELYING_PARTY_CONFIG"/>
+                    </key>
+                    <bean parent="shibboleth.Functions.Compose"
+                            c:f-ref="shibboleth.ChildLookup.RelyingParty">
+                        <constructor-arg name="g">
+                            <bean parent="shibboleth.Functions.Expression"
+                                c:_0="#input?.getConfiguration()?.getId()" />
+                        </constructor-arg>
+                    </bean>
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.SERVICE_PROVIDER"/>
+                    </key>
+                    <ref bean="shibboleth.IssuerLookup.Simple" />
+                </entry>
+                <entry>
+                    <key>
+                        <util:constant static-field="net.shibboleth.idp.saml.profile.SAMLAuditFields.IDENTITY_PROVIDER"/>
+                    </key>
+                    <ref bean="shibboleth.RelyingPartyIdLookup.Simple" />
+                </entry>
+            </map>
+        </property>
+    </bean>
+
 </beans>
\ No newline at end of file
diff --git a/sp-conf-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/sp/abstract/sp-abstract-beans.xml b/sp-conf-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/sp/abstract/sp-abstract-beans.xml
index 97a844c..4956ae1 100644
--- a/sp-conf-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/sp/abstract/sp-abstract-beans.xml
+++ b/sp-conf-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/sp/abstract/sp-abstract-beans.xml
@@ -7,33 +7,6 @@
                            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
     default-init-method="initialize" default-destroy-method="destroy">
     
-    <!-- Beans for flow auditing -->
-
-    <bean id="shibboleth.sp.AbstractPopulateAuditContext" abstract="true"
-        class="net.shibboleth.idp.profile.audit.impl.PopulateAuditContext" scope="prototype"
-        p:formattingMapParser-ref="shibboleth.sp.AuditFormattingMapParser"
-        p:dateTimeFormat="#{getObject('shibboleth.AuditDateTimeFormat')}"
-        p:useDefaultTimeZone="#{getObject('shibboleth.AuditDefaultTimeZone') ?: false}"
-        p:fieldReplacements="#{getObject('shibboleth.AuditFieldReplacementMap')}" />
-        
-    <bean id="shibboleth.sp.AuditFormattingMapParser" scope="prototype" lazy-init="true"
-        class="net.shibboleth.idp.profile.audit.impl.PopulateAuditContext.FormattingMapParser"
-        c:_0="#{getObject('shibboleth.sp.AuditFormattingMap') ?: getObject('shibboleth.sp.DefaultAuditFormattingMap')}" />
-    
-    <bean id="WriteAuditLog"
-        class="net.shibboleth.sp.profile.impl.WriteAuditLog" scope="prototype" lazy-init="true"
-        p:formattingMap="#{getObject('shibboleth.sp.AuditFormattingMap') ?: getObject('shibboleth.sp.DefaultAuditFormattingMap')}"
-        p:dateTimeFormat="#{getObject('shibboleth.AuditDateTimeFormat')}"
-        p:useDefaultTimeZone="#{getObject('shibboleth.AuditDefaultTimeZone') ?: false}"
-        p:httpServletRequestSupplier-ref="shibboleth.RemotedHttpServletRequestSupplier"
-        p:httpServletResponseSupplier-ref="shibboleth.RemotedHttpServletResponseSupplier" />
-
-    <util:map id="shibboleth.sp.DefaultAuditFormattingMap">
-        <entry key="Shibboleth-Audit.SP" value="%AGENT|%APP|%TX|%OP|%a|%ST|%T|%IDP|%SP|%i|%ac|%t|%attr|%n|%f|%X|%XA|%b|%bb|%e|%S|%SS|%UA" />
-    </util:map>
-
-    <!-- Action beans. -->
-    
     <bean id="InitializeProfileRequestContext"
         class="net.shibboleth.idp.profile.impl.InitializeProfileRequestContext" scope="prototype"
         p:profileId-ref="shibboleth.sp.profileId"
@@ -97,6 +70,14 @@
     <bean id="PostAgentDecodePopulateAuditContext" parent="shibboleth.sp.AbstractPopulateAuditContext"
         p:fieldExtractors="#{getObject('shibboleth.sp.PostAgentDecodeAuditExtractors') ?: getObject('shibboleth.sp.DefaultPostAgentDecodeAuditExtractors')}" />
         
+    <bean id="WriteAuditLog"
+        class="net.shibboleth.sp.profile.impl.WriteAuditLog" scope="prototype" lazy-init="true"
+        p:formattingMap="#{getObject('shibboleth.sp.AuditFormattingMap') ?: getObject('shibboleth.sp.DefaultAuditFormattingMap')}"
+        p:dateTimeFormat="#{getObject('shibboleth.AuditDateTimeFormat')}"
+        p:useDefaultTimeZone="#{getObject('shibboleth.AuditDefaultTimeZone') ?: false}"
+        p:httpServletRequestSupplier-ref="shibboleth.RemotedHttpServletRequestSupplier"
+        p:httpServletResponseSupplier-ref="shibboleth.RemotedHttpServletResponseSupplier" />
+        
     <bean id="EncodeAgentResponse" class="net.shibboleth.sp.profile.impl.EncodeAgentResponse" scope="prototype"
         p:httpServletRequestSupplier-ref="shibboleth.HttpServletRequestSupplier"
         p:httpServletResponseSupplier-ref="shibboleth.HttpServletResponseSupplier" />
diff --git a/sp-server-api/src/main/java/net/shibboleth/sp/messaging/context/logic/MessageTypePredicate.java b/sp-server-api/src/main/java/net/shibboleth/sp/messaging/context/logic/MessageTypePredicate.java
new file mode 100644
index 0000000..a326a11
--- /dev/null
+++ b/sp-server-api/src/main/java/net/shibboleth/sp/messaging/context/logic/MessageTypePredicate.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.shibboleth.sp.messaging.context.logic;
+
+import java.util.function.Predicate;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import org.opensaml.messaging.context.MessageContext;
+
+import net.shibboleth.shared.logic.Constraint;
+
+/**
+ * Condition that evaluates a message context for a specific message type.
+ */
+public class MessageTypePredicate implements Predicate<MessageContext> {
+
+    /** Type to check for. */
+    @Nonnull final Class<?> messageType;
+    
+    /**
+     * Constructor.
+     *
+     * @param type message type to check for
+     */
+    public MessageTypePredicate(@Nonnull final Class<?> type) {
+        messageType = Constraint.isNotNull(type, "Message type cannot be null");
+    }
+    
+    /** {@inheritDoc} */
+    public boolean test(@Nullable final MessageContext input) {
+        return input != null && messageType.isInstance(input.getMessage());
+    }
+
+}
\ No newline at end of file
diff --git a/sp-server-api/src/main/java/net/shibboleth/sp/messaging/context/logic/package-info.java b/sp-server-api/src/main/java/net/shibboleth/sp/messaging/context/logic/package-info.java
new file mode 100644
index 0000000..7261a60
--- /dev/null
+++ b/sp-server-api/src/main/java/net/shibboleth/sp/messaging/context/logic/package-info.java
@@ -0,0 +1,18 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Predicates over a {@link org.opensaml.messaging.context.MessageContext}.
+ */
+package net.shibboleth.sp.messaging.context.logic;

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list