[java-opensaml] branch main updated: IDP-2069 - Null Handling Task

Rod Widdowson rdw at steadingsoftware.com
Fri Mar 17 11:30:14 UTC 2023


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

rdw pushed a commit to branch main
in repository java-opensaml.

View the commit online:
http://git.shibboleth.net/view/?p=java-opensaml.git;a=commit;h=b69be594c15ecee6420a6f39aebc2b90e933be7b

The following commit(s) were added to refs/heads/main by this push:
     new b69be594c IDP-2069 - Null Handling Task
b69be594c is described below

commit b69be594c15ecee6420a6f39aebc2b90e933be7b
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Fri Mar 17 11:00:00 2023 +0000

    IDP-2069 - Null Handling Task
    
    https://shibboleth.atlassian.net/browse/IDP-2069
    
    Conitnue annotating the static final String
    
    NOT soap-api\ws*or xacml
---
 .../java/org/opensaml/core/xml/BaseBearing.java    |   5 +-
 .../main/java/org/opensaml/core/xml/IdBearing.java |   5 +-
 .../java/org/opensaml/core/xml/LangBearing.java    |   5 +-
 .../java/org/opensaml/core/xml/SpaceBearing.java   |   5 +-
 .../opensaml/saml/common/xml/SAMLConstants.java    | 220 +++++++++++----------
 .../saml/ext/idpdisco/DiscoveryResponse.java       |   6 +-
 .../org/opensaml/saml/ext/saml1md/SourceID.java    |   6 +-
 .../opensaml/saml/ext/saml2aslo/Asynchronous.java  |   8 +-
 .../opensaml/saml/ext/saml2cb/ChannelBindings.java |  10 +-
 .../saml/ext/saml2delrestrict/Delegate.java        |  10 +-
 .../DelegationRestrictionType.java                 |   4 +-
 .../saml/ext/saml2mdquery/ActionNamespace.java     |   6 +-
 .../saml2mdquery/AttributeQueryDescriptorType.java |   6 +-
 .../ext/saml2mdquery/AuthnQueryDescriptorType.java |   6 +-
 .../AuthzDecisionQueryDescriptorType.java          |   6 +-
 .../saml/ext/saml2mdquery/QueryDescriptorType.java |   8 +-
 .../saml/ext/saml2mdreqinit/RequestInitiator.java  |   6 +-
 .../opensaml/saml/ext/saml2mdrpi/Publication.java  |   6 +-
 .../saml/ext/saml2mdrpi/PublicationInfo.java       |   6 +-
 .../saml/ext/saml2mdrpi/PublicationPath.java       |   6 +-
 .../opensaml/saml/ext/saml2mdui/Description.java   |   6 +-
 .../opensaml/saml/ext/saml2mdui/DiscoHints.java    |   8 +-
 .../opensaml/saml/ext/saml2mdui/DisplayName.java   |   6 +-
 .../saml/ext/saml2mdui/InformationURL.java         |   6 +-
 .../org/opensaml/saml/ext/saml2mdui/Keywords.java  |   8 +-
 .../saml/ext/saml2mdui/PrivacyStatementURL.java    |   6 +-
 .../org/opensaml/saml/ext/saml2mdui/UIInfo.java    |   8 +-
 .../java/org/opensaml/saml/ext/samlec/EncType.java |   6 +-
 .../org/opensaml/saml/ext/samlec/GeneratedKey.java |   8 +-
 .../org/opensaml/saml/ext/samlec/SessionKey.java   |  10 +-
 .../opensaml/saml/ext/samlpthrpty/RespondTo.java   |   6 +-
 .../saml/saml1/core/AttributeStatement.java        |   6 +-
 .../saml1/core/AudienceRestrictionCondition.java   |   8 +-
 .../saml/saml1/core/AuthenticationQuery.java       |  10 +-
 .../opensaml/saml/saml1/core/AuthorityBinding.java |  14 +-
 .../saml1/core/AuthorizationDecisionQuery.java     |   8 +-
 .../saml1/core/AuthorizationDecisionStatement.java |  12 +-
 .../org/opensaml/saml/saml1/core/Condition.java    |   8 +-
 .../saml/saml1/core/DoNotCacheCondition.java       |   8 +-
 .../org/opensaml/saml/saml1/core/Evidence.java     |  10 +-
 .../opensaml/saml/saml1/core/NameIdentifier.java   |  20 +-
 .../java/org/opensaml/saml/saml1/core/Query.java   |   8 +-
 .../java/org/opensaml/saml/saml1/core/Request.java |   6 +-
 .../org/opensaml/saml/saml1/core/RespondWith.java  |   6 +-
 .../org/opensaml/saml/saml1/core/Response.java     |   8 +-
 .../org/opensaml/saml/saml1/core/Statement.java    |   8 +-
 .../java/org/opensaml/saml/saml1/core/Status.java  |   8 +-
 .../org/opensaml/saml/saml1/core/StatusCode.java   |  10 +-
 .../org/opensaml/saml/saml1/core/StatusDetail.java |   8 +-
 .../java/org/opensaml/saml/saml1/core/Subject.java |   8 +-
 .../saml/saml1/core/SubjectConfirmation.java       |   6 +-
 .../opensaml/saml/saml1/core/SubjectLocality.java  |  10 +-
 .../org/opensaml/saml/saml1/core/SubjectQuery.java |   8 +-
 .../opensaml/saml/saml1/core/SubjectStatement.java |   8 +-
 .../SAML2AssertionValidationParameters.java        |  62 +++---
 .../java/org/opensaml/saml/saml2/core/Advice.java  |   8 +-
 .../opensaml/saml/saml2/core/ArtifactResolve.java  |   6 +-
 .../opensaml/saml/saml2/core/ArtifactResponse.java |   8 +-
 .../saml/saml2/core/AssertionIDRequest.java        |   6 +-
 .../opensaml/saml/saml2/core/AttributeQuery.java   |   8 +-
 .../saml/saml2/core/AttributeStatement.java        |   8 +-
 .../saml/saml2/core/AudienceRestriction.java       |   8 +-
 .../org/opensaml/saml/saml2/core/AuthnContext.java |  56 +++---
 .../opensaml/saml/saml2/core/AuthnContextDecl.java |   4 +-
 .../org/opensaml/saml/saml2/core/AuthnQuery.java   |   8 +-
 .../org/opensaml/saml/saml2/core/AuthnRequest.java |  20 +-
 .../saml/saml2/core/AuthzDecisionQuery.java        |   8 +-
 .../saml/saml2/core/AuthzDecisionStatement.java    |  12 +-
 .../java/org/opensaml/saml/saml2/core/BaseID.java  |  12 +-
 .../org/opensaml/saml/saml2/core/Condition.java    |   8 +-
 .../saml/saml2/core/EncryptedAssertion.java        |   6 +-
 .../saml/saml2/core/EncryptedAttribute.java        |   6 +-
 .../saml/saml2/core/EncryptedElementType.java      |   6 +-
 .../org/opensaml/saml/saml2/core/EncryptedID.java  |   6 +-
 .../org/opensaml/saml/saml2/core/Evidence.java     |   8 +-
 .../org/opensaml/saml/saml2/core/Extensions.java   |   8 +-
 .../org/opensaml/saml/saml2/core/IDPEntry.java     |  14 +-
 .../java/org/opensaml/saml/saml2/core/IDPList.java |   8 +-
 .../java/org/opensaml/saml/saml2/core/Issuer.java  |   8 +-
 .../saml2/core/KeyInfoConfirmationDataType.java    |   4 +-
 .../opensaml/saml/saml2/core/LogoutResponse.java   |  16 +-
 .../saml/saml2/core/ManageNameIDRequest.java       |   6 +-
 .../saml/saml2/core/ManageNameIDResponse.java      |   8 +-
 .../saml/saml2/core/NameIDMappingRequest.java      |   6 +-
 .../saml/saml2/core/NameIDMappingResponse.java     |   6 +-
 .../org/opensaml/saml/saml2/core/NameIDPolicy.java |  14 +-
 .../org/opensaml/saml/saml2/core/NameIDType.java   |  30 +--
 .../opensaml/saml/saml2/core/NewEncryptedID.java   |   6 +-
 .../org/opensaml/saml/saml2/core/OneTimeUse.java   |   8 +-
 .../saml/saml2/core/RequestedAuthnContext.java     |   8 +-
 .../org/opensaml/saml/saml2/core/Response.java     |   6 +-
 .../java/org/opensaml/saml/saml2/core/Scoping.java |   8 +-
 .../org/opensaml/saml/saml2/core/Statement.java    |   8 +-
 .../java/org/opensaml/saml/saml2/core/Status.java  |   8 +-
 .../org/opensaml/saml/saml2/core/StatusCode.java   |  54 ++---
 .../org/opensaml/saml/saml2/core/StatusDetail.java |   8 +-
 .../java/org/opensaml/saml/saml2/core/Subject.java |   8 +-
 .../saml/saml2/core/SubjectConfirmation.java       |  16 +-
 .../opensaml/saml/saml2/core/SubjectLocality.java  |  12 +-
 .../org/opensaml/saml/saml2/core/SubjectQuery.java |   6 +-
 .../org/opensaml/saml/saml2/core/Terminate.java    |   8 +-
 .../org/opensaml/saml/saml2/ecp/RelayState.java    |   6 +-
 .../java/org/opensaml/saml/saml2/ecp/Request.java  |  10 +-
 .../saml/saml2/ecp/RequestAuthenticated.java       |   8 +-
 .../java/org/opensaml/saml/saml2/ecp/Response.java |   8 +-
 .../saml/saml2/ecp/SubjectConfirmation.java        |  10 +-
 .../saml/saml2/metadata/AffiliationDescriptor.java |  12 +-
 .../saml2/metadata/ArtifactResolutionService.java  |   6 +-
 .../saml2/metadata/AssertionConsumerService.java   |   6 +-
 .../saml2/metadata/AssertionIDRequestService.java  |   6 +-
 .../metadata/AttributeAuthorityDescriptor.java     |   8 +-
 .../saml/saml2/metadata/AttributeService.java      |   6 +-
 .../saml2/metadata/AuthnAuthorityDescriptor.java   |   8 +-
 .../saml/saml2/metadata/AuthnQueryService.java     |   6 +-
 .../opensaml/saml/saml2/metadata/AuthzService.java |   6 +-
 .../saml/saml2/metadata/ContactPerson.java         |  10 +-
 .../saml/saml2/metadata/EncryptionMethod.java      |   6 +-
 .../org/opensaml/saml/saml2/metadata/Endpoint.java |  14 +-
 .../saml/saml2/metadata/EntitiesDescriptor.java    |  12 +-
 .../saml/saml2/metadata/EntityDescriptor.java      |  12 +-
 .../opensaml/saml/saml2/metadata/Extensions.java   |   8 +-
 .../saml/saml2/metadata/IndexedEndpoint.java       |  10 +-
 .../saml/saml2/metadata/KeyDescriptor.java         |  10 +-
 .../saml/saml2/metadata/ManageNameIDService.java   |   6 +-
 .../saml/saml2/metadata/NameIDMappingService.java  |   6 +-
 .../opensaml/saml/saml2/metadata/Organization.java |   6 +-
 .../saml2/metadata/OrganizationDisplayName.java    |   6 +-
 .../saml/saml2/metadata/PDPDescriptor.java         |   8 +-
 .../saml/saml2/metadata/RoleDescriptor.java        |  14 +-
 .../saml/saml2/metadata/SSODescriptor.java         |   6 +-
 .../saml/saml2/metadata/SingleLogoutService.java   |   6 +-
 .../saml/saml2/metadata/SingleSignOnService.java   |   6 +-
 .../tests/BaseAssertionValidationTest.java         |  14 +-
 .../org/opensaml/soap/soap11/ActorBearing.java     |   6 +-
 .../main/java/org/opensaml/soap/soap11/Body.java   |   6 +-
 .../main/java/org/opensaml/soap/soap11/Detail.java |   6 +-
 .../opensaml/soap/soap11/EncodingStyleBearing.java |   6 +-
 .../java/org/opensaml/soap/soap11/Envelope.java    |   8 +-
 .../main/java/org/opensaml/soap/soap11/Fault.java  |   6 +-
 .../java/org/opensaml/soap/soap11/FaultActor.java  |   4 +-
 .../java/org/opensaml/soap/soap11/FaultCode.java   |   4 +-
 .../java/org/opensaml/soap/soap11/FaultString.java |   4 +-
 .../main/java/org/opensaml/soap/soap11/Header.java |   4 +-
 .../soap/soap11/MustUnderstandBearing.java         |   6 +-
 .../opensaml/soap/soap12/EncodingStyleBearing.java |   6 +-
 .../soap/soap12/MustUnderstandBearing.java         |   6 +-
 .../org/opensaml/soap/soap12/RelayBearing.java     |   6 +-
 .../java/org/opensaml/soap/soap12/RoleBearing.java |   6 +-
 .../AbstractBaseClientStorageServiceTest.java      |   3 +-
 .../opensaml/xmlsec/keyinfo/KeyInfoSupport.java    |   5 +-
 .../xmlsec/signature/X509IssuerSerial.java         |   4 +-
 151 files changed, 923 insertions(+), 629 deletions(-)

diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/xml/BaseBearing.java b/opensaml-core-api/src/main/java/org/opensaml/core/xml/BaseBearing.java
index 99f1b9a84..1c665bc4b 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/xml/BaseBearing.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/xml/BaseBearing.java
@@ -21,6 +21,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.xml.XMLConstants;
 
 /**
@@ -30,7 +31,7 @@ import net.shibboleth.shared.xml.XMLConstants;
 public interface BaseBearing {
 
     /** The <code>base</code> attribute local name. */
-    @Nonnull public static final String XML_BASE_ATTR_LOCAL_NAME = "base";
+    @Nonnull @NotEmpty public static final String XML_BASE_ATTR_LOCAL_NAME = "base";
 
     /** The <code>xml:base</code> qualified attribute name. */
     @Nonnull public static final QName XML_BASE_ATTR_NAME =
@@ -50,4 +51,4 @@ public interface BaseBearing {
      */
     public void setXMLBase(@Nullable final String newBase);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/xml/IdBearing.java b/opensaml-core-api/src/main/java/org/opensaml/core/xml/IdBearing.java
index 0ceda685b..d7a767667 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/xml/IdBearing.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/xml/IdBearing.java
@@ -21,6 +21,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.xml.XMLConstants;
 
 /**
@@ -30,7 +31,7 @@ import net.shibboleth.shared.xml.XMLConstants;
 public interface IdBearing {
 
     /** The <code>id</code> attribute local name. */
-    @Nonnull public static final String XML_ID_ATTR_LOCAL_NAME = "id";
+    @Nonnull @NotEmpty public static final String XML_ID_ATTR_LOCAL_NAME = "id";
 
     /** The <code>xml:id</code> qualified attribute name. */
     @Nonnull public static final QName XML_ID_ATTR_NAME =
@@ -50,4 +51,4 @@ public interface IdBearing {
      */
     public void setXMLId(@Nullable final String newId);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/xml/LangBearing.java b/opensaml-core-api/src/main/java/org/opensaml/core/xml/LangBearing.java
index d1a979c2d..0278e0eda 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/xml/LangBearing.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/xml/LangBearing.java
@@ -21,6 +21,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.xml.XMLConstants;
 
 /**
@@ -30,7 +31,7 @@ import net.shibboleth.shared.xml.XMLConstants;
 public interface LangBearing {
 
     /** The <code>lang</code> attribute local name. */
-    @Nonnull public static final String XML_LANG_ATTR_LOCAL_NAME = "lang";
+    @Nonnull @NotEmpty public static final String XML_LANG_ATTR_LOCAL_NAME = "lang";
 
     /** The <code>xml:lang</code> qualified attribute name. */
     @Nonnull public static final QName XML_LANG_ATTR_NAME =
@@ -50,4 +51,4 @@ public interface LangBearing {
      */
     public void setXMLLang(@Nullable final String newLang);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-core-api/src/main/java/org/opensaml/core/xml/SpaceBearing.java b/opensaml-core-api/src/main/java/org/opensaml/core/xml/SpaceBearing.java
index 4508be509..5cade4448 100644
--- a/opensaml-core-api/src/main/java/org/opensaml/core/xml/SpaceBearing.java
+++ b/opensaml-core-api/src/main/java/org/opensaml/core/xml/SpaceBearing.java
@@ -21,6 +21,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.xml.XMLConstants;
 
 /**
@@ -62,7 +63,7 @@ public interface SpaceBearing {
     }
 
     /** The <code>space</code> attribute local name. */
-    @Nonnull public static final String XML_SPACE_ATTR_LOCAL_NAME = "space";
+    @Nonnull @NotEmpty public static final String XML_SPACE_ATTR_LOCAL_NAME = "space";
 
     /** The <code>xml:space</code> qualified attribute name. */
     @Nonnull public static final QName XML_SPACE_ATTR_NAME =
@@ -82,4 +83,4 @@ public interface SpaceBearing {
      */
     public void setXMLSpace(@Nullable final XMLSpaceEnum newSpace);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/xml/SAMLConstants.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/xml/SAMLConstants.java
index af905f103..5e9c412ff 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/xml/SAMLConstants.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/xml/SAMLConstants.java
@@ -19,6 +19,8 @@ package org.opensaml.saml.common.xml;
 
 import javax.annotation.Nonnull;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /** XML related constants used in the SAML specifications. */
 public final class SAMLConstants {
 
@@ -26,350 +28,350 @@ public final class SAMLConstants {
     // HTTP Constants
     // ****************************
     /** HTTP Request Method - POST. */
-    @Nonnull public static final String POST_METHOD = "POST";
+    @Nonnull @NotEmpty public static final String POST_METHOD = "POST";
 
     /** HTTP Method - GET. */
-    @Nonnull public static final String GET_METHOD = "GET";
+    @Nonnull @NotEmpty public static final String GET_METHOD = "GET";
 
     // ****************************
     // OpenSAML 2
     // ****************************
     /** Directory, on the classpath, schemas are located in. */
-    @Nonnull public static final String SCHEMA_DIR = "/schema/";
+    @Nonnull @NotEmpty public static final String SCHEMA_DIR = "/schema/";
 
     // ****************************
     // Core XML
     // ****************************
     /** XML core schema system Id. */
-    @Nonnull public static final String XML_SCHEMA_LOCATION = SCHEMA_DIR + "xml.xsd";
+    @Nonnull @NotEmpty public static final String XML_SCHEMA_LOCATION = SCHEMA_DIR + "xml.xsd";
 
     /** XML Schema schema system Id. */
-    @Nonnull public static final String XSD_SCHEMA_LOCATION = SCHEMA_DIR + "XMLSchema.xsd";
+    @Nonnull @NotEmpty public static final String XSD_SCHEMA_LOCATION = SCHEMA_DIR + "XMLSchema.xsd";
 
     /** XML Signature schema Id. */
-    @Nonnull public static final String XMLSIG_SCHEMA_LOCATION = SCHEMA_DIR + "xmldsig-core-schema.xsd";
+    @Nonnull @NotEmpty public static final String XMLSIG_SCHEMA_LOCATION = SCHEMA_DIR + "xmldsig-core-schema.xsd";
 
     /**  XML Signature 1.1 schema Id. */
-    @Nonnull public static final String XMLSIG11_SCHEMA_LOCATION = SCHEMA_DIR + "xmldsig11-schema.xsd";
+    @Nonnull @NotEmpty public static final String XMLSIG11_SCHEMA_LOCATION = SCHEMA_DIR + "xmldsig11-schema.xsd";
     
     /** XML Encryption schema Id. */
-    @Nonnull public static final String XMLENC_SCHEMA_LOCATION = SCHEMA_DIR + "xenc-schema.xsd";
+    @Nonnull @NotEmpty public static final String XMLENC_SCHEMA_LOCATION = SCHEMA_DIR + "xenc-schema.xsd";
     
     /** XML Encryption 1.1 schema Id. */
-    @Nonnull public static final String XMLENC11_SCHEMA_LOCATION = SCHEMA_DIR + "xenc11-schema.xsd";
+    @Nonnull @NotEmpty public static final String XMLENC11_SCHEMA_LOCATION = SCHEMA_DIR + "xenc11-schema.xsd";
 
     // ****************************
     // SOAP
     // ****************************
     /** SOAP 1.1 schema Id. */
-    @Nonnull public static final String SOAP11ENV_SCHEMA_LOCATION = SCHEMA_DIR + "soap-envelope.xsd";
+    @Nonnull @NotEmpty public static final String SOAP11ENV_SCHEMA_LOCATION = SCHEMA_DIR + "soap-envelope.xsd";
 
     /** SOAP 1.1 Envelope XML namespace. */
-    @Nonnull public static final String SOAP11ENV_NS = "http://schemas.xmlsoap.org/soap/envelope/";
+    @Nonnull @NotEmpty public static final String SOAP11ENV_NS = "http://schemas.xmlsoap.org/soap/envelope/";
 
     /** SOAP 1.1 Envelope QName prefix. */
-    @Nonnull public static final String SOAP11ENV_PREFIX = "SOAP-ENV";
+    @Nonnull @NotEmpty public static final String SOAP11ENV_PREFIX = "SOAP-ENV";
 
     /** Liberty PAOS XML Namespace. */
-    @Nonnull public static final String PAOS_NS = "urn:liberty:paos:2003-08";
+    @Nonnull @NotEmpty public static final String PAOS_NS = "urn:liberty:paos:2003-08";
 
     /** Liberty PAOS QName prefix. */
-    @Nonnull public static final String PAOS_PREFIX = "paos";
+    @Nonnull @NotEmpty public static final String PAOS_PREFIX = "paos";
 
     // ****************************
     // SAML 1.X
     // ****************************
     /** SAML 1.0 Assertion schema system Id. */
-    @Nonnull public static final String SAML10_SCHEMA_LOCATION = SCHEMA_DIR + "oasis-sstc-saml-schema-assertion-1.0.xsd";
+    @Nonnull @NotEmpty public static final String SAML10_SCHEMA_LOCATION = SCHEMA_DIR + "oasis-sstc-saml-schema-assertion-1.0.xsd";
 
     /** SAML 1.1 Assertion schema system Id. */
-    @Nonnull public static final String SAML11_SCHEMA_LOCATION = SCHEMA_DIR + "oasis-sstc-saml-schema-assertion-1.1.xsd";
+    @Nonnull @NotEmpty public static final String SAML11_SCHEMA_LOCATION = SCHEMA_DIR + "oasis-sstc-saml-schema-assertion-1.1.xsd";
 
     /** SAML 1.X XML namespace. */
-    @Nonnull public static final String SAML1_NS = "urn:oasis:names:tc:SAML:1.0:assertion";
+    @Nonnull @NotEmpty public static final String SAML1_NS = "urn:oasis:names:tc:SAML:1.0:assertion";
 
     /** SAML 1.0 Protocol schema system Id. */
-    @Nonnull public static final String SAML10P_SCHEMA_LOCATION = SCHEMA_DIR + "oasis-sstc-saml-schema-protocol-1.0.xsd";
+    @Nonnull @NotEmpty public static final String SAML10P_SCHEMA_LOCATION = SCHEMA_DIR + "oasis-sstc-saml-schema-protocol-1.0.xsd";
 
     /** SAML 1.1 Protocol schema system Id. */
-    @Nonnull public static final String SAML11P_SCHEMA_LOCATION = SCHEMA_DIR + "oasis-sstc-saml-schema-protocol-1.1.xsd";
+    @Nonnull @NotEmpty public static final String SAML11P_SCHEMA_LOCATION = SCHEMA_DIR + "oasis-sstc-saml-schema-protocol-1.1.xsd";
 
     /** SAML 1.X protocol XML namespace. */
-    @Nonnull public static final String SAML10P_NS = "urn:oasis:names:tc:SAML:1.0:protocol";
+    @Nonnull @NotEmpty public static final String SAML10P_NS = "urn:oasis:names:tc:SAML:1.0:protocol";
 
     /** SAML 1.1 protocol XML namespace, used only in SAML 2 metadata protocolSupportEnumeration. */
-    @Nonnull public static final String SAML11P_NS = "urn:oasis:names:tc:SAML:1.1:protocol";
+    @Nonnull @NotEmpty public static final String SAML11P_NS = "urn:oasis:names:tc:SAML:1.1:protocol";
 
     /** SAML 1.X Protocol QName prefix. */
-    @Nonnull public static final String SAML1P_PREFIX = "saml1p";
+    @Nonnull @NotEmpty public static final String SAML1P_PREFIX = "saml1p";
 
     /** SAML 1.X Assertion QName prefix. */
-    @Nonnull public static final String SAML1_PREFIX = "saml1";
+    @Nonnull @NotEmpty public static final String SAML1_PREFIX = "saml1";
 
     /** SAML 1 Metadata extension XML namespace. */
-    @Nonnull public static final String SAML1MD_NS = "urn:oasis:names:tc:SAML:profiles:v1metadata";
+    @Nonnull @NotEmpty public static final String SAML1MD_NS = "urn:oasis:names:tc:SAML:profiles:v1metadata";
 
     /** SAML 1 Metadata extension schema system Id. */
-    @Nonnull public static final String SAML1MD_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml1x-metadata.xsd";
+    @Nonnull @NotEmpty public static final String SAML1MD_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml1x-metadata.xsd";
 
     /** SAML 1 Metadata extension namespace prefix. */
-    @Nonnull public static final String SAML1MD_PREFIX = "saml1md";
+    @Nonnull @NotEmpty public static final String SAML1MD_PREFIX = "saml1md";
 
     /** URI for SAML 1 Artifact binding. */
-    @Nonnull public static final String SAML1_ARTIFACT_BINDING_URI = "urn:oasis:names:tc:SAML:1.0:profiles:artifact-01";
+    @Nonnull @NotEmpty public static final String SAML1_ARTIFACT_BINDING_URI = "urn:oasis:names:tc:SAML:1.0:profiles:artifact-01";
 
     /** URI for SAML 1 POST binding. */
-    @Nonnull public static final String SAML1_POST_BINDING_URI = "urn:oasis:names:tc:SAML:1.0:profiles:browser-post";
+    @Nonnull @NotEmpty public static final String SAML1_POST_BINDING_URI = "urn:oasis:names:tc:SAML:1.0:profiles:browser-post";
 
     /** URI for SAML 1 SOAP 1.1 binding. */
-    @Nonnull public static final String SAML1_SOAP11_BINDING_URI = "urn:oasis:names:tc:SAML:1.0:bindings:SOAP-binding";
+    @Nonnull @NotEmpty public static final String SAML1_SOAP11_BINDING_URI = "urn:oasis:names:tc:SAML:1.0:bindings:SOAP-binding";
 
     // ****************************
     // SAML 2.0
     // ****************************
     /** SAML 2.0 Assertion schema Id. */
-    @Nonnull public static final String SAML20_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-assertion-2.0.xsd";
+    @Nonnull @NotEmpty public static final String SAML20_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-assertion-2.0.xsd";
 
     /** "Strict" SAML 2.0 Assertion schema Id. */
-    @Nonnull public static final String STRICT_SAML20_SCHEMA_LOCATION = SCHEMA_DIR + "strict/saml-schema-assertion-2.1.xsd";
+    @Nonnull @NotEmpty public static final String STRICT_SAML20_SCHEMA_LOCATION = SCHEMA_DIR + "strict/saml-schema-assertion-2.1.xsd";
 
     /** SAML 2.0 Assertion XML Namespace. */
-    @Nonnull public static final String SAML20_NS = "urn:oasis:names:tc:SAML:2.0:assertion";
+    @Nonnull @NotEmpty public static final String SAML20_NS = "urn:oasis:names:tc:SAML:2.0:assertion";
 
     /** SAML 2.0 Assertion QName prefix. */
-    @Nonnull public static final String SAML20_PREFIX = "saml2";
+    @Nonnull @NotEmpty public static final String SAML20_PREFIX = "saml2";
 
     /** SAML 2.0 Protocol schema Id. */
-    @Nonnull public static final String SAML20P_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-protocol-2.0.xsd";
+    @Nonnull @NotEmpty public static final String SAML20P_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-protocol-2.0.xsd";
 
     /** "Strict" SAML 2.0 Protocol schema Id. */
-    @Nonnull public static final String STRICT_SAML20P_SCHEMA_LOCATION = SCHEMA_DIR + "strict/saml-schema-protocol-2.1.xsd";
+    @Nonnull @NotEmpty public static final String STRICT_SAML20P_SCHEMA_LOCATION = SCHEMA_DIR + "strict/saml-schema-protocol-2.1.xsd";
 
     /** SAML 2.0 Protocol XML Namespace. */
-    @Nonnull public static final String SAML20P_NS = "urn:oasis:names:tc:SAML:2.0:protocol";
+    @Nonnull @NotEmpty public static final String SAML20P_NS = "urn:oasis:names:tc:SAML:2.0:protocol";
 
     /** SAML 2.0 Protocol QName prefix. */
-    @Nonnull public static final String SAML20P_PREFIX = "saml2p";
+    @Nonnull @NotEmpty public static final String SAML20P_PREFIX = "saml2p";
 
     /** SAML 2.0 Metadata schema Id. */
-    @Nonnull public static final String SAML20MD_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-metadata-2.0.xsd";
+    @Nonnull @NotEmpty public static final String SAML20MD_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-metadata-2.0.xsd";
 
     /** "Strict" SAML 2.0 Metadata schema Id. */
-    @Nonnull public static final String STRICT_SAML20MD_SCHEMA_LOCATION = SCHEMA_DIR + "strict/saml-schema-metadata-2.1.xsd";
+    @Nonnull @NotEmpty public static final String STRICT_SAML20MD_SCHEMA_LOCATION = SCHEMA_DIR + "strict/saml-schema-metadata-2.1.xsd";
 
     /** SAML 2.0 Metadata XML Namespace. */
-    @Nonnull public static final String SAML20MD_NS = "urn:oasis:names:tc:SAML:2.0:metadata";
+    @Nonnull @NotEmpty public static final String SAML20MD_NS = "urn:oasis:names:tc:SAML:2.0:metadata";
     
     /** SAML 2.0 Protocol Third-party extension schema Id. */
-    @Nonnull public static final String SAML20PTHRPTY_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml-protocol-ext-thirdparty.xsd";
+    @Nonnull @NotEmpty public static final String SAML20PTHRPTY_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml-protocol-ext-thirdparty.xsd";
 
     /** SAML 2.0 Protocol Third-party extension XML Namespace. */
-    @Nonnull public static final String SAML20PTHRPTY_NS = "urn:oasis:names:tc:SAML:protocol:ext:third-party";
+    @Nonnull @NotEmpty public static final String SAML20PTHRPTY_NS = "urn:oasis:names:tc:SAML:protocol:ext:third-party";
 
     /** SAML 2.0 Protocol Third-party extension QName prefix. */
-    @Nonnull public static final String SAML20PTHRPTY_PREFIX = "thrpty";
+    @Nonnull @NotEmpty public static final String SAML20PTHRPTY_PREFIX = "thrpty";
 
     /** SAML 2.0 Protocol Async Logout extension schema Id. */
-    @Nonnull public static final String SAML20PASLO_SCHEMA_LOCATION = SCHEMA_DIR + "saml-async-slo-v1.0.xsd";
+    @Nonnull @NotEmpty public static final String SAML20PASLO_SCHEMA_LOCATION = SCHEMA_DIR + "saml-async-slo-v1.0.xsd";
     
     /** SAML 2.0 Protocol Async Logout extension XML Namespace. */
-    @Nonnull public static final String SAML20PASLO_NS = "urn:oasis:names:tc:SAML:2.0:protocol:ext:async-slo";
+    @Nonnull @NotEmpty public static final String SAML20PASLO_NS = "urn:oasis:names:tc:SAML:2.0:protocol:ext:async-slo";
     
     /** SAML 2.0 Protocol Async Logout extension QName prefix. */
-    @Nonnull public static final String SAML20PASLO_PREFIX ="aslo";
+    @Nonnull @NotEmpty public static final String SAML20PASLO_PREFIX ="aslo";
     
     /** SAML SAML V2.0 "Protocol Extension For Requesting Attributes Per Request" namespace. */
-    @Nonnull public static final String SAML20PREQ_ATTR_NS = "urn:oasis:names:tc:SAML:protocol:ext:req-attr";
+    @Nonnull @NotEmpty public static final String SAML20PREQ_ATTR_NS = "urn:oasis:names:tc:SAML:protocol:ext:req-attr";
 
     /** SAML SAML V2.0 "Protocol Extension For Requesting Attributes Per Request" prefix. */
-    @Nonnull public static final String SAML20PREQ_ATTRR_PREFIX = "req-attr";
+    @Nonnull @NotEmpty public static final String SAML20PREQ_ATTRR_PREFIX = "req-attr";
 
     /** SAML 2.0 Standalone Query Metadata extension XML namespace. */
-    @Nonnull public static final String SAML20MDQUERY_NS = "urn:oasis:names:tc:SAML:metadata:ext:query";
+    @Nonnull @NotEmpty public static final String SAML20MDQUERY_NS = "urn:oasis:names:tc:SAML:metadata:ext:query";
 
     /** SAML 2.0 Standalone Query Metadata extension schema system Id. */
-    @Nonnull public static final String SAML20MDQUERY_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml-metadata-ext-query.xsd";
+    @Nonnull @NotEmpty public static final String SAML20MDQUERY_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml-metadata-ext-query.xsd";
 
     /** "Strict" SAML 2.0 Standalone Query Metadata extension schema system Id. */
-    @Nonnull public static final String STRICT_SAML20MDQUERY_SCHEMA_LOCATION =
+    @Nonnull @NotEmpty public static final String STRICT_SAML20MDQUERY_SCHEMA_LOCATION =
             SCHEMA_DIR + "strict/sstc-saml-metadata-ext-query.xsd";
 
     /** SAML 2.0 Standalone Query Metadata extension prefix. */
-    @Nonnull public static final String SAML20MDQUERY_PREFIX = "query";
+    @Nonnull @NotEmpty public static final String SAML20MDQUERY_PREFIX = "query";
 
     /** SAML 2.0 Metadata QName prefix. */
-    @Nonnull public static final String SAML20MD_PREFIX = "md";
+    @Nonnull @NotEmpty public static final String SAML20MD_PREFIX = "md";
 
     /** SAML 2.0 Authentication Context schema Id. */
-    @Nonnull public static final String SAML20AC_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-authn-context-2.0.xsd";
+    @Nonnull @NotEmpty public static final String SAML20AC_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-authn-context-2.0.xsd";
 
     /** SAML 2.0 Authentication Context XML Namespace. */
-    @Nonnull public static final String SAML20AC_NS = "urn:oasis:names:tc:SAML:2.0:ac";
+    @Nonnull @NotEmpty public static final String SAML20AC_NS = "urn:oasis:names:tc:SAML:2.0:ac";
 
     /** SAML 2.0 Authentication Context QName prefix. */
-    @Nonnull public static final String SAML20AC_PREFIX = "ac";
+    @Nonnull @NotEmpty public static final String SAML20AC_PREFIX = "ac";
 
     /** SAML 2.0 Enhanced Client/Proxy SSO Profile schema Id. */
-    @Nonnull public static final String SAML20ECP_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-ecp-2.0.xsd";
+    @Nonnull @NotEmpty public static final String SAML20ECP_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-ecp-2.0.xsd";
 
     /** "Strict" SAML 2.0 Enhanced Client/Proxy SSO Profile schema Id. */
-    @Nonnull public static final String STRICT_SAML20ECP_SCHEMA_LOCATION = SCHEMA_DIR + "strict/saml-schema-ecp-2.1.xsd";
+    @Nonnull @NotEmpty public static final String STRICT_SAML20ECP_SCHEMA_LOCATION = SCHEMA_DIR + "strict/saml-schema-ecp-2.1.xsd";
 
     /** SAML 2.0 Enhanced Client/Proxy SSO Profile XML Namespace. */
-    @Nonnull public static final String SAML20ECP_NS = "urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp";
+    @Nonnull @NotEmpty public static final String SAML20ECP_NS = "urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp";
 
     /** SAML 2.0 Enhanced Client/Proxy SSO Profile QName prefix. */
-    @Nonnull public static final String SAML20ECP_PREFIX = "ecp";
+    @Nonnull @NotEmpty public static final String SAML20ECP_PREFIX = "ecp";
 
     /** SAML 2.0 Condition for Delegation Restriction schema Id. */
-    @Nonnull public static final String SAML20DEL_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml-delegation.xsd";
+    @Nonnull @NotEmpty public static final String SAML20DEL_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml-delegation.xsd";
 
     /** SAML 2.0 Condition for Delegation Restriction XML Namespace. */
-    @Nonnull public static final String SAML20DEL_NS = "urn:oasis:names:tc:SAML:2.0:conditions:delegation";
+    @Nonnull @NotEmpty public static final String SAML20DEL_NS = "urn:oasis:names:tc:SAML:2.0:conditions:delegation";
 
     /** SAML 2.0 Condition for Delegation Restriction QName prefix. */
-    @Nonnull public static final String SAML20DEL_PREFIX = "del";
+    @Nonnull @NotEmpty public static final String SAML20DEL_PREFIX = "del";
 
     /** SAML 2.0 Metadata Extension for Entity Attributes schema Id. */
-    @Nonnull public static final String SAML20MDATTR_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-metadata-attr.xsd";
+    @Nonnull @NotEmpty public static final String SAML20MDATTR_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-metadata-attr.xsd";
 
     /** SAML 2.0 Metadata Extension for Entity Attributes XML Namespace. */
-    @Nonnull public static final String SAML20MDATTR_NS = "urn:oasis:names:tc:SAML:metadata:attribute";
+    @Nonnull @NotEmpty public static final String SAML20MDATTR_NS = "urn:oasis:names:tc:SAML:metadata:attribute";
 
     /** SAML 2.0 Metadata Extension for Entity Attributes QName prefix. */
-    @Nonnull public static final String SAML20MDATTR_PREFIX = "mdattr";
+    @Nonnull @NotEmpty public static final String SAML20MDATTR_PREFIX = "mdattr";
 
     /** SAML 2.0 Metadata Extension for Discovery and Login UI schema Id. */
-    @Nonnull public static final String SAML20MDUI_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml-metadata-ui-v1.0.xsd";
+    @Nonnull @NotEmpty public static final String SAML20MDUI_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml-metadata-ui-v1.0.xsd";
 
     /** "Strict" SAML 2.0 Metadata Extension for Discovery and Login UI schema Id. */
-    @Nonnull public static final String STRICT_SAML20MDUI_SCHEMA_LOCATION = SCHEMA_DIR + "strict/sstc-saml-metadata-ui-v1.1.xsd";
+    @Nonnull @NotEmpty public static final String STRICT_SAML20MDUI_SCHEMA_LOCATION = SCHEMA_DIR + "strict/sstc-saml-metadata-ui-v1.1.xsd";
 
     /** SAML 2.0 Metadata Extension for Discovery and Login UI XML Namespace. */
-    @Nonnull public static final String SAML20MDUI_NS = "urn:oasis:names:tc:SAML:metadata:ui";
+    @Nonnull @NotEmpty public static final String SAML20MDUI_NS = "urn:oasis:names:tc:SAML:metadata:ui";
 
     /** SAML 2.0 Metadata Extension for Discovery and Login UI QName prefix. */
-    @Nonnull public static final String SAML20MDUI_PREFIX = "mdui";
+    @Nonnull @NotEmpty public static final String SAML20MDUI_PREFIX = "mdui";
 
     /** SAML 2.0 Metadata Extension for SSO Service Provider Request Initiation Namespace. */
-    @Nonnull public static final String SAML20MDRI_NS = "urn:oasis:names:tc:SAML:profiles:SSO:request-init";
+    @Nonnull @NotEmpty public static final String SAML20MDRI_NS = "urn:oasis:names:tc:SAML:profiles:SSO:request-init";
 
     /** SAML 2.0 Metadata Extension for SSO Service Provider Request Initiation QName prefix. */
-    @Nonnull public static final String SAML20MDRI_PREFIX = "init";
+    @Nonnull @NotEmpty public static final String SAML20MDRI_PREFIX = "init";
 
     /** SAML 2.0 Metadata Extension for Registration and Publication Information schema Id. */
-    @Nonnull public static final String SAML20MDRPI_SCHEMA_LOCATION = SCHEMA_DIR + "saml-metadata-rpi-v1.0.xsd";
+    @Nonnull @NotEmpty public static final String SAML20MDRPI_SCHEMA_LOCATION = SCHEMA_DIR + "saml-metadata-rpi-v1.0.xsd";
 
     /** "Strict" SAML 2.0 Metadata Extension for Registration and Publication Information schema Id. */
-    @Nonnull public static final String STRICT_SAML20MDRPI_SCHEMA_LOCATION = SCHEMA_DIR + "strict/saml-metadata-rpi-v1.1.xsd";
+    @Nonnull @NotEmpty public static final String STRICT_SAML20MDRPI_SCHEMA_LOCATION = SCHEMA_DIR + "strict/saml-metadata-rpi-v1.1.xsd";
 
     /** SAML 2.0 Metadata Extension for Registration and Publication Information XML Namespace. */
-    @Nonnull public static final String SAML20MDRPI_NS = "urn:oasis:names:tc:SAML:metadata:rpi";
+    @Nonnull @NotEmpty public static final String SAML20MDRPI_NS = "urn:oasis:names:tc:SAML:metadata:rpi";
 
     /** SAML 2.0 Metadata Extension for Registration and Publication Information QName prefix. */
-    @Nonnull public static final String SAML20MDRPI_PREFIX = "mdrpi";
+    @Nonnull @NotEmpty public static final String SAML20MDRPI_PREFIX = "mdrpi";
 
     /** SAML 2.0 Channel Binding Extensions schema Id. */
-    @Nonnull public static final String SAML20CB_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml-channel-binding-ext-v1.0.xsd";
+    @Nonnull @NotEmpty public static final String SAML20CB_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml-channel-binding-ext-v1.0.xsd";
 
     /** SAML 2.0 Channel Binding Extensions XML Namespace. */
-    @Nonnull public static final String SAML20CB_NS = "urn:oasis:names:tc:SAML:protocol:ext:channel-binding";
+    @Nonnull @NotEmpty public static final String SAML20CB_NS = "urn:oasis:names:tc:SAML:protocol:ext:channel-binding";
 
     /** SAML 2.0 Channel Binding Extensions QName prefix. */
-    @Nonnull public static final String SAML20CB_PREFIX = "cb";
+    @Nonnull @NotEmpty public static final String SAML20CB_PREFIX = "cb";
     
     /** SAML 2.0 DCE PAC Attribute Profile schema Id. */
-    @Nonnull public static final String SAML20DCE_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-dce-2.0.xsd";
+    @Nonnull @NotEmpty public static final String SAML20DCE_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-dce-2.0.xsd";
 
     /** "Strict" SAML 2.0 DCE PAC Attribute Profile schema Id. */
-    @Nonnull public static final String STRICT_SAML20DCE_SCHEMA_LOCATION = SCHEMA_DIR + "strict/saml-schema-dce-2.1.xsd";
+    @Nonnull @NotEmpty public static final String STRICT_SAML20DCE_SCHEMA_LOCATION = SCHEMA_DIR + "strict/saml-schema-dce-2.1.xsd";
 
     /** SAML 2.0 DCE PAC Attribute Profile XML Namespace. */
-    @Nonnull public static final String SAML20DCE_NS = "urn:oasis:names:tc:SAML:2.0:profiles:attribute:DCE";
+    @Nonnull @NotEmpty public static final String SAML20DCE_NS = "urn:oasis:names:tc:SAML:2.0:profiles:attribute:DCE";
 
     /** SAML 2.0 DCE PAC Attribute Profile QName prefix. */
-    @Nonnull public static final String SAML20DCE_PREFIX = "DCE";
+    @Nonnull @NotEmpty public static final String SAML20DCE_PREFIX = "DCE";
 
     /** SAML 2.0 X.500 Attribute Profile schema Id. */
-    @Nonnull public static final String SAML20X500_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-x500-2.0.xsd";
+    @Nonnull @NotEmpty public static final String SAML20X500_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-x500-2.0.xsd";
 
     /** "Strict" SAML 2.0 X.500 Attribute Profile schema Id. */
-    @Nonnull public static final String STRICT_SAML20X500_SCHEMA_LOCATION = SCHEMA_DIR + "strict/saml-schema-x500-2.1.xsd";
+    @Nonnull @NotEmpty public static final String STRICT_SAML20X500_SCHEMA_LOCATION = SCHEMA_DIR + "strict/saml-schema-x500-2.1.xsd";
 
     /** SAML 2.0 X.500 Attribute Profile XML Namespace. */
-    @Nonnull public static final String SAML20X500_NS = "urn:oasis:names:tc:SAML:2.0:profiles:attribute:X500";
+    @Nonnull @NotEmpty public static final String SAML20X500_NS = "urn:oasis:names:tc:SAML:2.0:profiles:attribute:X500";
 
     /** SAML 2.0 X.500 Attribute Profile QName prefix. */
-    @Nonnull public static final String SAML20X500_PREFIX = "x500";
+    @Nonnull @NotEmpty public static final String SAML20X500_PREFIX = "x500";
 
     /** SAML 2.0 XACML Attribute Profile schema Id. */
-    @Nonnull public static final String SAML20XACML_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-xacml-2.0.xsd";
+    @Nonnull @NotEmpty public static final String SAML20XACML_SCHEMA_LOCATION = SCHEMA_DIR + "saml-schema-xacml-2.0.xsd";
 
     /** "Strict" SAML 2.0 XACML Attribute Profile schema Id. */
-    @Nonnull public static final String STRICT_SAML20XACML_SCHEMA_LOCATION = SCHEMA_DIR + "strict/saml-schema-xacml-2.1.xsd";
+    @Nonnull @NotEmpty public static final String STRICT_SAML20XACML_SCHEMA_LOCATION = SCHEMA_DIR + "strict/saml-schema-xacml-2.1.xsd";
 
     /** SAML 2.0 XACML Attribute Profile XML Namespace. */
-    @Nonnull public static final String SAML20XACML_NS = "urn:oasis:names:tc:SAML:2.0:profiles:attribute:XACML";
+    @Nonnull @NotEmpty public static final String SAML20XACML_NS = "urn:oasis:names:tc:SAML:2.0:profiles:attribute:XACML";
 
     /** SAML 2.0 XACML Attribute Profile QName prefix. */
-    @Nonnull public static final String SAML20XACML_PREFIX = "xacmlprof";
+    @Nonnull @NotEmpty public static final String SAML20XACML_PREFIX = "xacmlprof";
 
     /** SAML Identity Provider Discovery Protocol and Profile XML Schema Id. */
-    @Nonnull public static final String SAML_IDP_DISCO_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml-idp-discovery.xsd";
+    @Nonnull @NotEmpty public static final String SAML_IDP_DISCO_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml-idp-discovery.xsd";
 
     /** SAML Identity Provider Discovery Protocol and Profile XML Namespace. */
-    @Nonnull public static final String SAML_IDP_DISCO_NS = "urn:oasis:names:tc:SAML:profiles:SSO:idp-discovery-protocol";
+    @Nonnull @NotEmpty public static final String SAML_IDP_DISCO_NS = "urn:oasis:names:tc:SAML:profiles:SSO:idp-discovery-protocol";
 
     /** SAML Identity Provider Discovery Protocol and Profile QName prefix. */
-    @Nonnull public static final String SAML_IDP_DISCO_PREFIX = "idpdisco";
+    @Nonnull @NotEmpty public static final String SAML_IDP_DISCO_PREFIX = "idpdisco";
     
     /** SAML 2.0 Enhanced Client GSS-API schema Id. */
-    @Nonnull public static final String SAMLEC_GSS_SCHEMA_LOCATION = SCHEMA_DIR + "ietf-kitten-sasl-saml-ec.xsd";
+    @Nonnull @NotEmpty public static final String SAMLEC_GSS_SCHEMA_LOCATION = SCHEMA_DIR + "ietf-kitten-sasl-saml-ec.xsd";
     
     /** SAML 2.0 Enhanced Client GSS-API XML Namespace. */
-    @Nonnull public static final String SAMLEC_GSS_NS = "urn:ietf:params:xml:ns:samlec";
+    @Nonnull @NotEmpty public static final String SAMLEC_GSS_NS = "urn:ietf:params:xml:ns:samlec";
     
     /** SAML 2.0 Enhanced Client GSS-API QName prefix. */
-    @Nonnull public static final String SAMLEC_GSS_PREFIX = "samlec";
+    @Nonnull @NotEmpty public static final String SAMLEC_GSS_PREFIX = "samlec";
     
     /** URI for SAML 2 Artifact binding. */
-    @Nonnull public static final String SAML2_ARTIFACT_BINDING_URI = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact";
+    @Nonnull @NotEmpty public static final String SAML2_ARTIFACT_BINDING_URI = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact";
 
     /** URI for SAML 2 POST binding. */
-    @Nonnull public static final String SAML2_POST_BINDING_URI = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST";
+    @Nonnull @NotEmpty public static final String SAML2_POST_BINDING_URI = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST";
 
     /** URI for SAML 2 POST-SimpleSign binding. */
-    @Nonnull public static final String SAML2_POST_SIMPLE_SIGN_BINDING_URI =
+    @Nonnull @NotEmpty public static final String SAML2_POST_SIMPLE_SIGN_BINDING_URI =
             "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign";
 
     /** URI for SAML 2 HTTP redirect binding. */
-    @Nonnull public static final String SAML2_REDIRECT_BINDING_URI = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect";
+    @Nonnull @NotEmpty public static final String SAML2_REDIRECT_BINDING_URI = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect";
 
     /** URI for SAML 2 SOAP binding. */
-    @Nonnull public static final String SAML2_SOAP11_BINDING_URI = "urn:oasis:names:tc:SAML:2.0:bindings:SOAP";
+    @Nonnull @NotEmpty public static final String SAML2_SOAP11_BINDING_URI = "urn:oasis:names:tc:SAML:2.0:bindings:SOAP";
 
     /** URI for SAML 2 PAOS binding. */
-    @Nonnull public static final String SAML2_PAOS_BINDING_URI = "urn:oasis:names:tc:SAML:2.0:bindings:PAOS";
+    @Nonnull @NotEmpty public static final String SAML2_PAOS_BINDING_URI = "urn:oasis:names:tc:SAML:2.0:bindings:PAOS";
     
     /** SAML 2.0 Metadata Profile for Algorithm Support schema Id. */
-    @Nonnull public static final String SAML20ALG_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml-metadata-algsupport-v1.0.xsd";
+    @Nonnull @NotEmpty public static final String SAML20ALG_SCHEMA_LOCATION = SCHEMA_DIR + "sstc-saml-metadata-algsupport-v1.0.xsd";
 
     /** "Strict" SAML 2.0 Metadata Profile for Algorithm Support schema Id. */
-    @Nonnull public static final String STRICT_SAML20ALG_SCHEMA_LOCATION =
+    @Nonnull @NotEmpty public static final String STRICT_SAML20ALG_SCHEMA_LOCATION =
             SCHEMA_DIR + "strict/sstc-saml-metadata-algsupport-v1.1.xsd";
 
     /** SAML 2.0 Metadata Profile for Algorithm Support Namespace. */
-    @Nonnull public static final String SAML20ALG_NS = "urn:oasis:names:tc:SAML:metadata:algsupport";
+    @Nonnull @NotEmpty public static final String SAML20ALG_NS = "urn:oasis:names:tc:SAML:metadata:algsupport";
     
     /** SAML 2.0 Metadata Profile for Algorithm Support QName prefix. */
-    @Nonnull public static final String SAML20ALG_PREFIX = "alg";
+    @Nonnull @NotEmpty public static final String SAML20ALG_PREFIX = "alg";
     
     /** URI for SAML 2 binding URL encoding DEFLATE method. */
-    @Nonnull public static final String SAML2_BINDING_URL_ENCODING_DEFLATE_URI = 
+    @Nonnull @NotEmpty public static final String SAML2_BINDING_URL_ENCODING_DEFLATE_URI = 
             "urn:oasis:names:tc:SAML:2.0:bindings:URL-Encoding:DEFLATE";
 
     /** Constructor. */
     private SAMLConstants() {
 
     }
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/idpdisco/DiscoveryResponse.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/idpdisco/DiscoveryResponse.java
index 60cb96b5b..6f7045de0 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/idpdisco/DiscoveryResponse.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/idpdisco/DiscoveryResponse.java
@@ -23,13 +23,15 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.metadata.IndexedEndpoint;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /** SAML Identity Provider Discovery Protocol DiscoveryResponse. */
 public interface DiscoveryResponse extends IndexedEndpoint {
 
     /** Name of the element inside the Extensions. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "DiscoveryResponse";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "DiscoveryResponse";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML_IDP_DISCO_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML_IDP_DISCO_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml1md/SourceID.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml1md/SourceID.java
index 33b38405b..e09a6af75 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml1md/SourceID.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml1md/SourceID.java
@@ -24,15 +24,17 @@ import org.opensaml.core.xml.schema.XSString;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 1 Metadata extension SourceID.
  */
 public interface SourceID extends SAMLObject, XSString {
     
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SourceID";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SourceID";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML1MD_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1MD_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2aslo/Asynchronous.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2aslo/Asynchronous.java
index 4585c1e64..66bde8cef 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2aslo/Asynchronous.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2aslo/Asynchronous.java
@@ -27,22 +27,24 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Protocol extension Asynchronous.
  */
 public interface Asynchronous extends SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Asynchronous";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Asynchronous";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20PASLO_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20PASLO_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AsynchronousType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AsynchronousType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20PASLO_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20PASLO_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2cb/ChannelBindings.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2cb/ChannelBindings.java
index 8c4f729fd..b61b95d30 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2cb/ChannelBindings.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2cb/ChannelBindings.java
@@ -30,6 +30,8 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.soap.soap11.ActorBearing;
 import org.opensaml.soap.soap11.MustUnderstandBearing;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 
 /**
  * SAML 2.0 Channel Bindings Extensions ChannelBinding element.
@@ -37,21 +39,21 @@ import org.opensaml.soap.soap11.MustUnderstandBearing;
 public interface ChannelBindings extends XSBase64Binary, MustUnderstandBearing, ActorBearing, SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ChannelBindings";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ChannelBindings";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML20CB_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20CB_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "ChannelBindingsType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "ChannelBindingsType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
             new QName(SAMLConstants.SAML20CB_NS, TYPE_LOCAL_NAME, SAMLConstants.SAML20CB_PREFIX);
 
     /** Type attribute name. */
-    @Nonnull public static final String TYPE_ATTRIB_NAME = "Type";
+    @Nonnull @NotEmpty public static final String TYPE_ATTRIB_NAME = "Type";
 
     /**
      * Get the Type attribute value.
@@ -66,4 +68,4 @@ public interface ChannelBindings extends XSBase64Binary, MustUnderstandBearing,
      * @param newType the new Type attribute value
      */
     public void setType(@Nonnull String newType);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2delrestrict/Delegate.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2delrestrict/Delegate.java
index dde6887c4..870e17d11 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2delrestrict/Delegate.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2delrestrict/Delegate.java
@@ -29,34 +29,36 @@ import org.opensaml.saml.saml2.core.BaseID;
 import org.opensaml.saml.saml2.core.EncryptedID;
 import org.opensaml.saml.saml2.core.NameID;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Condition for Delegation Restriction - Delegate element.
  */
 public interface Delegate extends SAMLObject {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Delegate";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Delegate";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
         new QName(SAMLConstants.SAML20DEL_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20DEL_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "DelegateType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "DelegateType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
         new QName(SAMLConstants.SAML20DEL_NS, TYPE_LOCAL_NAME, SAMLConstants.SAML20DEL_PREFIX);
     
     /** DelegationInstant attribute name. */
-    @Nonnull public static final String DELEGATION_INSTANT_ATTRIB_NAME = "DelegationInstant";
+    @Nonnull @NotEmpty public static final String DELEGATION_INSTANT_ATTRIB_NAME = "DelegationInstant";
 
     /** DelegationInstant attribute QName. */
     @Nonnull public static final QName DELEGATION_INSTANT_ATTRIB_QNAME =
             new QName(null, DELEGATION_INSTANT_ATTRIB_NAME, XMLConstants.DEFAULT_NS_PREFIX);
     
     /** ConfirmationMethod attribute name. */
-    @Nonnull public static final String CONFIRMATION_METHOD_ATTRIB_NAME = "ConfirmationMethod";    
+    @Nonnull @NotEmpty public static final String CONFIRMATION_METHOD_ATTRIB_NAME = "ConfirmationMethod";    
 
     /**
      * Gets the BaseID child element of the delegate.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2delrestrict/DelegationRestrictionType.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2delrestrict/DelegationRestrictionType.java
index 6e9916171..449b1b1fd 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2delrestrict/DelegationRestrictionType.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2delrestrict/DelegationRestrictionType.java
@@ -25,13 +25,15 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.core.Condition;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Condition for Delegation Restriction - DelegationRestrictionType complex type.
  */
 public interface DelegationRestrictionType extends Condition {
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "DelegationRestrictionType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "DelegationRestrictionType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/ActionNamespace.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/ActionNamespace.java
index f61528ba1..984b24acc 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/ActionNamespace.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/ActionNamespace.java
@@ -24,15 +24,17 @@ import org.opensaml.core.xml.schema.XSURI;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata extension ActionNamespace.
  */
 public interface ActionNamespace extends XSURI, SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ActionNamespace";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ActionNamespace";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML20MDQUERY_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20MDQUERY_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/AttributeQueryDescriptorType.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/AttributeQueryDescriptorType.java
index d72bbf721..204da605a 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/AttributeQueryDescriptorType.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/AttributeQueryDescriptorType.java
@@ -25,13 +25,15 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.metadata.AttributeConsumingService;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata extension AttributeQueryDescriptorType.
  */
 public interface AttributeQueryDescriptorType extends QueryDescriptorType {
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AttributeQueryDescriptorType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AttributeQueryDescriptorType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MDQUERY_NS, TYPE_LOCAL_NAME,
@@ -43,4 +45,4 @@ public interface AttributeQueryDescriptorType extends QueryDescriptorType {
      * @return the list of attribute consuming service endpoints support by this role
      */
     public List<AttributeConsumingService> getAttributeConsumingServices();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/AuthnQueryDescriptorType.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/AuthnQueryDescriptorType.java
index 0c3b2fdeb..9e938b234 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/AuthnQueryDescriptorType.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/AuthnQueryDescriptorType.java
@@ -22,15 +22,17 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata extension AuthnQueryDescriptorType.
  */
 public interface AuthnQueryDescriptorType extends QueryDescriptorType {
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AuthnQueryDescriptorType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AuthnQueryDescriptorType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MDQUERY_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20MDQUERY_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/AuthzDecisionQueryDescriptorType.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/AuthzDecisionQueryDescriptorType.java
index b379aa2c4..92a0db34f 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/AuthzDecisionQueryDescriptorType.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/AuthzDecisionQueryDescriptorType.java
@@ -24,13 +24,15 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata extension AuthzDecisionQueryDescriptorType.
  */
 public interface AuthzDecisionQueryDescriptorType extends QueryDescriptorType {
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AuthzDecisionQueryDescriptorType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AuthzDecisionQueryDescriptorType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MDQUERY_NS, TYPE_LOCAL_NAME,
@@ -42,4 +44,4 @@ public interface AuthzDecisionQueryDescriptorType extends QueryDescriptorType {
      * @return the list of action namespaces support by this role
      */
     public List<ActionNamespace> getActionNamespaces();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/QueryDescriptorType.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/QueryDescriptorType.java
index 79e50c64c..45a11be16 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/QueryDescriptorType.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdquery/QueryDescriptorType.java
@@ -27,20 +27,22 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.metadata.NameIDFormat;
 import org.opensaml.saml.saml2.metadata.RoleDescriptor;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata extension QueryDescriptorType.
  */
 public interface QueryDescriptorType extends RoleDescriptor {
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "QueryDescriptorType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "QueryDescriptorType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MDQUERY_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20MDQUERY_PREFIX);
     
     /** "WantAssertionSigned" attribute's local name. */
-    @Nonnull public static final String WANT_ASSERTIONS_SIGNED_ATTRIB_NAME = "WantAssertionsSigned";
+    @Nonnull @NotEmpty public static final String WANT_ASSERTIONS_SIGNED_ATTRIB_NAME = "WantAssertionsSigned";
     
     /**
      * Gets whether assertions to this endpoint should be signed.
@@ -76,4 +78,4 @@ public interface QueryDescriptorType extends RoleDescriptor {
      * @return the list of name ID formats supported by this query service
      */
     public List<NameIDFormat> getNameIDFormat();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdreqinit/RequestInitiator.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdreqinit/RequestInitiator.java
index a12b8c59d..f5358d9cd 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdreqinit/RequestInitiator.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdreqinit/RequestInitiator.java
@@ -23,19 +23,21 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.metadata.Endpoint;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Interfaces for SAML 2 Metadata Extension for SSO Service Provider Request Initiation - RequestInitiator element.
  */
 public interface RequestInitiator extends Endpoint {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "RequestInitiator";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "RequestInitiator";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
         new QName(SAMLConstants.SAML20MDRI_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20MDRI_PREFIX);
     
     /** Per the extension specification, the value of the 'Binding' attribute MUST be set to this fixed value. */
-    @Nonnull public static final String REQUIRED_BINDING_VALUE = "urn:oasis:names:tc:SAML:profiles:SSO:request-init";
+    @Nonnull @NotEmpty public static final String REQUIRED_BINDING_VALUE = "urn:oasis:names:tc:SAML:profiles:SSO:request-init";
 
 }
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdrpi/Publication.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdrpi/Publication.java
index 69e52a0fd..9946895c1 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdrpi/Publication.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdrpi/Publication.java
@@ -26,6 +26,8 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Representation of the <code><mdrpi:Publication></code> element.
  * 
@@ -36,14 +38,14 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 public interface Publication extends SAMLObject {
 
     /** Name of the element inside the Extensions. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Publication";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Publication";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MDRPI_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MDRPI_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "PublicationType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "PublicationType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdrpi/PublicationInfo.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdrpi/PublicationInfo.java
index 860decd24..044c6d853 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdrpi/PublicationInfo.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdrpi/PublicationInfo.java
@@ -27,6 +27,8 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Representation of the <code><mdrpi:PublicationInfo></code> element.
  * 
@@ -37,14 +39,14 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 public interface PublicationInfo extends SAMLObject {
 
     /** Name of the element inside the Extensions. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "PublicationInfo";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "PublicationInfo";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MDRPI_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MDRPI_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "PublicationInfoType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "PublicationInfoType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdrpi/PublicationPath.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdrpi/PublicationPath.java
index 451384022..e8406df73 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdrpi/PublicationPath.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdrpi/PublicationPath.java
@@ -25,6 +25,8 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Representation of the <code><mdrpi:PublicationPath></code> element.
  *
@@ -35,14 +37,14 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 public interface PublicationPath extends SAMLObject {
 
     /** Name of the element inside the Extensions. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "PublicationPath";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "PublicationPath";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MDRPI_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MDRPI_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "PublicationPathType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "PublicationPathType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/Description.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/Description.java
index 465ae9391..9a3467e20 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/Description.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/Description.java
@@ -24,6 +24,8 @@ import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.metadata.LocalizedName;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * DisplayName.
  *
@@ -37,10 +39,10 @@ import org.opensaml.saml.saml2.metadata.LocalizedName;
 public interface Description extends LocalizedName, SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Description";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Description";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MDUI_NS, 
             DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20MDUI_PREFIX);
     
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/DiscoHints.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/DiscoHints.java
index a47ca3b2e..e3517b0ea 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/DiscoHints.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/DiscoHints.java
@@ -26,6 +26,8 @@ import org.opensaml.core.xml.XMLObject;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * See IdP Discovery and Login UI Metadata Extension Profile.
  * 
@@ -36,14 +38,14 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 public interface DiscoHints extends SAMLObject {
 
     /** Name of the element inside the Extensions. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "DiscoHints";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "DiscoHints";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML20MDUI_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20MDUI_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "DiscoHintsType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "DiscoHintsType";
            
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
@@ -90,4 +92,4 @@ public interface DiscoHints extends SAMLObject {
      */
     public List <XMLObject> getXMLObjects(QName typeOrName); 
     
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/DisplayName.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/DisplayName.java
index 60bb18132..eab99c0c8 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/DisplayName.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/DisplayName.java
@@ -23,6 +23,8 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.metadata.LocalizedName;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * DisplayName.
  *
@@ -35,10 +37,10 @@ import org.opensaml.saml.saml2.metadata.LocalizedName;
 public interface DisplayName extends LocalizedName {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "DisplayName";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "DisplayName";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML20MDUI_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20MDUI_PREFIX);
     
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/InformationURL.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/InformationURL.java
index 85a6b4fee..8d5698b0f 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/InformationURL.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/InformationURL.java
@@ -23,6 +23,8 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.metadata.LocalizedURI;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * InformationURL.
  *
@@ -36,10 +38,10 @@ import org.opensaml.saml.saml2.metadata.LocalizedURI;
 public interface InformationURL extends LocalizedURI {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "InformationURL";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "InformationURL";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML20MDUI_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20MDUI_PREFIX);
     
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/Keywords.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/Keywords.java
index 3a28c34eb..cff8ca8ac 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/Keywords.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/Keywords.java
@@ -26,6 +26,8 @@ import org.opensaml.core.xml.LangBearing;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * DisplayName.
  *
@@ -39,14 +41,14 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 public interface Keywords extends SAMLObject, LangBearing  {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Keywords";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Keywords";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML20MDUI_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20MDUI_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "KeywordsType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "KeywordsType";
            
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
@@ -66,4 +68,4 @@ public interface Keywords extends SAMLObject, LangBearing  {
      */
     public void setKeywords(List<String> val);
    
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/PrivacyStatementURL.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/PrivacyStatementURL.java
index 24b3f5bab..c374771fe 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/PrivacyStatementURL.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/PrivacyStatementURL.java
@@ -23,6 +23,8 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.metadata.LocalizedURI;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * PrivacyStatementURL.
  *
@@ -36,10 +38,10 @@ import org.opensaml.saml.saml2.metadata.LocalizedURI;
 public interface PrivacyStatementURL extends LocalizedURI {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "PrivacyStatementURL";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "PrivacyStatementURL";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML20MDUI_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20MDUI_PREFIX);
     
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/UIInfo.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/UIInfo.java
index 2fb1a0081..c92b2afb1 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/UIInfo.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/saml2mdui/UIInfo.java
@@ -26,6 +26,8 @@ import org.opensaml.core.xml.XMLObject;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * See IdP Discovery and Login UI Metadata Extension Profile.
  *
@@ -37,14 +39,14 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 public interface UIInfo extends SAMLObject {
 
     /** Name of the element inside the Extensions. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "UIInfo";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "UIInfo";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML20MDUI_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20MDUI_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "UIInfoType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "UIInfoType";
     
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
@@ -142,4 +144,4 @@ public interface UIInfo extends SAMLObject {
      */
     public List <XMLObject> getXMLObjects(QName typeOrName); 
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/samlec/EncType.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/samlec/EncType.java
index 7f782aede..fe71621c1 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/samlec/EncType.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/samlec/EncType.java
@@ -28,6 +28,8 @@ import org.opensaml.core.xml.schema.XSString;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 
 /**
  * SAML-EC GSS-API EncType element.
@@ -35,10 +37,10 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 public interface EncType extends XSString, SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "EncType";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "EncType";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAMLEC_GSS_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAMLEC_GSS_PREFIX);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/samlec/GeneratedKey.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/samlec/GeneratedKey.java
index 2bb24c482..04e14a13b 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/samlec/GeneratedKey.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/samlec/GeneratedKey.java
@@ -30,6 +30,8 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.soap.soap11.ActorBearing;
 import org.opensaml.soap.soap11.MustUnderstandBearing;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 
 /**
  * SAML-EC GSS-API GeneratedKey element.
@@ -37,16 +39,16 @@ import org.opensaml.soap.soap11.MustUnderstandBearing;
 public interface GeneratedKey extends XSBase64Binary, SAMLObject, MustUnderstandBearing, ActorBearing {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "GeneratedKey";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "GeneratedKey";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAMLEC_GSS_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAMLEC_GSS_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "GeneratedKeyType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "GeneratedKeyType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAMLEC_GSS_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAMLEC_GSS_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/samlec/SessionKey.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/samlec/SessionKey.java
index dcc4fc0e5..277997a03 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/samlec/SessionKey.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/samlec/SessionKey.java
@@ -28,6 +28,8 @@ import org.opensaml.soap.soap11.ActorBearing;
 import org.opensaml.soap.soap11.MustUnderstandBearing;
 import org.opensaml.xmlsec.signature.KeyInfo;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 
 /**
  * SAML-EC GSS-API SessionKey element.
@@ -35,21 +37,21 @@ import org.opensaml.xmlsec.signature.KeyInfo;
 public interface SessionKey extends SAMLObject, MustUnderstandBearing, ActorBearing {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SessionKey";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SessionKey";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAMLEC_GSS_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAMLEC_GSS_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "SessionKeyType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "SessionKeyType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAMLEC_GSS_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAMLEC_GSS_PREFIX);
 
     /** Algorithm attribute name. */
-    @Nonnull public static final String ALGORITHM_ATTRIB_NAME = "Algorithm";
+    @Nonnull @NotEmpty public static final String ALGORITHM_ATTRIB_NAME = "Algorithm";
     
     /**
      * Get the session key derivation algorithm.
@@ -85,4 +87,4 @@ public interface SessionKey extends SAMLObject, MustUnderstandBearing, ActorBear
      * @param newKeyInfo the KeyInfo object that describes the session key
      */
     public void setKeyInfo(KeyInfo newKeyInfo);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/samlpthrpty/RespondTo.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/samlpthrpty/RespondTo.java
index 9bbc26377..2029919de 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/samlpthrpty/RespondTo.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/ext/samlpthrpty/RespondTo.java
@@ -24,15 +24,17 @@ import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.core.NameIDType;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Protocol Third-party extension RespondTo.
  */
 public interface RespondTo extends NameIDType, SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "RespondTo";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "RespondTo";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML20PTHRPTY_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20PTHRPTY_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AttributeStatement.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AttributeStatement.java
index 50214922a..53f24b08e 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AttributeStatement.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AttributeStatement.java
@@ -25,20 +25,22 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * This interface defines how the object representing a SAML 1 <code> AttributeStatement </code> element behaves.
  */
 public interface AttributeStatement extends SAMLObject, SubjectStatement {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AttributeStatement";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AttributeStatement";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML1_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AttributeStatementType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AttributeStatementType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AudienceRestrictionCondition.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AudienceRestrictionCondition.java
index c7cfb90c1..e822d6274 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AudienceRestrictionCondition.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AudienceRestrictionCondition.java
@@ -24,6 +24,8 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * This interface describes how ab object representing a SAML1 <code> AudienceRestrictionCondition </code> element will
  * behave.
@@ -31,14 +33,14 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 public interface AudienceRestrictionCondition extends Condition {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AudienceRestrictionCondition";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AudienceRestrictionCondition";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML1_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AudienceRestrictionConditionType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AudienceRestrictionConditionType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
@@ -50,4 +52,4 @@ public interface AudienceRestrictionCondition extends Condition {
      * @return the child Audience elements
      */
     public List<Audience> getAudiences();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AuthenticationQuery.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AuthenticationQuery.java
index f1a4e8c5a..09d26d990 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AuthenticationQuery.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AuthenticationQuery.java
@@ -25,27 +25,29 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Description of the behaviour of the <code> AuthenticationQuery </code> element.
  */
 public interface AuthenticationQuery extends SubjectQuery {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthenticationQuery";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthenticationQuery";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML10P_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1P_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AuthenticationQueryType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AuthenticationQueryType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
             new QName(SAMLConstants.SAML10P_NS, TYPE_LOCAL_NAME, SAMLConstants.SAML1P_PREFIX);
     
     /** AuthenticationMethod attribute name. */
-    @Nonnull public static final String AUTHENTICATIONMETHOD_ATTRIB_NAME = "AuthenticationMethod"; 
+    @Nonnull @NotEmpty public static final String AUTHENTICATIONMETHOD_ATTRIB_NAME = "AuthenticationMethod"; 
 
     /**
      * Get AuthenticationMethod attribute.
@@ -61,4 +63,4 @@ public interface AuthenticationQuery extends SubjectQuery {
      */
     public void setAuthenticationMethod(String authenticationMethod);
     
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AuthorityBinding.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AuthorityBinding.java
index bd4ea2d14..d4bc17f18 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AuthorityBinding.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AuthorityBinding.java
@@ -27,33 +27,35 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Interface to define how a <code>AuthorityBinding</code> element behaves.
  */
 public interface AuthorityBinding extends SAMLObject {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthorityBinding";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthorityBinding";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML1_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AuthorityBindingType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AuthorityBindingType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
             new QName(SAMLConstants.SAML1_NS, TYPE_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
     
     /** Name for the AuthorityKind attribute.  */
-    @Nonnull public static final String AUTHORITYKIND_ATTRIB_NAME = "AuthorityKind";
+    @Nonnull @NotEmpty public static final String AUTHORITYKIND_ATTRIB_NAME = "AuthorityKind";
     
     /** Name for the Location attribute.  */
-    @Nonnull public static final String LOCATION_ATTRIB_NAME = "Location";
+    @Nonnull @NotEmpty public static final String LOCATION_ATTRIB_NAME = "Location";
 
     /** Name for the Binding attribute.  */
-    @Nonnull public static final String BINDING_ATTRIB_NAME = "Binding";
+    @Nonnull @NotEmpty public static final String BINDING_ATTRIB_NAME = "Binding";
 
     /**
      * Get the type of authority described.
@@ -97,4 +99,4 @@ public interface AuthorityBinding extends SAMLObject {
      */
     public void setBinding(String binding);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AuthorizationDecisionQuery.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AuthorizationDecisionQuery.java
index 14627a341..6e0c1b911 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AuthorizationDecisionQuery.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AuthorizationDecisionQuery.java
@@ -27,27 +27,29 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Description of the behaviour of the <code> AuthorizationDecisionQuery </code> element.
  */
 public interface AuthorizationDecisionQuery extends SubjectQuery {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthorizationDecisionQuery";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthorizationDecisionQuery";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML10P_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1P_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AuthorizationDecisionQueryType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AuthorizationDecisionQueryType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
             new QName(SAMLConstants.SAML10P_NS, TYPE_LOCAL_NAME, SAMLConstants.SAML1P_PREFIX);
     
     /** AuthenticationMethod attribute name. */
-    @Nonnull public static final String RESOURCE_ATTRIB_NAME = "Resource"; 
+    @Nonnull @NotEmpty public static final String RESOURCE_ATTRIB_NAME = "Resource"; 
 
     /** 
      * Get Resource attribute.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AuthorizationDecisionStatement.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AuthorizationDecisionStatement.java
index 78df05bc7..707024d47 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AuthorizationDecisionStatement.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/AuthorizationDecisionStatement.java
@@ -25,6 +25,8 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * This interface defines how the object representing a SAML1 <code> AuthorizationDecisionStatement </code> element
  * behaves.
@@ -32,24 +34,24 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 public interface AuthorizationDecisionStatement extends SAMLObject, SubjectStatement {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthorizationDecisionStatement";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthorizationDecisionStatement";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML1_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AuthorizationDecisionStatementType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AuthorizationDecisionStatementType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
             new QName(SAMLConstants.SAML1_NS, TYPE_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
 
     /** Name for Resource attribute. */
-    @Nonnull public static final String RESOURCE_ATTRIB_NAME = "Resource";
+    @Nonnull @NotEmpty public static final String RESOURCE_ATTRIB_NAME = "Resource";
     
     /** Name for Decision attribute. */
-    @Nonnull public static final String DECISION_ATTRIB_NAME = "Decision";
+    @Nonnull @NotEmpty public static final String DECISION_ATTRIB_NAME = "Decision";
     
     /**
      * Get the resource.
@@ -102,4 +104,4 @@ public interface AuthorizationDecisionStatement extends SAMLObject, SubjectState
      */
     public void setEvidence(Evidence evidence) throws IllegalArgumentException;
    
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Condition.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Condition.java
index 2473bd474..befe41547 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Condition.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Condition.java
@@ -27,22 +27,24 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * This interface describes how a object representing a SAML1 <code> Condition </code> element will behave.
  */
 public interface Condition extends SAMLObject {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Condition";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Condition";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML1_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "ConditionAbstractType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "ConditionAbstractType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
             new QName(SAMLConstants.SAML1_NS, TYPE_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/DoNotCacheCondition.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/DoNotCacheCondition.java
index 667289a9a..29884498a 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/DoNotCacheCondition.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/DoNotCacheCondition.java
@@ -22,6 +22,8 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 
 /**
  * This interface describes how ab object representing a SAML1 <code> DoNotCacheCondition </code> element will behave.
@@ -29,16 +31,16 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 public interface DoNotCacheCondition extends Condition {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "DoNotCacheCondition";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "DoNotCacheCondition";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML1_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "DoNotCacheConditionType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "DoNotCacheConditionType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
             new QName(SAMLConstants.SAML1_NS, TYPE_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Evidence.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Evidence.java
index 59ed0f068..4e30627c6 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Evidence.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Evidence.java
@@ -1,5 +1,5 @@
 /*
- * Licensed to the University Corporation for Advanced Internet Development,
+O * Licensed to the University Corporation for Advanced Internet Development,
  * Inc. (UCAID) under one or more contributor license agreements.  See the
  * NOTICE file distributed with this work for additional information regarding
  * copyright ownership. The UCAID licenses this file to You under the Apache
@@ -28,20 +28,22 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Interface describing how a SAML1.1 <code>Evidence</code> element behaves.
  */
 public interface Evidence extends SAMLObject {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Evidence";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Evidence";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML1_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "EvidenceType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "EvidenceType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
@@ -68,4 +70,4 @@ public interface Evidence extends SAMLObject {
      */
     public List<Assertion> getAssertions();
     
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/NameIdentifier.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/NameIdentifier.java
index 2d2dbd335..aa61ccab7 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/NameIdentifier.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/NameIdentifier.java
@@ -24,40 +24,42 @@ import org.opensaml.core.xml.schema.XSString;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /** Interface to define how a NameIdentifier element behaves. */
 public interface NameIdentifier extends SAMLObject, XSString {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "NameIdentifier";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "NameIdentifier";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML1_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML1_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "NameIdentifierType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "NameIdentifierType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
             new QName(SAMLConstants.SAML1_NS, TYPE_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
 
     /** Name for the attribute which defines Name Qualifier. */
-    @Nonnull public static final String NAMEQUALIFIER_ATTRIB_NAME = "NameQualifier";
+    @Nonnull @NotEmpty public static final String NAMEQUALIFIER_ATTRIB_NAME = "NameQualifier";
 
     /** Name for the attribute which defines Name Qualifier. */
-    @Nonnull public static final String FORMAT_ATTRIB_NAME = "Format";
+    @Nonnull @NotEmpty public static final String FORMAT_ATTRIB_NAME = "Format";
 
     /** URI for unspecified name format. */
-    @Nonnull public static final String UNSPECIFIED = "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified";
+    @Nonnull @NotEmpty public static final String UNSPECIFIED = "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified";
 
     /** URI for email name format. */
-    @Nonnull public static final String EMAIL = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress";
+    @Nonnull @NotEmpty public static final String EMAIL = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress";
 
     /** URI for X509 subject name format. */
-    @Nonnull public static final String X509_SUBJECT = "urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName";
+    @Nonnull @NotEmpty public static final String X509_SUBJECT = "urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName";
 
     /** URI for windows domain qualified name name format. */
-    @Nonnull public static final String WIN_DOMAIN_QUALIFIED =
+    @Nonnull @NotEmpty public static final String WIN_DOMAIN_QUALIFIED =
             "urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName";
     
     /**
@@ -88,4 +90,4 @@ public interface NameIdentifier extends SAMLObject, XSString {
      */
     public void setFormat(String format);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Query.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Query.java
index c0439fd73..57784ffdd 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Query.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Query.java
@@ -23,22 +23,24 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * This interface is for the SAML1 <code> Query </code> extention point.
  */
 public interface Query extends SAMLObject {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Query";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Query";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML10P_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1P_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "QueryAbstractType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "QueryAbstractType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
             new QName(SAMLConstants.SAML10P_NS, TYPE_LOCAL_NAME, SAMLConstants.SAML1P_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Request.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Request.java
index ff398b0b1..eaa38bb90 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Request.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Request.java
@@ -24,20 +24,22 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * This interface defines how the SAML1 <code> Request </code> objects behave.
  */
 public interface Request extends RequestAbstractType {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Request";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Request";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML10P_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1P_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "RequestType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "RequestType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/RespondWith.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/RespondWith.java
index 3ab6f9cc4..45f987f74 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/RespondWith.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/RespondWith.java
@@ -28,15 +28,17 @@ import org.opensaml.core.xml.schema.XSQName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * This interface defines how the (deprecated) RespondWith element would behave.
  */
 public interface RespondWith extends SAMLObject, XSQName {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "RespondWith";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "RespondWith";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML10P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML1P_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Response.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Response.java
index 4048faff4..8f45fdd7f 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Response.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Response.java
@@ -24,20 +24,22 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * This interface defines how the object representing a SAML1 <code> Response </code> element behaves.
  */
 public interface Response extends ResponseAbstractType {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Response";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Response";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML10P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML1P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "ResponseAbstractType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "ResponseAbstractType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML10P_NS, TYPE_LOCAL_NAME,
@@ -64,4 +66,4 @@ public interface Response extends ResponseAbstractType {
      */
     public List<Assertion> getAssertions();
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Statement.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Statement.java
index bf5150ac8..ee14a9e6a 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Statement.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Statement.java
@@ -23,22 +23,24 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * This interface defines how the object representing a SAML1 <code> Statement </code> element behaves. 
  */
 public interface Statement extends SAMLObject {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Statement";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Statement";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML1_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "StatementAbstractType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "StatementAbstractType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
             new QName(SAMLConstants.SAML1_NS, TYPE_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Status.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Status.java
index e49d6be73..9949fc122 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Status.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Status.java
@@ -23,20 +23,22 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * This interface defines how the object representing a SAML 1 <code> Status</code> element behaves.
  */
 public interface Status extends SAMLObject {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Status";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Status";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML10P_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1P_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "StatusType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "StatusType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
@@ -83,4 +85,4 @@ public interface Status extends SAMLObject {
      * @param statusDetail object representing the <code>StatusDetail</code> (element)
      */
     public void setStatusDetail(StatusDetail statusDetail);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/StatusCode.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/StatusCode.java
index 8487539a4..03a9070c5 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/StatusCode.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/StatusCode.java
@@ -23,20 +23,22 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * This interface defines how the object representing a SAML 1 <code> StatusCode</code> element behaves.
  */
 public interface StatusCode extends SAMLObject {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "StatusCode";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "StatusCode";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML10P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML1P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "StatusCodeType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "StatusCodeType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML10P_NS, TYPE_LOCAL_NAME,
@@ -80,7 +82,7 @@ public interface StatusCode extends SAMLObject {
             SAMLConstants.SAML1P_PREFIX);
 
     /** Name for the attribute which defines the Value. */
-    @Nonnull public static final String VALUE_ATTRIB_NAME = "Value";
+    @Nonnull @NotEmpty public static final String VALUE_ATTRIB_NAME = "Value";
 
     /**
      * Gets the value of the status code.
@@ -109,4 +111,4 @@ public interface StatusCode extends SAMLObject {
      * @param statusCode second level status code
      */
     public void setStatusCode(StatusCode statusCode);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/StatusDetail.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/StatusDetail.java
index 6640fcf02..2bc0d6b80 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/StatusDetail.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/StatusDetail.java
@@ -27,21 +27,23 @@ import org.opensaml.core.xml.ElementExtensibleXMLObject;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Interface to describe how a <code>StatusDetail</code> element behaves.
  */
 public interface StatusDetail extends SAMLObject, ElementExtensibleXMLObject {
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "StatusDetail";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "StatusDetail";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML10P_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1P_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "StatusDetailType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "StatusDetailType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
             new QName(SAMLConstants.SAML10P_NS, TYPE_LOCAL_NAME, SAMLConstants.SAML1P_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Subject.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Subject.java
index 7e9cacd71..0b6642b91 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Subject.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/Subject.java
@@ -26,19 +26,21 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Interface to describe how the <code> Subject </code> elements work.
  */
 public interface Subject extends SAMLObject {
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Subject";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Subject";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML1_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "SubjectType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "SubjectType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
@@ -72,4 +74,4 @@ public interface Subject extends SAMLObject {
      */
     public void setSubjectConfirmation(SubjectConfirmation subjectConfirmation);
     
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/SubjectConfirmation.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/SubjectConfirmation.java
index 539f90dc7..c3d47febb 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/SubjectConfirmation.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/SubjectConfirmation.java
@@ -31,20 +31,22 @@ import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.xmlsec.signature.KeyInfo;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Interface to define how a SubjectConfirmation element behaves.
  */
 public interface SubjectConfirmation extends SAMLObject {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SubjectConfirmation";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SubjectConfirmation";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML1_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "SubjectConfirmationType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "SubjectConfirmationType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/SubjectLocality.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/SubjectLocality.java
index 50f0c86fe..fc523f0da 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/SubjectLocality.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/SubjectLocality.java
@@ -27,30 +27,32 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Interface to define how a SubjectLocality element behaves.
  */
 public interface SubjectLocality extends SAMLObject {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SubjectLocality";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SubjectLocality";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML1_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML1_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "SubjectLocalityType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "SubjectLocalityType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
             new QName(SAMLConstants.SAML1_NS, TYPE_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
 
     /** Name for the IPAddress attribute. */
-    @Nonnull public static final String IPADDRESS_ATTRIB_NAME = "IPAddress";
+    @Nonnull @NotEmpty public static final String IPADDRESS_ATTRIB_NAME = "IPAddress";
 
     /** Name for the DNSAddress attribute. */
-    @Nonnull public static final String DNSADDRESS_ATTRIB_NAME = "DNSAddress";
+    @Nonnull @NotEmpty public static final String DNSADDRESS_ATTRIB_NAME = "DNSAddress";
 
     /**
      * Gets the IP address of the locality.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/SubjectQuery.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/SubjectQuery.java
index 6eb5aa080..7b47c74a3 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/SubjectQuery.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/SubjectQuery.java
@@ -22,20 +22,22 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * This interface is for the SAML1 <code> SubjectQuery </code> extention point.
  */
 public interface SubjectQuery extends Query {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SubjectQuery";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SubjectQuery";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML10P_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1P_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "SubjectQueryAbstractType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "SubjectQueryAbstractType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
@@ -54,4 +56,4 @@ public interface SubjectQuery extends Query {
      * @param subject the subject
      */
     public void setSubject(Subject subject);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/SubjectStatement.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/SubjectStatement.java
index 8e65ed69d..2c14a54e5 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/SubjectStatement.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/core/SubjectStatement.java
@@ -23,20 +23,22 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Interface to descibe how the anchor point SubjectStatement would work.
  */
 public interface SubjectStatement extends SAMLObject, Statement {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SubjectStatement";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SubjectStatement";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML1_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML1_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "SubjectStatementAbstractType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "SubjectStatementAbstractType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
@@ -55,4 +57,4 @@ public interface SubjectStatement extends SAMLObject, Statement {
      * @param subject the Subject
      */
     public void setSubject(Subject subject);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/assertion/SAML2AssertionValidationParameters.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/assertion/SAML2AssertionValidationParameters.java
index 53ac50aae..f6f8d9df2 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/assertion/SAML2AssertionValidationParameters.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/assertion/SAML2AssertionValidationParameters.java
@@ -22,6 +22,8 @@ import javax.annotation.Nonnull;
 import org.opensaml.saml.saml2.core.AuthnStatement;
 import org.opensaml.saml.saml2.core.SubjectLocality;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Parameter keys used to store and retrieve static and dynamic parameters within a 
  * {@link org.opensaml.saml.common.assertion.ValidationContext}.
@@ -29,140 +31,140 @@ import org.opensaml.saml.saml2.core.SubjectLocality;
 public final class SAML2AssertionValidationParameters {
 
     /** The standard prefix for all SAML 2 parameters defined in this set. */
-    @Nonnull public static final String STD_PREFIX = "saml2";
+    @Nonnull @NotEmpty public static final String STD_PREFIX = "saml2";
     
     /** The standard infix for parameters concerned with subject confirmation. */
-    @Nonnull public static final String SC_INFIX = ".SubjectConfirmation";
+    @Nonnull @NotEmpty public static final String SC_INFIX = ".SubjectConfirmation";
     
     /** The standard infix for parameters concerned with conditions evaluation. */
-    @Nonnull public static final String COND_INFIX = ".Conditions";
+    @Nonnull @NotEmpty public static final String COND_INFIX = ".Conditions";
     
     /** The standard infix for parameters concerned with statement evaluation. */
-    @Nonnull public static final String STMT_INFIX = ".Statement";
+    @Nonnull @NotEmpty public static final String STMT_INFIX = ".Statement";
     
     /**
      * Carries a {@link java.time.Duration} specifying a clock skew value.
      */
-    @Nonnull public static final String CLOCK_SKEW = STD_PREFIX + ".ClockSkew";
+    @Nonnull @NotEmpty public static final String CLOCK_SKEW = STD_PREFIX + ".ClockSkew";
 
     /**
      * Carries a {@link java.time.Duration} specifying a lifetime from 'now' for IssueInstant.
      */
-    @Nonnull public static final String LIFETIME = STD_PREFIX + ".Lifetime";
+    @Nonnull @NotEmpty public static final String LIFETIME = STD_PREFIX + ".Lifetime";
 
     /**
      * Carries the {@link org.opensaml.saml.saml2.core.SubjectConfirmation} that confirmed the subject.
      */
-    @Nonnull public static final String CONFIRMED_SUBJECT_CONFIRMATION = STD_PREFIX + ".ConfirmedSubjectConfirmation";
+    @Nonnull @NotEmpty public static final String CONFIRMED_SUBJECT_CONFIRMATION = STD_PREFIX + ".ConfirmedSubjectConfirmation";
     
     /**
      * Carries a {@link java.util.Set}<code><</code>{@link java.lang.String}<code>></code>
      * whose values are the acceptable 
      * {@link org.opensaml.saml.saml2.core.Issuer} values.
      */
-    @Nonnull public static final String VALID_ISSUERS = STD_PREFIX + ".ValidIssuers";
+    @Nonnull @NotEmpty public static final String VALID_ISSUERS = STD_PREFIX + ".ValidIssuers";
 
     /**
      * Carries a {@link java.lang.Boolean} flag which indicates whether the Assertion is required to be signed.
      */
-    @Nonnull public static final String SIGNATURE_REQUIRED = STD_PREFIX + ".SignatureRequired";
+    @Nonnull @NotEmpty public static final String SIGNATURE_REQUIRED = STD_PREFIX + ".SignatureRequired";
 
     /**
      * Carries a {@link net.shibboleth.shared.resolver.CriteriaSet} which will be used as the 
      * input to a {@link org.opensaml.xmlsec.signature.support.SignatureTrustEngine}.
      */
-    @Nonnull public static final String SIGNATURE_VALIDATION_CRITERIA_SET = STD_PREFIX + ".SignatureValidationCriteriaSet";
+    @Nonnull @NotEmpty public static final String SIGNATURE_VALIDATION_CRITERIA_SET = STD_PREFIX + ".SignatureValidationCriteriaSet";
 
     /**
      * Carries a {@link org.opensaml.xmlsec.signature.support.SignatureTrustEngine} which will be used
      * to validate the Assertion signature.
      */
-    @Nonnull public static final String SIGNATURE_VALIDATION_TRUST_ENGINE = STD_PREFIX + ".SignatureValidationTrustEngine";
+    @Nonnull @NotEmpty public static final String SIGNATURE_VALIDATION_TRUST_ENGINE = STD_PREFIX + ".SignatureValidationTrustEngine";
 
     /**
      * Carries a {@link org.opensaml.xmlsec.signature.support.SignaturePrevalidator} which will be used
      * to pre-validate the Assertion signature.
      * 
      */
-    @Nonnull public static final String SIGNATURE_VALIDATION_PREVALIDATOR = STD_PREFIX + ".SignatureValidationPrevalidator";
+    @Nonnull @NotEmpty public static final String SIGNATURE_VALIDATION_PREVALIDATOR = STD_PREFIX + ".SignatureValidationPrevalidator";
 
     /**
      * Carries a {@link java.lang.Boolean} flag which indicates whether
      * {@link org.opensaml.saml.saml2.core.SubjectConfirmationData} NotBefore is required.
      */
-    @Nonnull public static final String SC_NOT_BEFORE_REQUIRED = STD_PREFIX + SC_INFIX + ".NotBeforeRequired";
+    @Nonnull @NotEmpty public static final String SC_NOT_BEFORE_REQUIRED = STD_PREFIX + SC_INFIX + ".NotBeforeRequired";
     
     /**
      * Carries a {@link java.lang.Boolean} flag which indicates whether
      * {@link org.opensaml.saml.saml2.core.SubjectConfirmationData} NotOnOrAfter is required.
      */
-    @Nonnull public static final String SC_NOT_ON_OR_AFTER_REQUIRED = STD_PREFIX + SC_INFIX + ".NoOnOrAfterRequired";
+    @Nonnull @NotEmpty public static final String SC_NOT_ON_OR_AFTER_REQUIRED = STD_PREFIX + SC_INFIX + ".NoOnOrAfterRequired";
     
     /**
      * Carries a {@link java.lang.Boolean} flag which indicates whether
      * {@link org.opensaml.saml.saml2.core.SubjectConfirmationData} Recipient is required.
      */
-    @Nonnull public static final String SC_RECIPIENT_REQUIRED = STD_PREFIX + SC_INFIX + ".RecipientRequired";
+    @Nonnull @NotEmpty public static final String SC_RECIPIENT_REQUIRED = STD_PREFIX + SC_INFIX + ".RecipientRequired";
     
     /**
      * Carries a {@link java.util.Set}<code><</code>{@link java.lang.String}<code>></code>
      * whose values are the acceptable 
      * {@link org.opensaml.saml.saml2.core.SubjectConfirmationData} recipients.
      */
-    @Nonnull public static final String SC_VALID_RECIPIENTS = STD_PREFIX + SC_INFIX + ".ValidRecipients";
+    @Nonnull @NotEmpty public static final String SC_VALID_RECIPIENTS = STD_PREFIX + SC_INFIX + ".ValidRecipients";
 
     /**
      * Carries a {@link java.lang.Boolean} flag which indicates whether the
      * {@link org.opensaml.saml.saml2.core.SubjectConfirmationData} Address is required.
      */
-    @Nonnull public static final String SC_ADDRESS_REQUIRED = STD_PREFIX + SC_INFIX + ".AddressRequired";
+    @Nonnull @NotEmpty public static final String SC_ADDRESS_REQUIRED = STD_PREFIX + SC_INFIX + ".AddressRequired";
 
     /**
      * Carries a {@link java.lang.Boolean} flag which indicates whether the
      * {@link org.opensaml.saml.saml2.core.SubjectConfirmationData} address should be checked.
      */
-    @Nonnull public static final String SC_CHECK_ADDRESS = STD_PREFIX + SC_INFIX + ".CheckAddress";
+    @Nonnull @NotEmpty public static final String SC_CHECK_ADDRESS = STD_PREFIX + SC_INFIX + ".CheckAddress";
 
     /**
      * Carries a {@link java.util.Set}<code><</code>{@link java.net.InetAddress}<code>></code>
      * whose values are the acceptable 
      * {@link org.opensaml.saml.saml2.core.SubjectConfirmationData} addresses.
      */
-    @Nonnull public static final String SC_VALID_ADDRESSES = STD_PREFIX + SC_INFIX + ".ValidAddresses";
+    @Nonnull @NotEmpty public static final String SC_VALID_ADDRESSES = STD_PREFIX + SC_INFIX + ".ValidAddresses";
     
     /**
      * Carries a {@link java.lang.Boolean} flag which indicates whether
      * {@link org.opensaml.saml.saml2.core.SubjectConfirmationData} InResponseTo is required.
      */
-    @Nonnull public static final String SC_IN_RESPONSE_TO_REQUIRED = STD_PREFIX + SC_INFIX + ".InResponseToRequired";
+    @Nonnull @NotEmpty public static final String SC_IN_RESPONSE_TO_REQUIRED = STD_PREFIX + SC_INFIX + ".InResponseToRequired";
     
     /**
      * Carries a {@link java.lang.String} whose value is the acceptable 
      * {@link org.opensaml.saml.saml2.core.SubjectConfirmationData} InResponseTo.
      */
-    @Nonnull public static final String SC_VALID_IN_RESPONSE_TO = STD_PREFIX + SC_INFIX + ".ValidInResponseTo";
+    @Nonnull @NotEmpty public static final String SC_VALID_IN_RESPONSE_TO = STD_PREFIX + SC_INFIX + ".ValidInResponseTo";
     
     /**
      * Carries the {@link java.security.PublicKey} used by the presenter.
      */
-    @Nonnull public static final String SC_HOK_PRESENTER_KEY = STD_PREFIX + SC_INFIX + ".HoK.PresenterKey";
+    @Nonnull @NotEmpty public static final String SC_HOK_PRESENTER_KEY = STD_PREFIX + SC_INFIX + ".HoK.PresenterKey";
 
     /**
      * Carries the {@link java.security.cert.X509Certificate} used by the presenter.
      */
-    @Nonnull public static final String SC_HOK_PRESENTER_CERT = STD_PREFIX + SC_INFIX + ".HoK.PresenterCertificate";
+    @Nonnull @NotEmpty public static final String SC_HOK_PRESENTER_CERT = STD_PREFIX + SC_INFIX + ".HoK.PresenterCertificate";
 
     /**
      * Carries the {@link org.opensaml.xmlsec.signature.KeyInfo} that successfully confirmed the subject 
      * via holder-of-key subject confirmation.
      */
-    @Nonnull public static final String SC_HOK_CONFIRMED_KEYINFO = STD_PREFIX + SC_INFIX + ".HoK.ConfirmedKeyInfo";
+    @Nonnull @NotEmpty public static final String SC_HOK_CONFIRMED_KEYINFO = STD_PREFIX + SC_INFIX + ".HoK.ConfirmedKeyInfo";
 
     /**
      * Carries a {@link java.util.Set}<code><</code>{@link javax.xml.namespace.QName}<code>></code>
      * of required conditions which must be present in the assertion.
      */
-    @Nonnull public static final String COND_REQUIRED_CONDITIONS = STD_PREFIX + COND_INFIX + ".RequiredConditions";
+    @Nonnull @NotEmpty public static final String COND_REQUIRED_CONDITIONS = STD_PREFIX + COND_INFIX + ".RequiredConditions";
 
     /**
      * Carries a {@link java.util.Set}<code><</code>{@link java.lang.String}<code>></code>
@@ -170,20 +172,20 @@ public final class SAML2AssertionValidationParameters {
      * {@link org.opensaml.saml.saml2.core.AudienceRestriction} {@link org.opensaml.saml.saml2.core.Audience}
      * values for evaluating the Assertion.
      */
-    @Nonnull public static final String COND_VALID_AUDIENCES = STD_PREFIX + COND_INFIX + ".ValidAudiences";
+    @Nonnull @NotEmpty public static final String COND_VALID_AUDIENCES = STD_PREFIX + COND_INFIX + ".ValidAudiences";
 
     /**
      * Carries a {@link java.time.Duration} representing the per-invocation value for the Assertion 
      * replay cache expiration.
      */
-    @Nonnull public static final String COND_ONE_TIME_USE_EXPIRES = STD_PREFIX + COND_INFIX + ".OneTimeUseExpires";
+    @Nonnull @NotEmpty public static final String COND_ONE_TIME_USE_EXPIRES = STD_PREFIX + COND_INFIX + ".OneTimeUseExpires";
 
     /**
      * Carries a {@link java.lang.Boolean} flag which indicates whether the
      * Address attribute of the {@link SubjectLocality} of an {@link AuthnStatement}
      * should be checked.
      */
-    @Nonnull public static final String STMT_AUTHN_CHECK_ADDRESS = 
+    @Nonnull @NotEmpty public static final String STMT_AUTHN_CHECK_ADDRESS = 
             STD_PREFIX + STMT_INFIX + ".Authn.SubjectLocality.CheckAddress";
 
     /**
@@ -191,14 +193,14 @@ public final class SAML2AssertionValidationParameters {
      * whose values are the acceptable 
      * values for the Address attribute of the {@link SubjectLocality} of an {@link AuthnStatement}.
      */
-    @Nonnull public static final String STMT_AUTHN_VALID_ADDRESSES = 
+    @Nonnull @NotEmpty public static final String STMT_AUTHN_VALID_ADDRESSES = 
             STD_PREFIX + STMT_INFIX + ".Authn.SubjectLocality.ValidAddresses";
     
     /**
      * Carries a {@link java.time.Duration} used to evaluate the 
      * allowed value of an AuthnInstant attribute of an {@link AuthnStatement}.
      */
-    @Nonnull public static final String STMT_AUTHN_MAX_TIME = STD_PREFIX + STMT_INFIX + ".Authn.MaxTimeSinceAuthn";
+    @Nonnull @NotEmpty public static final String STMT_AUTHN_MAX_TIME = STD_PREFIX + STMT_INFIX + ".Authn.MaxTimeSinceAuthn";
     
     
     /** Constructor. */
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Advice.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Advice.java
index a735d81b4..c3ee11bf9 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Advice.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Advice.java
@@ -26,20 +26,22 @@ import org.opensaml.core.xml.XMLObject;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core Advice.
  */
 public interface Advice extends SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Advice";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Advice";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AdviceType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AdviceType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME,
@@ -87,4 +89,4 @@ public interface Advice extends SAMLObject {
      * @return the list of EncryptedAssertions used as advice
      */
     public List<EncryptedAssertion> getEncryptedAssertions();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/ArtifactResolve.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/ArtifactResolve.java
index acb9a0596..d204696ad 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/ArtifactResolve.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/ArtifactResolve.java
@@ -26,20 +26,22 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core ArtifactResolve.
  */
 public interface ArtifactResolve extends RequestAbstractType {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ArtifactResolve";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ArtifactResolve";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "ArtifactResolveType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "ArtifactResolveType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/ArtifactResponse.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/ArtifactResponse.java
index 74f121919..04b518f59 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/ArtifactResponse.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/ArtifactResponse.java
@@ -27,20 +27,22 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core ArtifactResponse.
  */
 public interface ArtifactResponse extends StatusResponseType {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ArtifactResponse";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ArtifactResponse";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "ArtifactResponseType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "ArtifactResponseType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
@@ -59,4 +61,4 @@ public interface ArtifactResponse extends StatusResponseType {
      * @param message protocol message from the artifact response
      */
     public void setMessage(SAMLObject message);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AssertionIDRequest.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AssertionIDRequest.java
index f26022fd3..f3ee3e210 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AssertionIDRequest.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AssertionIDRequest.java
@@ -28,13 +28,15 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core AssertionIDRequest.
  */
 public interface AssertionIDRequest extends RequestAbstractType {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AssertionIDRequest";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AssertionIDRequest";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
@@ -46,4 +48,4 @@ public interface AssertionIDRequest extends RequestAbstractType {
      * @return the list of child AssertionIDRef's
      */
     public List<AssertionIDRef> getAssertionIDRefs();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AttributeQuery.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AttributeQuery.java
index f26a9c2a4..b3de6a66f 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AttributeQuery.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AttributeQuery.java
@@ -28,20 +28,22 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 AttributeQuery.
  */
 public interface AttributeQuery extends SubjectQuery {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AttributeQuery";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AttributeQuery";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AttributeQueryType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AttributeQueryType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
@@ -53,4 +55,4 @@ public interface AttributeQuery extends SubjectQuery {
      * @return the list of Attributes of this query
      */
     public List<Attribute> getAttributes();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AttributeStatement.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AttributeStatement.java
index c6908367a..a12297530 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AttributeStatement.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AttributeStatement.java
@@ -24,20 +24,22 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core AttributeStatement.
  */
 public interface AttributeStatement extends Statement {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AttributeStatement";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AttributeStatement";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = 
         new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AttributeStatementType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AttributeStatementType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = 
@@ -57,4 +59,4 @@ public interface AttributeStatement extends Statement {
      */
     public List<EncryptedAttribute> getEncryptedAttributes();
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AudienceRestriction.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AudienceRestriction.java
index 023b6221e..b9a8bdb3a 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AudienceRestriction.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AudienceRestriction.java
@@ -24,20 +24,22 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core AudienceRestriction.
  */
 public interface AudienceRestriction extends Condition {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AudienceRestriction";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AudienceRestriction";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AudienceRestrictionType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AudienceRestrictionType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME,
@@ -49,4 +51,4 @@ public interface AudienceRestriction extends Condition {
      * @return the list of audiences for the assertion
      */
     public List<Audience> getAudiences();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnContext.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnContext.java
index 572da6d00..5918652fc 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnContext.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnContext.java
@@ -25,100 +25,102 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /** SAML 2.0 Core AuthnContext. */
 public interface AuthnContext extends SAMLObject {
 
     /** Local Name of AuthnContext. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthnContext";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthnContext";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AuthnContextType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AuthnContextType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** URI for Internet Protocol authentication context. */
-    @Nonnull public static final String IP_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:InternetProtocol";
+    @Nonnull @NotEmpty public static final String IP_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:InternetProtocol";
 
     /** URI for Internet Protocol Password authentication context. */
-    @Nonnull public static final String IP_PASSWORD_AUTHN_CTX =
+    @Nonnull @NotEmpty public static final String IP_PASSWORD_AUTHN_CTX =
             "urn:oasis:names:tc:SAML:2.0:ac:classes:InternetProtocolPassword";
 
     /** URI for Kerberos authentication context. */
-    @Nonnull public static final String KERBEROS_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos";
+    @Nonnull @NotEmpty public static final String KERBEROS_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos";
 
     /** URI for Mobile One Factor Unregistered authentication context. */
-    @Nonnull public static final String MOFU_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:MobileOneFactorUnregistered";
+    @Nonnull @NotEmpty public static final String MOFU_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:MobileOneFactorUnregistered";
 
     /** URI for Mobile Two Factor Unregistered authentication context. */
-    @Nonnull public static final String MTFU_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:MobileTwoFactorUnregistered";
+    @Nonnull @NotEmpty public static final String MTFU_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:MobileTwoFactorUnregistered";
 
     /** URI for Mobile One Factor Contract authentication context. */
-    @Nonnull public static final String MOFC_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:MobileOneFactorContract";
+    @Nonnull @NotEmpty public static final String MOFC_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:MobileOneFactorContract";
 
     /** URI for Mobile Two Factor Contract authentication context. */
-    @Nonnull public static final String MTFC_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:MobileTwoFactorContract";
+    @Nonnull @NotEmpty public static final String MTFC_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:MobileTwoFactorContract";
 
     /** URI for Password authentication context. */
-    @Nonnull public static final String PASSWORD_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:Password";
+    @Nonnull @NotEmpty public static final String PASSWORD_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:Password";
 
     /** URI for Password Protected Transport authentication context. */
-    @Nonnull public static final String PPT_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport";
+    @Nonnull @NotEmpty public static final String PPT_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport";
 
     /** URI for Previous Session authentication context. */
-    @Nonnull public static final String PREVIOUS_SESSION_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:PreviousSession";
+    @Nonnull @NotEmpty public static final String PREVIOUS_SESSION_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:PreviousSession";
 
     /** URI for X509 Public Key authentication context. */
-    @Nonnull public static final String X509_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:X509";
+    @Nonnull @NotEmpty public static final String X509_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:X509";
 
     /** URI for PGP authentication context. */
-    @Nonnull public static final String PGP_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:PGP";
+    @Nonnull @NotEmpty public static final String PGP_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:PGP";
 
     /** URI for SPKI authentication context. */
-    @Nonnull public static final String SPKI_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:SPKI";
+    @Nonnull @NotEmpty public static final String SPKI_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:SPKI";
 
     /** URI for XML Digital Signature authentication context. */
-    @Nonnull public static final String XML_DSIG_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:XMLDSig";
+    @Nonnull @NotEmpty public static final String XML_DSIG_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:XMLDSig";
 
     /** URI for Smart Card authentication context. */
-    @Nonnull public static final String SMARTCARD_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:Smartcard";
+    @Nonnull @NotEmpty public static final String SMARTCARD_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:Smartcard";
 
     /** URI for Smart Card PKI authentication context. */
-    @Nonnull public static final String SMARTCARD_PKI_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI";
+    @Nonnull @NotEmpty public static final String SMARTCARD_PKI_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:SmartcardPKI";
 
     /** URI for Software PKU authentication context. */
-    @Nonnull public static final String SOFTWARE_PKI_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:SoftwarePKI";
+    @Nonnull @NotEmpty public static final String SOFTWARE_PKI_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:SoftwarePKI";
 
     /** URI for Telephony authentication context. */
-    @Nonnull public static final String TELEPHONY_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:Telephony";
+    @Nonnull @NotEmpty public static final String TELEPHONY_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:Telephony";
 
     /** URI for Nomadic Telephony authentication context. */
-    @Nonnull public static final String NOMAD_TELEPHONY_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:NomadTelephony";
+    @Nonnull @NotEmpty public static final String NOMAD_TELEPHONY_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:NomadTelephony";
 
     /** URI for Personalized Telephony authentication context. */
-    @Nonnull public static final String PERSONAL_TELEPHONY_AUTHN_CTX =
+    @Nonnull @NotEmpty public static final String PERSONAL_TELEPHONY_AUTHN_CTX =
             "urn:oasis:names:tc:SAML:2.0:ac:classes:PersonalTelephony";
 
     /** URI for Authenticated Telephony authentication context. */
-    @Nonnull public static final String AUTHENTICATED_TELEPHONY_AUTHN_CTX =
+    @Nonnull @NotEmpty public static final String AUTHENTICATED_TELEPHONY_AUTHN_CTX =
             "urn:oasis:names:tc:SAML:2.0:ac:classes:AuthenticatedTelephony";
 
     /** URI for Secure Remote Password authentication context. */
-    @Nonnull public static final String SRP_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:SecureRemotePassword";
+    @Nonnull @NotEmpty public static final String SRP_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:SecureRemotePassword";
 
     /** URI for SSL/TLS Client authentication context. */
-    @Nonnull public static final String TLS_CLIENT_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:TLSClient";
+    @Nonnull @NotEmpty public static final String TLS_CLIENT_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:TLSClient";
 
     /** URI for Time Synchronized Token authentication context. */
-    @Nonnull public static final String TIME_SYNC_TOKEN_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:TimeSyncToken";
+    @Nonnull @NotEmpty public static final String TIME_SYNC_TOKEN_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:TimeSyncToken";
 
     /** URI for unspecified authentication context. */
-    @Nonnull public static final String UNSPECIFIED_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified";
+    @Nonnull @NotEmpty public static final String UNSPECIFIED_AUTHN_CTX = "urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified";
 
     /**
      * Gets the URI identifying the Context Class of this Authentication Context.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnContextDecl.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnContextDecl.java
index e6261cf9b..9b5b304be 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnContextDecl.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnContextDecl.java
@@ -24,13 +24,15 @@ import org.opensaml.core.xml.schema.XSAny;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core AuthnContextDecl.
  */
 public interface AuthnContextDecl extends SAMLObject, XSAny {
 
     /** Local Name of AuthnContextDecl. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthnContextDecl";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthnContextDecl";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = 
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnQuery.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnQuery.java
index c43462a28..c691f005b 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnQuery.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnQuery.java
@@ -22,27 +22,29 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 AuthnQuery.
  */
 public interface AuthnQuery extends SubjectQuery {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthnQuery";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthnQuery";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = 
         new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20P_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AuthnQueryType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AuthnQueryType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = 
         new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME, SAMLConstants.SAML20P_PREFIX);
     
     /** SessionIndex attribute name. */
-    @Nonnull public static final String SESSION_INDEX_ATTRIB_NAME = "SessionIndex";
+    @Nonnull @NotEmpty public static final String SESSION_INDEX_ATTRIB_NAME = "SessionIndex";
     
     /**
      * Gets the SessionIndex of this request.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnRequest.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnRequest.java
index 7d50fd512..a960a91bd 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnRequest.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnRequest.java
@@ -23,45 +23,47 @@ import javax.xml.namespace.QName;
 import org.opensaml.core.xml.schema.XSBooleanValue;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core AuthnRequest.
  */
 public interface AuthnRequest extends RequestAbstractType {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthnRequest";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthnRequest";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AuthnRequestType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AuthnRequestType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** ForceAuthn attribute name. */
-    @Nonnull public static final String FORCE_AUTHN_ATTRIB_NAME = "ForceAuthn";
+    @Nonnull @NotEmpty public static final String FORCE_AUTHN_ATTRIB_NAME = "ForceAuthn";
 
     /** IsPassive attribute name. */
-    @Nonnull public static final String IS_PASSIVE_ATTRIB_NAME = "IsPassive";
+    @Nonnull @NotEmpty public static final String IS_PASSIVE_ATTRIB_NAME = "IsPassive";
 
     /** ProtocolBinding attribute name. */
-    @Nonnull public static final String PROTOCOL_BINDING_ATTRIB_NAME = "ProtocolBinding";
+    @Nonnull @NotEmpty public static final String PROTOCOL_BINDING_ATTRIB_NAME = "ProtocolBinding";
 
     /** AssertionConsumerServiceIndex attribute name. */
-    @Nonnull public static final String ASSERTION_CONSUMER_SERVICE_INDEX_ATTRIB_NAME = "AssertionConsumerServiceIndex";
+    @Nonnull @NotEmpty public static final String ASSERTION_CONSUMER_SERVICE_INDEX_ATTRIB_NAME = "AssertionConsumerServiceIndex";
 
     /** AssertionConsumerServiceURL attribute name. */
-    @Nonnull public static final String ASSERTION_CONSUMER_SERVICE_URL_ATTRIB_NAME = "AssertionConsumerServiceURL";
+    @Nonnull @NotEmpty public static final String ASSERTION_CONSUMER_SERVICE_URL_ATTRIB_NAME = "AssertionConsumerServiceURL";
 
     /** AttributeConsumingServiceIndex attribute name. */
-    @Nonnull public static final String ATTRIBUTE_CONSUMING_SERVICE_INDEX_ATTRIB_NAME = "AttributeConsumingServiceIndex";
+    @Nonnull @NotEmpty public static final String ATTRIBUTE_CONSUMING_SERVICE_INDEX_ATTRIB_NAME = "AttributeConsumingServiceIndex";
 
     /** ProviderName attribute name. */
-    @Nonnull public static final String PROVIDER_NAME_ATTRIB_NAME = "ProviderName";
+    @Nonnull @NotEmpty public static final String PROVIDER_NAME_ATTRIB_NAME = "ProviderName";
 
     /**
      * Gets whether the IdP should force the user to reauthenticate.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthzDecisionQuery.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthzDecisionQuery.java
index 0339bec27..6afc723c9 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthzDecisionQuery.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthzDecisionQuery.java
@@ -28,27 +28,29 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 AuthzDecisionQuery.
  */
 public interface AuthzDecisionQuery extends SubjectQuery {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthzDecisionQuery";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthzDecisionQuery";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AuthzDecisionQueryType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AuthzDecisionQueryType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Resource attribute name. */
-    @Nonnull public static final String RESOURCE_ATTRIB_NAME = "Resource";
+    @Nonnull @NotEmpty public static final String RESOURCE_ATTRIB_NAME = "Resource";
 
     /**
      * Gets the Resource attrib value of this query.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthzDecisionStatement.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthzDecisionStatement.java
index eb3cc4bfe..d0e8f1340 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthzDecisionStatement.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthzDecisionStatement.java
@@ -24,30 +24,32 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core AuthzDecisionStatement.
  */
 public interface AuthzDecisionStatement extends Statement {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthzDecisionStatement";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthzDecisionStatement";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AuthzDecisionStatementType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AuthzDecisionStatementType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** Resource attribute name. */
-    @Nonnull public static final String RESOURCE_ATTRIB_NAME = "Resource";
+    @Nonnull @NotEmpty public static final String RESOURCE_ATTRIB_NAME = "Resource";
 
     /** Decision attribute name. */
-    @Nonnull public static final String DECISION_ATTRIB_NAME = "Decision";
+    @Nonnull @NotEmpty public static final String DECISION_ATTRIB_NAME = "Decision";
 
     /**
      * Get URI of the resource to which authorization is saught.
@@ -97,4 +99,4 @@ public interface AuthzDecisionStatement extends Statement {
      * @param newEvidence the SAML assertion the authority relied on when making the authorization decision
      */
     public void setEvidence(Evidence newEvidence);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/BaseID.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/BaseID.java
index aef16cd5c..5c16a48e1 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/BaseID.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/BaseID.java
@@ -23,30 +23,32 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core BaseID.
  */
 public interface BaseID extends SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "BaseID";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "BaseID";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "BaseIDAbstractType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "BaseIDAbstractType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** NameQualifier attribute name. */
-    @Nonnull public static final String NAME_QUALIFIER_ATTRIB_NAME = "NameQualifier";
+    @Nonnull @NotEmpty public static final String NAME_QUALIFIER_ATTRIB_NAME = "NameQualifier";
 
     /** SPNameQualifier attribute name. */
-    @Nonnull public static final String SP_NAME_QUALIFIER_ATTRIB_NAME = "SPNameQualifier";
+    @Nonnull @NotEmpty public static final String SP_NAME_QUALIFIER_ATTRIB_NAME = "SPNameQualifier";
 
     /**
      * Gets the NameQualifier value.
@@ -75,4 +77,4 @@ public interface BaseID extends SAMLObject {
      * @param newSPNameQualifier the SPNameQualifier value
      */
     public void setSPNameQualifier(String newSPNameQualifier);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Condition.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Condition.java
index 7e979c4b9..a04b39ece 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Condition.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Condition.java
@@ -23,22 +23,24 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core Condition.
  */
 public interface Condition extends SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Condition";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Condition";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "ConditionAbstractType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "ConditionAbstractType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/EncryptedAssertion.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/EncryptedAssertion.java
index 20acf2bcd..db04937d7 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/EncryptedAssertion.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/EncryptedAssertion.java
@@ -22,16 +22,18 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core EncryptedAssertion.
  */
 public interface EncryptedAssertion extends EncryptedElementType, Evidentiary {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "EncryptedAssertion";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "EncryptedAssertion";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/EncryptedAttribute.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/EncryptedAttribute.java
index 3a0a864d5..47f262c4e 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/EncryptedAttribute.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/EncryptedAttribute.java
@@ -22,16 +22,18 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core EncryptedAttribute.
  */
 public interface EncryptedAttribute extends EncryptedElementType {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "EncryptedAttribute";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "EncryptedAttribute";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =  
         new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20_PREFIX);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/EncryptedElementType.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/EncryptedElementType.java
index d66c337d4..a03d9a451 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/EncryptedElementType.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/EncryptedElementType.java
@@ -27,13 +27,15 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.xmlsec.encryption.EncryptedData;
 import org.opensaml.xmlsec.encryption.EncryptedKey;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core EncryptedElementType.
  */
 public interface EncryptedElementType extends SAMLObject {
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "EncryptedElementType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "EncryptedElementType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = 
@@ -60,4 +62,4 @@ public interface EncryptedElementType extends SAMLObject {
      */
     public List<EncryptedKey> getEncryptedKeys();
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/EncryptedID.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/EncryptedID.java
index 0277f0848..22ec3fd68 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/EncryptedID.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/EncryptedID.java
@@ -22,16 +22,18 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core EncryptedID.
  */
 public interface EncryptedID extends EncryptedElementType {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "EncryptedID";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "EncryptedID";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =  
         new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20_PREFIX);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Evidence.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Evidence.java
index c70dab11c..9ef2acb52 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Evidence.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Evidence.java
@@ -25,20 +25,22 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core Evidence.
  */
 public interface Evidence extends SAMLObject {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Evidence";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Evidence";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = 
         new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "EvidenceType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "EvidenceType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = 
@@ -78,4 +80,4 @@ public interface Evidence extends SAMLObject {
      * @return the list of Evidentiary objects used as evidence
      */
     public List<Evidentiary> getEvidence();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Extensions.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Extensions.java
index 085290d0c..f702170b6 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Extensions.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Extensions.java
@@ -24,23 +24,25 @@ import org.opensaml.core.xml.ElementExtensibleXMLObject;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core Extensions.
  */
 public interface Extensions extends SAMLObject, ElementExtensibleXMLObject {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Extensions";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Extensions";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "ExtensionsType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "ExtensionsType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
     
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/IDPEntry.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/IDPEntry.java
index dfd09759a..ebf9e662d 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/IDPEntry.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/IDPEntry.java
@@ -23,33 +23,35 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core IDPEntry.
  */
 public interface IDPEntry extends SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "IDPEntry";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "IDPEntry";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "IDPEntryType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "IDPEntryType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** ProviderID attribute name. */
-    @Nonnull public static final String PROVIDER_ID_ATTRIB_NAME = "ProviderID";
+    @Nonnull @NotEmpty public static final String PROVIDER_ID_ATTRIB_NAME = "ProviderID";
 
     /** Name attribute name. */
-    @Nonnull public static final String NAME_ATTRIB_NAME = "Name";
+    @Nonnull @NotEmpty public static final String NAME_ATTRIB_NAME = "Name";
 
     /** Loc attribute name. */
-    @Nonnull public static final String LOC_ATTRIB_NAME = "Loc";
+    @Nonnull @NotEmpty public static final String LOC_ATTRIB_NAME = "Loc";
 
     /**
      * Gets ProviderID URI.
@@ -93,4 +95,4 @@ public interface IDPEntry extends SAMLObject {
      */
     public void setLoc(String newLoc);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/IDPList.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/IDPList.java
index c85ce50ff..7a00e71d5 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/IDPList.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/IDPList.java
@@ -29,20 +29,22 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core IDPList.
  */
 public interface IDPList extends SAMLObject {
 
     /** Element Local Name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "IDPList";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "IDPList";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "IDPListType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "IDPListType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
@@ -68,4 +70,4 @@ public interface IDPList extends SAMLObject {
      * @param newGetComplete the new GetComplete URI
      */
     public void setGetComplete(GetComplete newGetComplete);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Issuer.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Issuer.java
index 13bcb7855..5e76e1c06 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Issuer.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Issuer.java
@@ -23,22 +23,24 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core Issuer.
  */
 public interface Issuer extends NameIDType, SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Issuer";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Issuer";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "IssuerType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "IssuerType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/KeyInfoConfirmationDataType.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/KeyInfoConfirmationDataType.java
index 08aa04574..3d565fab7 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/KeyInfoConfirmationDataType.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/KeyInfoConfirmationDataType.java
@@ -25,13 +25,15 @@ import javax.xml.namespace.QName;
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core KeyInfoConfirmationDataType.
  */
 public interface KeyInfoConfirmationDataType extends SubjectConfirmationData {
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "KeyInfoConfirmationDataType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "KeyInfoConfirmationDataType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME,
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/LogoutResponse.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/LogoutResponse.java
index e1a8ea6c5..6fe419918 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/LogoutResponse.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/LogoutResponse.java
@@ -26,35 +26,37 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core LogoutResponse.
  */
 public interface LogoutResponse extends StatusResponseType {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "LogoutResponse";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "LogoutResponse";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "LogoutResponseType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "LogoutResponseType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** URI for User logout reason. */
-    @Nonnull public static final String USER_LOGOUT_URI = "urn:oasis:names:tc:SAML:2.0:logout:user";
+    @Nonnull @NotEmpty public static final String USER_LOGOUT_URI = "urn:oasis:names:tc:SAML:2.0:logout:user";
 
     /** URI for Admin logout reason. */
-    @Nonnull public static final String ADMIN_LOGOUT_URI = "urn:oasis:names:tc:SAML:2.0:logout:admin";
+    @Nonnull @NotEmpty public static final String ADMIN_LOGOUT_URI = "urn:oasis:names:tc:SAML:2.0:logout:admin";
 
     /** URI for global timeout logout reason. */
-    @Nonnull public static final String GLOBAL_TIMEOUT_URI = "urn:oasis:names:tc:SAML:2.0:logout:global-timeout";
+    @Nonnull @NotEmpty public static final String GLOBAL_TIMEOUT_URI = "urn:oasis:names:tc:SAML:2.0:logout:global-timeout";
 
     /** URI for SP timeout logout reason. */
-    @Nonnull public static final String SP_TIMEOUT_URI = "urn:oasis:names:tc:SAML:2.0:logout:sp-timeout";
+    @Nonnull @NotEmpty public static final String SP_TIMEOUT_URI = "urn:oasis:names:tc:SAML:2.0:logout:sp-timeout";
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/ManageNameIDRequest.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/ManageNameIDRequest.java
index 4f0551c5e..deea05804 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/ManageNameIDRequest.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/ManageNameIDRequest.java
@@ -25,6 +25,8 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 
 /**
  * SAML 2.0 Core ManageNameIDRequest.
@@ -32,14 +34,14 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 public interface ManageNameIDRequest extends RequestAbstractType {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ManageNameIDRequest";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ManageNameIDRequest";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = 
         new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20P_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "ManageNameIDRequestType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "ManageNameIDRequestType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = 
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/ManageNameIDResponse.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/ManageNameIDResponse.java
index d7698b642..a6896a6c0 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/ManageNameIDResponse.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/ManageNameIDResponse.java
@@ -26,22 +26,24 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core ManageNameIDResponse.
  */
 public interface ManageNameIDResponse extends StatusResponseType {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ManageNameIDResponse";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ManageNameIDResponse";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "ManageNameIDResponseType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "ManageNameIDResponseType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NameIDMappingRequest.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NameIDMappingRequest.java
index e4b6ee8af..1fb92f525 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NameIDMappingRequest.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NameIDMappingRequest.java
@@ -25,6 +25,8 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 
 /**
  * SAML 2.0 Core NameIDMappingRequest.
@@ -32,14 +34,14 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 public interface NameIDMappingRequest extends RequestAbstractType {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "NameIDMappingRequest";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "NameIDMappingRequest";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = 
         new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20P_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "NameIDMappingRequestType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "NameIDMappingRequestType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = 
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NameIDMappingResponse.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NameIDMappingResponse.java
index 6997a9794..26aecc052 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NameIDMappingResponse.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NameIDMappingResponse.java
@@ -22,13 +22,15 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core NameIDMappingResponse .
  */
 public interface NameIDMappingResponse extends StatusResponseType {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "NameIDMappingResponse";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "NameIDMappingResponse";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
@@ -68,4 +70,4 @@ public interface NameIDMappingResponse extends StatusResponseType {
      * @param newEncryptedID the new encrypted name identifier of the principal for this response
      */
     public void setEncryptedID(EncryptedID newEncryptedID);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NameIDPolicy.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NameIDPolicy.java
index 4ca75dc72..16e63b8be 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NameIDPolicy.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NameIDPolicy.java
@@ -24,33 +24,35 @@ import org.opensaml.core.xml.schema.XSBooleanValue;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core NameIDPolicy.
  */
 public interface NameIDPolicy extends SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "NameIDPolicy";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "NameIDPolicy";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "NameIDPolicyType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "NameIDPolicyType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Format attribute name. */
-    @Nonnull public static final String FORMAT_ATTRIB_NAME = "Format";
+    @Nonnull @NotEmpty public static final String FORMAT_ATTRIB_NAME = "Format";
 
     /** SPNameQualifier attribute name. */
-    @Nonnull public static final String SP_NAME_QUALIFIER_ATTRIB_NAME = "SPNameQualifier";
+    @Nonnull @NotEmpty public static final String SP_NAME_QUALIFIER_ATTRIB_NAME = "SPNameQualifier";
 
     /** AllowCreate attribute name. */
-    @Nonnull public static final String ALLOW_CREATE_ATTRIB_NAME = "AllowCreate";
+    @Nonnull @NotEmpty public static final String ALLOW_CREATE_ATTRIB_NAME = "AllowCreate";
 
     /**
      * Gets the format of the NameIDPolicy.
@@ -108,4 +110,4 @@ public interface NameIDPolicy extends SAMLObject {
      */
     public void setAllowCreate(XSBooleanValue newAllowCreate);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NameIDType.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NameIDType.java
index 96b66e27a..7916e4c71 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NameIDType.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NameIDType.java
@@ -21,50 +21,52 @@ import javax.annotation.Nonnull;
 
 import org.opensaml.core.xml.schema.XSString;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Assertion NameID schema type.
  */
 public interface NameIDType extends XSString {
 
     /** NameQualifier attribute name. */
-    @Nonnull public static final String NAME_QUALIFIER_ATTRIB_NAME = "NameQualifier";
+    @Nonnull @NotEmpty public static final String NAME_QUALIFIER_ATTRIB_NAME = "NameQualifier";
 
     /** SPNameQualifier attribute name. */
-    @Nonnull public static final String SP_NAME_QUALIFIER_ATTRIB_NAME = "SPNameQualifier";
+    @Nonnull @NotEmpty public static final String SP_NAME_QUALIFIER_ATTRIB_NAME = "SPNameQualifier";
 
     /** Format attribute name. */
-    @Nonnull public static final String FORMAT_ATTRIB_NAME = "Format";
+    @Nonnull @NotEmpty public static final String FORMAT_ATTRIB_NAME = "Format";
 
     /** SPProviderID attribute name. */
-    @Nonnull public static final String SPPROVIDED_ID_ATTRIB_NAME = "SPProvidedID";
+    @Nonnull @NotEmpty public static final String SPPROVIDED_ID_ATTRIB_NAME = "SPProvidedID";
 
     /** URI for unspecified name format. */
-    @Nonnull public static final String UNSPECIFIED = "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified";
+    @Nonnull @NotEmpty public static final String UNSPECIFIED = "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified";
 
     /** URI for email name format. */
-    @Nonnull public static final String EMAIL = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress";
+    @Nonnull @NotEmpty public static final String EMAIL = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress";
 
     /** URI for X509 subject name format. */
-    @Nonnull public static final String X509_SUBJECT = "urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName";
+    @Nonnull @NotEmpty public static final String X509_SUBJECT = "urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName";
 
     /** URI for windows domain qualified name name format. */
-    @Nonnull public static final String WIN_DOMAIN_QUALIFIED =
+    @Nonnull @NotEmpty public static final String WIN_DOMAIN_QUALIFIED =
             "urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName";
 
     /** URI for kerberos name format. */
-    @Nonnull public static final String KERBEROS = "urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos";
+    @Nonnull @NotEmpty public static final String KERBEROS = "urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos";
 
     /** URI for SAML entity name format. */
-    @Nonnull public static final String ENTITY = "urn:oasis:names:tc:SAML:2.0:nameid-format:entity";
+    @Nonnull @NotEmpty public static final String ENTITY = "urn:oasis:names:tc:SAML:2.0:nameid-format:entity";
 
     /** URI for persistent name format. */
-    @Nonnull public static final String PERSISTENT = "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent";
+    @Nonnull @NotEmpty public static final String PERSISTENT = "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent";
 
     /** URI for transient name format. */
-    @Nonnull public static final String TRANSIENT = "urn:oasis:names:tc:SAML:2.0:nameid-format:transient";
+    @Nonnull @NotEmpty public static final String TRANSIENT = "urn:oasis:names:tc:SAML:2.0:nameid-format:transient";
 
     /** Special URI used by NameIDPolicy to indicate a NameID should be encrypted. */
-    @Nonnull public static final String ENCRYPTED = "urn:oasis:names:tc:SAML:2.0:nameid-format:encrypted";
+    @Nonnull @NotEmpty public static final String ENCRYPTED = "urn:oasis:names:tc:SAML:2.0:nameid-format:encrypted";
 
     /**
      * Gets the NameQualifier value.
@@ -122,4 +124,4 @@ public interface NameIDType extends XSString {
      */
     public void setSPProvidedID(String newSPProvidedID);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NewEncryptedID.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NewEncryptedID.java
index 14a5b490d..7c35b8625 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NewEncryptedID.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NewEncryptedID.java
@@ -22,16 +22,18 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core NewEncryptedID.
  */
 public interface NewEncryptedID extends EncryptedElementType {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "NewEncryptedID";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "NewEncryptedID";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = 
         new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20P_PREFIX);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/OneTimeUse.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/OneTimeUse.java
index c9313a4e6..708aca78b 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/OneTimeUse.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/OneTimeUse.java
@@ -22,6 +22,8 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core OneTimeUse.
  * 
@@ -29,16 +31,16 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 public interface OneTimeUse extends Condition {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "OneTimeUse";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "OneTimeUse";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "OneTimeUseType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "OneTimeUseType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/RequestedAuthnContext.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/RequestedAuthnContext.java
index 4d3f30365..bd71e825e 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/RequestedAuthnContext.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/RequestedAuthnContext.java
@@ -29,27 +29,29 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core RequestedAuthnContext.
  */
 public interface RequestedAuthnContext extends SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "RequestedAuthnContext";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "RequestedAuthnContext";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "RequestedAuthnContextType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "RequestedAuthnContextType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** SessionIndex attribute name. */
-    @Nonnull public static final String COMPARISON_ATTRIB_NAME = "Comparison";
+    @Nonnull @NotEmpty public static final String COMPARISON_ATTRIB_NAME = "Comparison";
 
     /**
      * Gets the Comparison attribute value of the requested authn context.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Response.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Response.java
index d7335847f..bf328167a 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Response.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Response.java
@@ -27,20 +27,22 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core Response.
  */
 public interface Response extends StatusResponseType {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Response";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Response";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = 
         new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20P_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "ResponseType"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "ResponseType"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = 
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Scoping.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Scoping.java
index 08f100228..f7211e362 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Scoping.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Scoping.java
@@ -29,27 +29,29 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core Scoping.
  */
 public interface Scoping extends SAMLObject {
 
     /** Element Local Name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Scoping";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Scoping";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "ScopingType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "ScopingType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** ProxyCount attribute name. */
-    @Nonnull public static final String PROXY_COUNT_ATTRIB_NAME = "ProxyCount";
+    @Nonnull @NotEmpty public static final String PROXY_COUNT_ATTRIB_NAME = "ProxyCount";
 
     /**
      * Gets the ProxyCount attrib value.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Statement.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Statement.java
index aeae03a34..2b6c942e5 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Statement.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Statement.java
@@ -23,22 +23,24 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core Statement. This is a marker interface that all statement types must implement.
  */
 public interface Statement extends SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Statement";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Statement";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "StatementAbstractType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "StatementAbstractType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Status.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Status.java
index ec0246aff..a4959778a 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Status.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Status.java
@@ -27,20 +27,22 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core Status.
  */
 public interface Status extends SAMLObject {
 
     /** Local Name of Status. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Status";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Status";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "StatusType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "StatusType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
@@ -87,4 +89,4 @@ public interface Status extends SAMLObject {
      * @param newStatusDetail the Detail of this Status
      */
     public void setStatusDetail(StatusDetail newStatusDetail);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/StatusCode.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/StatusCode.java
index e26998dfc..aa583a3cd 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/StatusCode.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/StatusCode.java
@@ -27,97 +27,99 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core StatusCode.
  */
 public interface StatusCode extends SAMLObject {
 
     /** Local Name of StatusCode. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "StatusCode";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "StatusCode";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "StatusCodeType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "StatusCodeType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local Name of the Value attribute. */
-    @Nonnull public static final String VALUE_ATTRIB_NAME = "Value";
+    @Nonnull @NotEmpty public static final String VALUE_ATTRIB_NAME = "Value";
 
     /** URI for Success status code. */
-    @Nonnull public static final String SUCCESS = "urn:oasis:names:tc:SAML:2.0:status:Success";
+    @Nonnull @NotEmpty public static final String SUCCESS = "urn:oasis:names:tc:SAML:2.0:status:Success";
 
     /** URI for Requester status code. */
-    @Nonnull public static final String REQUESTER = "urn:oasis:names:tc:SAML:2.0:status:Requester";
+    @Nonnull @NotEmpty public static final String REQUESTER = "urn:oasis:names:tc:SAML:2.0:status:Requester";
 
     /** URI for Responder status code. */
-    @Nonnull public static final String RESPONDER = "urn:oasis:names:tc:SAML:2.0:status:Responder";
+    @Nonnull @NotEmpty public static final String RESPONDER = "urn:oasis:names:tc:SAML:2.0:status:Responder";
 
     /** URI for VersionMismatch status code. */
-    @Nonnull public static final String VERSION_MISMATCH = "urn:oasis:names:tc:SAML:2.0:status:VersionMismatch";
+    @Nonnull @NotEmpty public static final String VERSION_MISMATCH = "urn:oasis:names:tc:SAML:2.0:status:VersionMismatch";
 
     /** URI for AuthnFailed status code. */
-    @Nonnull public static final String AUTHN_FAILED = "urn:oasis:names:tc:SAML:2.0:status:AuthnFailed";
+    @Nonnull @NotEmpty public static final String AUTHN_FAILED = "urn:oasis:names:tc:SAML:2.0:status:AuthnFailed";
 
     /** URI for InvalidAttrNameOrValue status code. */
-    @Nonnull public static final String INVALID_ATTR_NAME_OR_VALUE = "urn:oasis:names:tc:SAML:2.0:status:InvalidAttrNameOrValue";
+    @Nonnull @NotEmpty public static final String INVALID_ATTR_NAME_OR_VALUE = "urn:oasis:names:tc:SAML:2.0:status:InvalidAttrNameOrValue";
 
     /** URI for InvalidNameIDPolicy status code. */
-    @Nonnull public static final String INVALID_NAMEID_POLICY = "urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy";
+    @Nonnull @NotEmpty public static final String INVALID_NAMEID_POLICY = "urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy";
 
     /** URI for NoAuthnContext status code. */
-    @Nonnull public static final String NO_AUTHN_CONTEXT = "urn:oasis:names:tc:SAML:2.0:status:NoAuthnContext";
+    @Nonnull @NotEmpty public static final String NO_AUTHN_CONTEXT = "urn:oasis:names:tc:SAML:2.0:status:NoAuthnContext";
 
     /** URI for NoAvailableIDP status code. */
-    @Nonnull public static final String NO_AVAILABLE_IDP = "urn:oasis:names:tc:SAML:2.0:status:NoAvailableIDP";
+    @Nonnull @NotEmpty public static final String NO_AVAILABLE_IDP = "urn:oasis:names:tc:SAML:2.0:status:NoAvailableIDP";
 
     /** URI for NoPassive status code. */
-    @Nonnull public static final String NO_PASSIVE = "urn:oasis:names:tc:SAML:2.0:status:NoPassive";
+    @Nonnull @NotEmpty public static final String NO_PASSIVE = "urn:oasis:names:tc:SAML:2.0:status:NoPassive";
 
     /** URI for NoSupportedIDP status code. */
-    @Nonnull public static final String NO_SUPPORTED_IDP = "urn:oasis:names:tc:SAML:2.0:status:NoSupportedIDP";
+    @Nonnull @NotEmpty public static final String NO_SUPPORTED_IDP = "urn:oasis:names:tc:SAML:2.0:status:NoSupportedIDP";
 
     /** URI for PartialLogout status code. */
-    @Nonnull public static final String PARTIAL_LOGOUT = "urn:oasis:names:tc:SAML:2.0:status:PartialLogout";
+    @Nonnull @NotEmpty public static final String PARTIAL_LOGOUT = "urn:oasis:names:tc:SAML:2.0:status:PartialLogout";
 
     /** URI for ProxyCountExceeded status code. */
-    @Nonnull public static final String PROXY_COUNT_EXCEEDED = "urn:oasis:names:tc:SAML:2.0:status:ProxyCountExceeded";
+    @Nonnull @NotEmpty public static final String PROXY_COUNT_EXCEEDED = "urn:oasis:names:tc:SAML:2.0:status:ProxyCountExceeded";
 
     /** URI for RequestDenied status code. */
-    @Nonnull public static final String REQUEST_DENIED = "urn:oasis:names:tc:SAML:2.0:status:RequestDenied";
+    @Nonnull @NotEmpty public static final String REQUEST_DENIED = "urn:oasis:names:tc:SAML:2.0:status:RequestDenied";
 
     /** URI for RequestUnsupported status code. */
-    @Nonnull public static final String REQUEST_UNSUPPORTED = "urn:oasis:names:tc:SAML:2.0:status:RequestUnsupported";
+    @Nonnull @NotEmpty public static final String REQUEST_UNSUPPORTED = "urn:oasis:names:tc:SAML:2.0:status:RequestUnsupported";
 
     /** URI for RequestVersionDeprecated status code. */
-    @Nonnull public static final String REQUEST_VERSION_DEPRECATED =
+    @Nonnull @NotEmpty public static final String REQUEST_VERSION_DEPRECATED =
             "urn:oasis:names:tc:SAML:2.0:status:RequestVersionDeprecated";
 
     /** URI for RequestVersionTooHigh status code. */
-    @Nonnull public static final String REQUEST_VERSION_TOO_HIGH = "urn:oasis:names:tc:SAML:2.0:status:RequestVersionTooHigh";
+    @Nonnull @NotEmpty public static final String REQUEST_VERSION_TOO_HIGH = "urn:oasis:names:tc:SAML:2.0:status:RequestVersionTooHigh";
     
     /** URI for RequestVersionTooLow status code. */
-    @Nonnull public static final String REQUEST_VERSION_TOO_LOW = "urn:oasis:names:tc:SAML:2.0:status:RequestVersionTooLow";
+    @Nonnull @NotEmpty public static final String REQUEST_VERSION_TOO_LOW = "urn:oasis:names:tc:SAML:2.0:status:RequestVersionTooLow";
 
     /** URI for ResourceNotRecognized status code. */
-    @Nonnull public static final String RESOURCE_NOT_RECOGNIZED = "urn:oasis:names:tc:SAML:2.0:status:ResourceNotRecognized";
+    @Nonnull @NotEmpty public static final String RESOURCE_NOT_RECOGNIZED = "urn:oasis:names:tc:SAML:2.0:status:ResourceNotRecognized";
 
     /** URI for TooManyResponses status code. */
-    @Nonnull public static final String TOO_MANY_RESPONSES = "urn:oasis:names:tc:SAML:2.0:status:TooManyResponses";
+    @Nonnull @NotEmpty public static final String TOO_MANY_RESPONSES = "urn:oasis:names:tc:SAML:2.0:status:TooManyResponses";
 
     /** URI for UnknownAttrProfile status code. */
-    @Nonnull public static final String UNKNOWN_ATTR_PROFILE = "urn:oasis:names:tc:SAML:2.0:status:UnknownAttrProfile";
+    @Nonnull @NotEmpty public static final String UNKNOWN_ATTR_PROFILE = "urn:oasis:names:tc:SAML:2.0:status:UnknownAttrProfile";
 
     /** URI for UnknownPrincipal status code. */
-    @Nonnull public static final String UNKNOWN_PRINCIPAL = "urn:oasis:names:tc:SAML:2.0:status:UnknownPrincipal";
+    @Nonnull @NotEmpty public static final String UNKNOWN_PRINCIPAL = "urn:oasis:names:tc:SAML:2.0:status:UnknownPrincipal";
 
     /** URI for UnsupportedBinding status code. */
-    @Nonnull public static final String UNSUPPORTED_BINDING = "urn:oasis:names:tc:SAML:2.0:status:UnsupportedBinding";
+    @Nonnull @NotEmpty public static final String UNSUPPORTED_BINDING = "urn:oasis:names:tc:SAML:2.0:status:UnsupportedBinding";
 
     /**
      * Gets the Status Code of this Status Code.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/StatusDetail.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/StatusDetail.java
index 8c4c7c9ce..4af7e7fef 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/StatusDetail.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/StatusDetail.java
@@ -28,22 +28,24 @@ import org.opensaml.core.xml.ElementExtensibleXMLObject;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core StatusDetail.
  */
 public interface StatusDetail extends SAMLObject, ElementExtensibleXMLObject {
 
     /** Local Name of StatusDetail. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "StatusDetail";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "StatusDetail";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "StatusDetailType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "StatusDetailType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Subject.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Subject.java
index 223955d58..868cd0f13 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Subject.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Subject.java
@@ -25,20 +25,22 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core Subject.
  */
 public interface Subject extends SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Subject";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Subject";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "SubjectType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "SubjectType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME,
@@ -92,4 +94,4 @@ public interface Subject extends SAMLObject {
      * @return the confirmations made about this subject
      */
     public List<SubjectConfirmation> getSubjectConfirmations();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/SubjectConfirmation.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/SubjectConfirmation.java
index 74d3c641e..513aee99b 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/SubjectConfirmation.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/SubjectConfirmation.java
@@ -23,36 +23,38 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core SubjectConfirmation.
  */
 public interface SubjectConfirmation extends SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SubjectConfirmation";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SubjectConfirmation";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "SubjectConfirmationType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "SubjectConfirmationType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** Method attribute name. */
-    @Nonnull public static final String METHOD_ATTRIB_NAME = "Method";
+    @Nonnull @NotEmpty public static final String METHOD_ATTRIB_NAME = "Method";
     
     /** URI for the Holder of Key subject confirmation method, {@value}. */
-    @Nonnull public static final String METHOD_HOLDER_OF_KEY = "urn:oasis:names:tc:SAML:2.0:cm:holder-of-key";
+    @Nonnull @NotEmpty public static final String METHOD_HOLDER_OF_KEY = "urn:oasis:names:tc:SAML:2.0:cm:holder-of-key";
     
     /** URI for the Sender Vouches subject confirmation method, {@value}. */
-    @Nonnull public static final String METHOD_SENDER_VOUCHES = "urn:oasis:names:tc:SAML:2.0:cm:sender-vouches";
+    @Nonnull @NotEmpty public static final String METHOD_SENDER_VOUCHES = "urn:oasis:names:tc:SAML:2.0:cm:sender-vouches";
     
     /** URI for the Bearer subject confirmation method, {@value}. */
-    @Nonnull public static final String METHOD_BEARER = "urn:oasis:names:tc:SAML:2.0:cm:bearer";
+    @Nonnull @NotEmpty public static final String METHOD_BEARER = "urn:oasis:names:tc:SAML:2.0:cm:bearer";
 
     /**
      * Get the method used to confirm this subject.
@@ -124,4 +126,4 @@ public interface SubjectConfirmation extends SAMLObject {
      *            confirmation
      */
     public void setSubjectConfirmationData(SubjectConfirmationData newSubjectConfirmationData);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/SubjectLocality.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/SubjectLocality.java
index aaa08d0d1..3a02cbcbf 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/SubjectLocality.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/SubjectLocality.java
@@ -23,30 +23,32 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core SubjectLocality.
  */
 public interface SubjectLocality extends SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SubjectLocality";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SubjectLocality";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "SubjectLocalityType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "SubjectLocalityType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** Address attribute name. */
-    @Nonnull public static final String ADDRESS_ATTRIB_NAME = "Address";
+    @Nonnull @NotEmpty public static final String ADDRESS_ATTRIB_NAME = "Address";
 
     /** DNSName attribute name. */
-    @Nonnull public static final String DNS_NAME_ATTRIB_NAME = "DNSName";
+    @Nonnull @NotEmpty public static final String DNS_NAME_ATTRIB_NAME = "DNSName";
 
     /**
      * Gets the IP address of the system from which the subject was authenticated.
@@ -75,4 +77,4 @@ public interface SubjectLocality extends SAMLObject {
      * @param newDNSName the DNSName of the system from which the subject was authenticated
      */
     public void setDNSName(String newDNSName);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/SubjectQuery.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/SubjectQuery.java
index 1ac0721c5..f030684ab 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/SubjectQuery.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/SubjectQuery.java
@@ -26,20 +26,22 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core SubjectQuery.
  */
 public interface SubjectQuery extends RequestAbstractType {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SubjectQuery";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SubjectQuery";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "SubjectQueryAbstractType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "SubjectQueryAbstractType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Terminate.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Terminate.java
index beb4e3bd8..729133dd2 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Terminate.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Terminate.java
@@ -27,22 +27,24 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core Terminate.
  */
 public interface Terminate extends SAMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Terminate";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Terminate";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "TerminateType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "TerminateType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/RelayState.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/RelayState.java
index 2a68feb57..9490f589a 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/RelayState.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/RelayState.java
@@ -26,20 +26,22 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.soap.soap11.ActorBearing;
 import org.opensaml.soap.soap11.MustUnderstandBearing;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 ECP RelayState SOAP header.
  */
 public interface RelayState extends XSString, SAMLObject, MustUnderstandBearing, ActorBearing {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "RelayState";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "RelayState";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
         new QName(SAMLConstants.SAML20ECP_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20ECP_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "RelayStateType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "RelayStateType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/Request.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/Request.java
index 8dbce6d37..c8dc59fc7 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/Request.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/Request.java
@@ -28,30 +28,32 @@ import org.opensaml.saml.saml2.core.Issuer;
 import org.opensaml.soap.soap11.ActorBearing;
 import org.opensaml.soap.soap11.MustUnderstandBearing;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 ECP Request SOAP header.
  */
 public interface Request extends SAMLObject, MustUnderstandBearing, ActorBearing {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Request";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Request";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
         new QName(SAMLConstants.SAML20ECP_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20ECP_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "RequestType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "RequestType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
         new QName(SAMLConstants.SAML20ECP_NS, TYPE_LOCAL_NAME, SAMLConstants.SAML20ECP_PREFIX);
 
     /** ProviderName attribute name. */
-    @Nonnull public static final String PROVIDER_NAME_ATTRIB_NAME = "ProviderName";
+    @Nonnull @NotEmpty public static final String PROVIDER_NAME_ATTRIB_NAME = "ProviderName";
 
     /** IsPassive attribute name. */
-    @Nonnull public static final String IS_PASSIVE_NAME_ATTRIB_NAME = "IsPassive";
+    @Nonnull @NotEmpty public static final String IS_PASSIVE_NAME_ATTRIB_NAME = "IsPassive";
     
     /**
      * Get the Issuer child elemet.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/RequestAuthenticated.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/RequestAuthenticated.java
index 8b9762020..35569c3c0 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/RequestAuthenticated.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/RequestAuthenticated.java
@@ -25,6 +25,8 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.soap.soap11.ActorBearing;
 import org.opensaml.soap.soap11.MustUnderstandBearing;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 
 /**
  * SAML 2.0 ECP RequestAuthenticated SOAP header.
@@ -32,17 +34,17 @@ import org.opensaml.soap.soap11.MustUnderstandBearing;
 public interface RequestAuthenticated extends SAMLObject, MustUnderstandBearing, ActorBearing {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "RequestAuthenticated";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "RequestAuthenticated";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20ECP_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20ECP_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "RequestAuthenticatedType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "RequestAuthenticatedType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20ECP_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20ECP_PREFIX);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/Response.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/Response.java
index 10a3f2182..e9292d7d3 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/Response.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/Response.java
@@ -25,27 +25,29 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.soap.soap11.ActorBearing;
 import org.opensaml.soap.soap11.MustUnderstandBearing;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 ECP Response SOAP header.
  */
 public interface Response extends SAMLObject, MustUnderstandBearing, ActorBearing {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Response";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Response";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
         new QName(SAMLConstants.SAML20ECP_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20ECP_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "ResponseType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "ResponseType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME =
         new QName(SAMLConstants.SAML20ECP_NS, TYPE_LOCAL_NAME, SAMLConstants.SAML20ECP_PREFIX);
 
     /** ProviderName attribute name. */
-    @Nonnull public static final String ASSERTION_CONSUMER_SERVICE_URL_ATTRIB_NAME = "AssertionConsumerServiceURL";
+    @Nonnull @NotEmpty public static final String ASSERTION_CONSUMER_SERVICE_URL_ATTRIB_NAME = "AssertionConsumerServiceURL";
     
     /**
      * Get the AssertionConsumerServiceURL attribute value.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/SubjectConfirmation.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/SubjectConfirmation.java
index 05773bc55..827aa8230 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/SubjectConfirmation.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/ecp/SubjectConfirmation.java
@@ -26,6 +26,8 @@ import org.opensaml.saml.saml2.core.SubjectConfirmationData;
 import org.opensaml.soap.soap11.ActorBearing;
 import org.opensaml.soap.soap11.MustUnderstandBearing;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 
 /**
  * SAML 2.0 ECP SubjectConfirmation SOAP header.
@@ -33,21 +35,21 @@ import org.opensaml.soap.soap11.MustUnderstandBearing;
 public interface SubjectConfirmation extends SAMLObject, MustUnderstandBearing, ActorBearing {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SubjectConfirmation";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SubjectConfirmation";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20ECP_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20ECP_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "SubjectConfirmationType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "SubjectConfirmationType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20ECP_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20ECP_PREFIX);
 
     /** Method attribute name. */
-    @Nonnull public static final String METHOD_ATTRIB_NAME = "Method";
+    @Nonnull @NotEmpty public static final String METHOD_ATTRIB_NAME = "Method";
     
     /**
      * Get the method used to confirm this subject.
@@ -77,4 +79,4 @@ public interface SubjectConfirmation extends SAMLObject, MustUnderstandBearing,
      *            confirmation
      */
     public void setSubjectConfirmationData(SubjectConfirmationData newSubjectConfirmationData);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AffiliationDescriptor.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AffiliationDescriptor.java
index 40cab11d4..bfd7d7424 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AffiliationDescriptor.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AffiliationDescriptor.java
@@ -28,6 +28,8 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.common.CacheableSAMLObject;
 import org.opensaml.saml.saml2.common.TimeBoundSAMLObject;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata AffiliationDescriptorType.
  */
@@ -35,24 +37,24 @@ public interface AffiliationDescriptor extends SignableSAMLObject, TimeBoundSAML
         AttributeExtensibleXMLObject {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AffiliationDescriptor";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AffiliationDescriptor";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AffiliationDescriptorType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AffiliationDescriptorType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MD_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** "affiliationOwnerID" attribute's local name. */
-    @Nonnull public static final String OWNER_ID_ATTRIB_NAME = "affiliationOwnerID";
+    @Nonnull @NotEmpty public static final String OWNER_ID_ATTRIB_NAME = "affiliationOwnerID";
 
     /** ID attribute's local name. */
-    @Nonnull public static final String ID_ATTRIB_NAME = "ID";
+    @Nonnull @NotEmpty public static final String ID_ATTRIB_NAME = "ID";
 
     /**
      * Gets the ID of the owner of this affiliation. The owner may, or may not, be a member of the affiliation.
@@ -109,4 +111,4 @@ public interface AffiliationDescriptor extends SignableSAMLObject, TimeBoundSAML
      * @return list of {@link KeyDescriptor}s for this affiliation
      */
     public List<KeyDescriptor> getKeyDescriptors();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/ArtifactResolutionService.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/ArtifactResolutionService.java
index 85a86bf95..565b90c42 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/ArtifactResolutionService.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/ArtifactResolutionService.java
@@ -22,15 +22,17 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata ArtifactResolutionService.
  */
 public interface ArtifactResolutionService extends IndexedEndpoint {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ArtifactResolutionService";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ArtifactResolutionService";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AssertionConsumerService.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AssertionConsumerService.java
index 81a40441f..9619762cf 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AssertionConsumerService.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AssertionConsumerService.java
@@ -22,15 +22,17 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata AssertionConsumerService.
  */
 public interface AssertionConsumerService extends IndexedEndpoint {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AssertionConsumerService";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AssertionConsumerService";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AssertionIDRequestService.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AssertionIDRequestService.java
index 076ff5487..ef0c43228 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AssertionIDRequestService.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AssertionIDRequestService.java
@@ -22,15 +22,17 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata AssertionIDRequestService.
  */
 public interface AssertionIDRequestService extends Endpoint {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AssertionIDRequestService";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AssertionIDRequestService";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AttributeAuthorityDescriptor.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AttributeAuthorityDescriptor.java
index 922eece74..51d4204ce 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AttributeAuthorityDescriptor.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AttributeAuthorityDescriptor.java
@@ -26,20 +26,22 @@ import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.core.Attribute;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata AttributeAuthorityDescriptor.
  */
 public interface AttributeAuthorityDescriptor extends SAMLObject, RoleDescriptor {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AttributeAuthorityDescriptor";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AttributeAuthorityDescriptor";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AttributeAuthorityDescriptorType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AttributeAuthorityDescriptorType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MD_NS, TYPE_LOCAL_NAME,
@@ -79,4 +81,4 @@ public interface AttributeAuthorityDescriptor extends SAMLObject, RoleDescriptor
      * @return list of attribute available from this authority
      */
     public List<Attribute> getAttributes();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AttributeService.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AttributeService.java
index 2ef2d6531..ff3c9160a 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AttributeService.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AttributeService.java
@@ -22,15 +22,17 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata AttributeService.
  */
 public interface AttributeService extends Endpoint {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AttributeService";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AttributeService";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AuthnAuthorityDescriptor.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AuthnAuthorityDescriptor.java
index c8e7704d4..fe4a96022 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AuthnAuthorityDescriptor.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AuthnAuthorityDescriptor.java
@@ -25,20 +25,22 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata AuthnAuthorityDescriptor.
  */
 public interface AuthnAuthorityDescriptor extends SAMLObject, RoleDescriptor {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthnAuthorityDescriptor";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthnAuthorityDescriptor";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "AuthnAuthorityDescriptorType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "AuthnAuthorityDescriptorType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MD_NS, TYPE_LOCAL_NAME,
@@ -64,4 +66,4 @@ public interface AuthnAuthorityDescriptor extends SAMLObject, RoleDescriptor {
      * @return supported name ID formats for this authority
      */
     public List<NameIDFormat> getNameIDFormats();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AuthnQueryService.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AuthnQueryService.java
index 2b22dbea5..fe562d7c4 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AuthnQueryService.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AuthnQueryService.java
@@ -22,15 +22,17 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata AuthnQueryService.
  */
 public interface AuthnQueryService extends Endpoint {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthnQueryService";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthnQueryService";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AuthzService.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AuthzService.java
index acee529d2..9a08d5023 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AuthzService.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/AuthzService.java
@@ -22,15 +22,17 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata AuthzService.
  */
 public interface AuthzService extends Endpoint {
 
     /** Default element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthzService";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthzService";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/ContactPerson.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/ContactPerson.java
index b7e01b059..15740728c 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/ContactPerson.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/ContactPerson.java
@@ -26,27 +26,29 @@ import org.opensaml.core.xml.AttributeExtensibleXMLObject;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata ContactPerson.
  */
 public interface ContactPerson extends SAMLObject, AttributeExtensibleXMLObject {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ContactPerson";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ContactPerson";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "ContactPersonType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "ContactPersonType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MD_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** "contactType" attribute's local name. */
-    @Nonnull public static final String CONTACT_TYPE_ATTRIB_NAME = "contactType";
+    @Nonnull @NotEmpty public static final String CONTACT_TYPE_ATTRIB_NAME = "contactType";
 
     /**
      * Gets the type of contact this person.
@@ -131,4 +133,4 @@ public interface ContactPerson extends SAMLObject, AttributeExtensibleXMLObject
      * @return list of telephone numbers for this person
      */
     public List<TelephoneNumber> getTelephoneNumbers();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/EncryptionMethod.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/EncryptionMethod.java
index 91279c8e9..6e0c5e62e 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/EncryptionMethod.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/EncryptionMethod.java
@@ -23,16 +23,18 @@ import javax.xml.namespace.QName;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata EncryptionMethod.
  */
 public interface EncryptionMethod extends org.opensaml.xmlsec.encryption.EncryptionMethod, SAMLObject {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "EncryptionMethod";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "EncryptionMethod";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = 
         new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20MD_PREFIX);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/Endpoint.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/Endpoint.java
index ecdbd5e2b..6faf948fa 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/Endpoint.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/Endpoint.java
@@ -25,33 +25,35 @@ import org.opensaml.core.xml.ElementExtensibleXMLObject;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata Endpoint data type interface.
  */
 public interface Endpoint extends SAMLObject, ElementExtensibleXMLObject, AttributeExtensibleXMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Endpoint";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Endpoint";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "EndpointType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "EndpointType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MD_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** "Binding" attribute name. */
-    @Nonnull public static final String BINDING_ATTRIB_NAME = "Binding";
+    @Nonnull @NotEmpty public static final String BINDING_ATTRIB_NAME = "Binding";
 
     /** "Location" attribute name. */
-    @Nonnull public static final String LOCATION_ATTRIB_NAME = "Location";
+    @Nonnull @NotEmpty public static final String LOCATION_ATTRIB_NAME = "Location";
 
     /** "ResponseLocation" attribute name. */
-    @Nonnull public static final String RESPONSE_LOCATION_ATTRIB_NAME = "ResponseLocation";
+    @Nonnull @NotEmpty public static final String RESPONSE_LOCATION_ATTRIB_NAME = "ResponseLocation";
 
     /**
      * Gets the URI identifier for the binding supported by this Endpoint.
@@ -94,4 +96,4 @@ public interface Endpoint extends SAMLObject, ElementExtensibleXMLObject, Attrib
      * @param location the URI responses should be sent to this for this Endpoint
      */
     public void setResponseLocation(String location);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/EntitiesDescriptor.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/EntitiesDescriptor.java
index cfe255c80..bc11b8c5f 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/EntitiesDescriptor.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/EntitiesDescriptor.java
@@ -27,6 +27,8 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.common.CacheableSAMLObject;
 import org.opensaml.saml.saml2.common.TimeBoundSAMLObject;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata EntitiesDescriptor.
  * 
@@ -35,14 +37,14 @@ import org.opensaml.saml.saml2.common.TimeBoundSAMLObject;
 public interface EntitiesDescriptor extends SignableSAMLObject, TimeBoundSAMLObject, CacheableSAMLObject {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "EntitiesDescriptor";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "EntitiesDescriptor";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "EntitiesDescriptorType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "EntitiesDescriptorType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MD_NS, TYPE_LOCAL_NAME,
@@ -52,10 +54,10 @@ public interface EntitiesDescriptor extends SignableSAMLObject, TimeBoundSAMLObj
     @Nonnull public static final QName ELEMENT_QNAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME);
 
     /** "ID" attribute name. */
-    @Nonnull public static final String ID_ATTRIB_NAME = "ID";
+    @Nonnull @NotEmpty public static final String ID_ATTRIB_NAME = "ID";
 
     /** "Name" attribute name. */
-    @Nonnull public static final String NAME_ATTRIB_NAME = "Name";
+    @Nonnull @NotEmpty public static final String NAME_ATTRIB_NAME = "Name";
 
     /**
      * Gets the name of this entity group.
@@ -112,4 +114,4 @@ public interface EntitiesDescriptor extends SignableSAMLObject, TimeBoundSAMLObj
      * @return list of child descriptors
      */
     public List<EntityDescriptor> getEntityDescriptors();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/EntityDescriptor.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/EntityDescriptor.java
index 79298fc74..729195721 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/EntityDescriptor.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/EntityDescriptor.java
@@ -28,6 +28,8 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.common.CacheableSAMLObject;
 import org.opensaml.saml.saml2.common.TimeBoundSAMLObject;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata EntityDescriptor.
  */
@@ -35,14 +37,14 @@ public interface EntityDescriptor extends SignableSAMLObject, TimeBoundSAMLObjec
         AttributeExtensibleXMLObject {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "EntityDescriptor";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "EntityDescriptor";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "EntityDescriptorType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "EntityDescriptorType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MD_NS, TYPE_LOCAL_NAME,
@@ -52,10 +54,10 @@ public interface EntityDescriptor extends SignableSAMLObject, TimeBoundSAMLObjec
     @Nonnull public static final QName ELEMENT_QNAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME);
 
     /** "ID" attribute name. */
-    @Nonnull public static final String ID_ATTRIB_NAME = "ID";
+    @Nonnull @NotEmpty public static final String ID_ATTRIB_NAME = "ID";
 
     /** "Name" attribute name. */
-    @Nonnull public static final String ENTITY_ID_ATTRIB_NAME = "entityID";
+    @Nonnull @NotEmpty public static final String ENTITY_ID_ATTRIB_NAME = "entityID";
 
     /**
      * Gets the entity ID for this entity descriptor.
@@ -212,4 +214,4 @@ public interface EntityDescriptor extends SignableSAMLObject, TimeBoundSAMLObjec
      * @return the additional metadata locations for this entity
      */
     public List<AdditionalMetadataLocation> getAdditionalMetadataLocations();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/Extensions.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/Extensions.java
index d295a1d1f..9b3838ab8 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/Extensions.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/Extensions.java
@@ -24,23 +24,25 @@ import org.opensaml.core.xml.ElementExtensibleXMLObject;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata Extensions.
  */
 public interface Extensions extends SAMLObject, ElementExtensibleXMLObject {
     
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Extensions";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Extensions";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "ExtensionsType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "ExtensionsType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MD_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/IndexedEndpoint.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/IndexedEndpoint.java
index 14829eff4..0c0a1098e 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/IndexedEndpoint.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/IndexedEndpoint.java
@@ -23,30 +23,32 @@ import javax.xml.namespace.QName;
 import org.opensaml.core.xml.schema.XSBooleanValue;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata IndexedEndpoint.
  */
 public interface IndexedEndpoint extends Endpoint {
 
     /** Local name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "IndexedEndpoint";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "IndexedEndpoint";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "IndexedEndpointType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "IndexedEndpointType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MD_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** index attribute name. */
-    @Nonnull public static final String INDEX_ATTRIB_NAME = "index";
+    @Nonnull @NotEmpty public static final String INDEX_ATTRIB_NAME = "index";
 
     /** isDeault attribute name. */
-    @Nonnull public static final String IS_DEFAULT_ATTRIB_NAME = "isDefault";
+    @Nonnull @NotEmpty public static final String IS_DEFAULT_ATTRIB_NAME = "isDefault";
 
     /**
      * Gets the index of the endpoint.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/KeyDescriptor.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/KeyDescriptor.java
index 2f9c72f97..8e0e8a4a8 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/KeyDescriptor.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/KeyDescriptor.java
@@ -27,27 +27,29 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.security.credential.UsageType;
 import org.opensaml.xmlsec.signature.KeyInfo;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata KeyDescriptor.
  */
 public interface KeyDescriptor extends SAMLObject {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "KeyDescriptor";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "KeyDescriptor";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "KeyDescriptorType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "KeyDescriptorType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MD_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** "use" attribute's local name. */
-    @Nonnull public static final String USE_ATTRIB_NAME = "use";
+    @Nonnull @NotEmpty public static final String USE_ATTRIB_NAME = "use";
 
     /**
      * Gets the use of this key.
@@ -83,4 +85,4 @@ public interface KeyDescriptor extends SAMLObject {
      * @return the encryption methods that are supported by the entity
      */
     public List<EncryptionMethod> getEncryptionMethods();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/ManageNameIDService.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/ManageNameIDService.java
index a60518c4e..a946af064 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/ManageNameIDService.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/ManageNameIDService.java
@@ -22,15 +22,17 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata ManageNameIDService.
  */
 public interface ManageNameIDService extends Endpoint {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ManageNameIDService";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "ManageNameIDService";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME =
             new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20MD_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/NameIDMappingService.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/NameIDMappingService.java
index 4afebee86..a36b7dd98 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/NameIDMappingService.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/NameIDMappingService.java
@@ -22,15 +22,17 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata NameIDMappingService.
  */
 public interface NameIDMappingService extends Endpoint {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "NameIDMappingService";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "NameIDMappingService";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/Organization.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/Organization.java
index dbde105b2..8b66c97bd 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/Organization.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/Organization.java
@@ -26,13 +26,15 @@ import org.opensaml.core.xml.AttributeExtensibleXMLObject;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata Organization.
  */
 public interface Organization extends SAMLObject, AttributeExtensibleXMLObject {
 
     /** Local name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Organization";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Organization";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
@@ -79,4 +81,4 @@ public interface Organization extends SAMLObject, AttributeExtensibleXMLObject {
      * @return list of URLs for this organization
      */
     public List<OrganizationURL> getURLs();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/OrganizationDisplayName.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/OrganizationDisplayName.java
index 383c5b95c..ee7457c14 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/OrganizationDisplayName.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/OrganizationDisplayName.java
@@ -22,16 +22,18 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata OrganizationDisplayName.
  */
 public interface OrganizationDisplayName extends LocalizedName {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "OrganizationDisplayName";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "OrganizationDisplayName";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/PDPDescriptor.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/PDPDescriptor.java
index cea546454..fd7c3fb07 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/PDPDescriptor.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/PDPDescriptor.java
@@ -24,20 +24,22 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata PDPDescriptor.
  */
 public interface PDPDescriptor extends RoleDescriptor {
 
     /** Local name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "PDPDescriptor";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "PDPDescriptor";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "PDPDescriptorType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "PDPDescriptorType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MD_NS, TYPE_LOCAL_NAME,
@@ -63,4 +65,4 @@ public interface PDPDescriptor extends RoleDescriptor {
      * @return NameID formats this service supports
      */
     public List<NameIDFormat> getNameIDFormats();
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/RoleDescriptor.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/RoleDescriptor.java
index 6f1a2a795..5d2266c50 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/RoleDescriptor.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/RoleDescriptor.java
@@ -29,6 +29,8 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml2.common.CacheableSAMLObject;
 import org.opensaml.saml.saml2.common.TimeBoundSAMLObject;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata RoleDescriptor.
  */
@@ -36,27 +38,27 @@ public interface RoleDescriptor extends SignableSAMLObject, TimeBoundSAMLObject,
         AttributeExtensibleXMLObject {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "RoleDescriptor";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "RoleDescriptor";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "RoleDescriptorType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "RoleDescriptorType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MD_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** "ID" attribute's local name. */
-    @Nonnull public static final String ID_ATTRIB_NAME = "ID";
+    @Nonnull @NotEmpty public static final String ID_ATTRIB_NAME = "ID";
 
     /** "protocolEnumeration" attribute's local name. */
-    @Nonnull public static final String PROTOCOL_ENUMERATION_ATTRIB_NAME = "protocolSupportEnumeration";
+    @Nonnull @NotEmpty public static final String PROTOCOL_ENUMERATION_ATTRIB_NAME = "protocolSupportEnumeration";
 
     /** "errorURL" attribute's local name. */
-    @Nonnull public static final String ERROR_URL_ATTRIB_NAME = "errorURL";
+    @Nonnull @NotEmpty public static final String ERROR_URL_ATTRIB_NAME = "errorURL";
 
     /**
      * Gets the ID of this role descriptor.
@@ -186,4 +188,4 @@ public interface RoleDescriptor extends SignableSAMLObject, TimeBoundSAMLObject,
      * @return immutable list of endpoints for this role
      */
     public List<Endpoint> getEndpoints(QName type);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/SSODescriptor.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/SSODescriptor.java
index 3b52a2033..0c4f0fcd7 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/SSODescriptor.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/SSODescriptor.java
@@ -24,20 +24,22 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata SSODescriptor.
  */
 public interface SSODescriptor extends RoleDescriptor {
 
     /** Element name, no namespace. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SSODescriptor";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SSODescriptor";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "SSODescriptorType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "SSODescriptorType";
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = new QName(SAMLConstants.SAML20MD_NS, TYPE_LOCAL_NAME,
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/SingleLogoutService.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/SingleLogoutService.java
index a91cbc4da..50baed5e9 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/SingleLogoutService.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/SingleLogoutService.java
@@ -22,15 +22,17 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata SingleLogoutService.
  */
 public interface SingleLogoutService extends Endpoint {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SingleLogoutService";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SingleLogoutService";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/SingleSignOnService.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/SingleSignOnService.java
index ff5c2761a..5727f211a 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/SingleSignOnService.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/metadata/SingleSignOnService.java
@@ -22,15 +22,17 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Metadata SingleSignOnService.
  */
 public interface SingleSignOnService extends Endpoint {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SingleSignOnService";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "SingleSignOnService";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20MD_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20MD_PREFIX);
-}
\ No newline at end of file
+}
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/tests/BaseAssertionValidationTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/tests/BaseAssertionValidationTest.java
index 5c1fa70fc..cb0c3c792 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/tests/BaseAssertionValidationTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/tests/BaseAssertionValidationTest.java
@@ -64,21 +64,23 @@ import org.opensaml.xmlsec.signature.support.SignatureSupport;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 public class BaseAssertionValidationTest extends XMLObjectBaseTestCase {
     
     @Nonnull public static final Duration CLOCK_SKEW = Duration.ofMinutes(5);
     
-    @Nonnull public static final String PRINCIPAL_NAME = "gollum";
+    @Nonnull @NotEmpty public static final String PRINCIPAL_NAME = "gollum";
     
-    @Nonnull public static final String ISSUER = "https://idp.example.org";
+    @Nonnull @NotEmpty public static final String ISSUER = "https://idp.example.org";
     
-    @Nonnull public static final String SUBJECT_CONFIRMATION_RECIPIENT = "https://sp.example.com";
+    @Nonnull @NotEmpty public static final String SUBJECT_CONFIRMATION_RECIPIENT = "https://sp.example.com";
     
-    @Nonnull public static final String SUBJECT_CONFIRMATION_ADDRESS = "10.1.2.3";
+    @Nonnull @NotEmpty public static final String SUBJECT_CONFIRMATION_ADDRESS = "10.1.2.3";
     
-    @Nonnull public static final String SUBJECT_CONFIRMATION_IN_RESPONSE_TO = "id-123";
+    @Nonnull @NotEmpty public static final String SUBJECT_CONFIRMATION_IN_RESPONSE_TO = "id-123";
     
-    @Nonnull public static final String AUTHN_STATEMENT_ADDRESS = "10.1.2.3";
+    @Nonnull @NotEmpty public static final String AUTHN_STATEMENT_ADDRESS = "10.1.2.3";
     
     
     private Assertion assertion;
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/ActorBearing.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/ActorBearing.java
index 697a5563b..19ee5fade 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/ActorBearing.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/ActorBearing.java
@@ -23,6 +23,8 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.soap.util.SOAPConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Interface for element having a <code>@soap11:actor</code> attribute.
  */
@@ -36,7 +38,7 @@ public interface ActorBearing {
         new QName(SOAPConstants.SOAP11_NS, SOAP11_ACTOR_ATTR_LOCAL_NAME, SOAPConstants.SOAP11_PREFIX);
     
     /** The specification-defined value 'http://schemas.xmlsoap.org/soap/actor/next'. */
-    @Nonnull public static final String SOAP11_ACTOR_NEXT = "http://schemas.xmlsoap.org/soap/actor/next";
+    @Nonnull @NotEmpty public static final String SOAP11_ACTOR_NEXT = "http://schemas.xmlsoap.org/soap/actor/next";
     
     /**
      * Get the attribute value.
@@ -52,4 +54,4 @@ public interface ActorBearing {
      */
     public void setSOAP11Actor(@Nullable final String newActor);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Body.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Body.java
index 57ecce93c..44f595925 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Body.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Body.java
@@ -25,20 +25,22 @@ import org.opensaml.core.xml.ElementExtensibleXMLObject;
 import org.opensaml.soap.common.SOAPObject;
 import org.opensaml.soap.util.SOAPConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SOAP 1.1 Body.
  */
 public interface Body extends SOAPObject, ElementExtensibleXMLObject, AttributeExtensibleXMLObject {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Body";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Body";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = 
         new QName(SOAPConstants.SOAP11_NS, DEFAULT_ELEMENT_LOCAL_NAME, SOAPConstants.SOAP11_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "Body"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "Body"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = 
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Detail.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Detail.java
index 3edc66c1a..a9bdbc939 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Detail.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Detail.java
@@ -25,19 +25,21 @@ import org.opensaml.core.xml.ElementExtensibleXMLObject;
 import org.opensaml.soap.common.SOAPObject;
 import org.opensaml.soap.util.SOAPConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SOAP 1.1 Detail.
  */
 public interface Detail extends SOAPObject, ElementExtensibleXMLObject, AttributeExtensibleXMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "detail";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "detail";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(DEFAULT_ELEMENT_LOCAL_NAME);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "detail"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "detail"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = 
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/EncodingStyleBearing.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/EncodingStyleBearing.java
index 8350c338e..30f03547f 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/EncodingStyleBearing.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/EncodingStyleBearing.java
@@ -25,13 +25,15 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.soap.util.SOAPConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Interface for element having a <code>@soap11:encodingStyle</code> attribute.
  */
 public interface EncodingStyleBearing {
     
     /** The soap11:@encodingStyle attribute local name. */
-    @Nonnull public static final String SOAP11_ENCODING_STYLE_ATTR_LOCAL_NAME = "encodingStyle";
+    @Nonnull @NotEmpty public static final String SOAP11_ENCODING_STYLE_ATTR_LOCAL_NAME = "encodingStyle";
 
     /** The soap11:@encodingStyle qualified attribute name. */
     @Nonnull public static final QName SOAP11_ENCODING_STYLE_ATTR_NAME =
@@ -51,4 +53,4 @@ public interface EncodingStyleBearing {
      */
     public void setSOAP11EncodingStyles(@Nullable final List<String> newEncodingStyles);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Envelope.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Envelope.java
index d0de18b97..c6aebaf4b 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Envelope.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Envelope.java
@@ -26,20 +26,22 @@ import org.opensaml.core.xml.ElementExtensibleXMLObject;
 import org.opensaml.soap.common.SOAPObject;
 import org.opensaml.soap.util.SOAPConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SOAP 1.1 Envelope.
  */
 public interface Envelope extends SOAPObject, ElementExtensibleXMLObject, AttributeExtensibleXMLObject {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Envelope";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Envelope";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = 
         new QName(SOAPConstants.SOAP11_NS, DEFAULT_ELEMENT_LOCAL_NAME, SOAPConstants.SOAP11_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "Envelope"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "Envelope"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = 
@@ -72,4 +74,4 @@ public interface Envelope extends SOAPObject, ElementExtensibleXMLObject, Attrib
      * @param newBody the body of this envelope
      */
     public void setBody(@Nullable final Body newBody);
-}
\ No newline at end of file
+}
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Fault.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Fault.java
index 94c76f600..0e0a1e82d 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Fault.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Fault.java
@@ -24,20 +24,22 @@ import javax.xml.namespace.QName;
 import org.opensaml.soap.common.SOAPObject;
 import org.opensaml.soap.util.SOAPConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SOAP 1.1 Fault.
  */
 public interface Fault extends SOAPObject {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Fault";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "Fault";
 
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = 
         new QName(SOAPConstants.SOAP11_NS, DEFAULT_ELEMENT_LOCAL_NAME, SOAPConstants.SOAP11_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "Fault"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "Fault"; 
 
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = 
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/FaultActor.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/FaultActor.java
index 648a82919..8522a8531 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/FaultActor.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/FaultActor.java
@@ -23,13 +23,15 @@ import javax.xml.namespace.QName;
 import org.opensaml.core.xml.schema.XSURI;
 import org.opensaml.soap.common.SOAPObject;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SOAP 1.1 faultactor.
  */
 public interface FaultActor extends SOAPObject, XSURI {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "faultactor";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "faultactor";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(DEFAULT_ELEMENT_LOCAL_NAME);
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/FaultCode.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/FaultCode.java
index a1456d484..199ec03a9 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/FaultCode.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/FaultCode.java
@@ -24,13 +24,15 @@ import org.opensaml.core.xml.schema.XSQName;
 import org.opensaml.soap.common.SOAPObject;
 import org.opensaml.soap.util.SOAPConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SOAP 1.1 faultcode.
  */
 public interface FaultCode extends SOAPObject, XSQName {
     
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "faultcode";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "faultcode";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(DEFAULT_ELEMENT_LOCAL_NAME);
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/FaultString.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/FaultString.java
index 013213cd3..09865e208 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/FaultString.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/FaultString.java
@@ -23,13 +23,15 @@ import javax.xml.namespace.QName;
 import org.opensaml.core.xml.schema.XSString;
 import org.opensaml.soap.common.SOAPObject;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SOAP 1.1 faultstring.
  */
 public interface FaultString extends SOAPObject, XSString {
 
     /** Element local name. */
-    @Nonnull public static final String DEFAULT_ELEMENT_LOCAL_NAME = "faultstring";
+    @Nonnull @NotEmpty public static final String DEFAULT_ELEMENT_LOCAL_NAME = "faultstring";
     
     /** Default element name. */
     @Nonnull public static final QName DEFAULT_ELEMENT_NAME = new QName(DEFAULT_ELEMENT_LOCAL_NAME);
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Header.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Header.java
index cfeecb893..c15cc27eb 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Header.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/Header.java
@@ -25,6 +25,8 @@ import org.opensaml.core.xml.ElementExtensibleXMLObject;
 import org.opensaml.soap.common.SOAPObject;
 import org.opensaml.soap.util.SOAPConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * SOAP 1.1 Header.
  */
@@ -38,7 +40,7 @@ public interface Header extends SOAPObject, ElementExtensibleXMLObject, Attribut
         new QName(SOAPConstants.SOAP11_NS, DEFAULT_ELEMENT_LOCAL_NAME, SOAPConstants.SOAP11_PREFIX);
     
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "Header"; 
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "Header"; 
         
     /** QName of the XSI type. */
     @Nonnull public static final QName TYPE_NAME = 
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/MustUnderstandBearing.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/MustUnderstandBearing.java
index 92834ab7e..a1ccb01ad 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/MustUnderstandBearing.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap11/MustUnderstandBearing.java
@@ -24,13 +24,15 @@ import javax.xml.namespace.QName;
 import org.opensaml.core.xml.schema.XSBooleanValue;
 import org.opensaml.soap.util.SOAPConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Interface for element having a <code>@soap11:mustUnderstand</code> attribute.
  */
 public interface MustUnderstandBearing {
     
     /** The soap11:@mustUnderstand attribute local name. */
-    @Nonnull public static final String SOAP11_MUST_UNDERSTAND_ATTR_LOCAL_NAME = "mustUnderstand";
+    @Nonnull @NotEmpty public static final String SOAP11_MUST_UNDERSTAND_ATTR_LOCAL_NAME = "mustUnderstand";
 
     /** The soap11:@mustUnderstand qualified attribute name. */
     @Nonnull public static final QName SOAP11_MUST_UNDERSTAND_ATTR_NAME =
@@ -64,4 +66,4 @@ public interface MustUnderstandBearing {
      */
     public void setSOAP11MustUnderstand(@Nullable final XSBooleanValue newMustUnderstand);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap12/EncodingStyleBearing.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap12/EncodingStyleBearing.java
index 22f97ec7c..35380db87 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap12/EncodingStyleBearing.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap12/EncodingStyleBearing.java
@@ -23,13 +23,15 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.soap.util.SOAPConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Interface for element having a <code>@soap12:encodingStyle</code> attribute.
  */
 public interface EncodingStyleBearing {
     
     /** The soap12:@encodingStyle attribute local name. */
-    @Nonnull public static final String SOAP12_ENCODING_STYLE_ATTR_LOCAL_NAME = "encodingStyle";
+    @Nonnull @NotEmpty public static final String SOAP12_ENCODING_STYLE_ATTR_LOCAL_NAME = "encodingStyle";
 
     /** The soap12:@encodingStyle qualified attribute name. */
     @Nonnull public static final QName SOAP12_ENCODING_STYLE_ATTR_NAME =
@@ -49,4 +51,4 @@ public interface EncodingStyleBearing {
      */
     public void setSOAP12EncodingStyle(@Nullable final String newEncodingStyle);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap12/MustUnderstandBearing.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap12/MustUnderstandBearing.java
index d09d79eb7..dbcf46c3a 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap12/MustUnderstandBearing.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap12/MustUnderstandBearing.java
@@ -24,13 +24,15 @@ import javax.xml.namespace.QName;
 import org.opensaml.core.xml.schema.XSBooleanValue;
 import org.opensaml.soap.util.SOAPConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Interface for element having a <code>@soap12:mustUnderstand</code> attribute.
  */
 public interface MustUnderstandBearing {
     
     /** The soap12:@mustUnderstand attribute local name. */
-    @Nonnull public static final String SOAP12_MUST_UNDERSTAND_ATTR_LOCAL_NAME = "mustUnderstand";
+    @Nonnull @NotEmpty public static final String SOAP12_MUST_UNDERSTAND_ATTR_LOCAL_NAME = "mustUnderstand";
 
     /** The soap12:@mustUnderstand qualified attribute name. */
     @Nonnull public static final QName SOAP12_MUST_UNDERSTAND_ATTR_NAME =
@@ -64,4 +66,4 @@ public interface MustUnderstandBearing {
      */
     public void setSOAP12MustUnderstand(@Nullable final XSBooleanValue newMustUnderstand);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap12/RelayBearing.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap12/RelayBearing.java
index 9c67beabb..6cacc5061 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap12/RelayBearing.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap12/RelayBearing.java
@@ -24,13 +24,15 @@ import javax.xml.namespace.QName;
 import org.opensaml.core.xml.schema.XSBooleanValue;
 import org.opensaml.soap.util.SOAPConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Interface for element having a <code>@soap12:relay</code> attribute.
  */
 public interface RelayBearing {
     
     /** The soap12:@relay attribute local name. */
-    @Nonnull public static final String SOAP12_RELAY_ATTR_LOCAL_NAME = "relay";
+    @Nonnull @NotEmpty public static final String SOAP12_RELAY_ATTR_LOCAL_NAME = "relay";
 
     /** The soap12:@relay qualified attribute name. */
     @Nonnull public static final QName SOAP12_RELAY_ATTR_NAME =
@@ -64,4 +66,4 @@ public interface RelayBearing {
      */
     public void setSOAP12Relay(@Nullable final XSBooleanValue newRelay);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap12/RoleBearing.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap12/RoleBearing.java
index a070f5c6a..be3a39dde 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/soap12/RoleBearing.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/soap12/RoleBearing.java
@@ -23,13 +23,15 @@ import javax.xml.namespace.QName;
 
 import org.opensaml.soap.util.SOAPConstants;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
 /**
  * Interface for element having a <code>@soap12:role</code> attribute.
  */
 public interface RoleBearing {
     
     /** The soap12:@role attribute local name. */
-    @Nonnull public static final String SOAP12_ROLE_ATTR_LOCAL_NAME = "role";
+    @Nonnull @NotEmpty public static final String SOAP12_ROLE_ATTR_LOCAL_NAME = "role";
 
     /** The soap12:@role qualified attribute name. */
     @Nonnull public static final QName SOAP12_ROLE_ATTR_NAME =
@@ -49,4 +51,4 @@ public interface RoleBearing {
      */
     public void setSOAP12Role(@Nullable final String newRole);
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/AbstractBaseClientStorageServiceTest.java b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/AbstractBaseClientStorageServiceTest.java
index 515d0a263..e06e33145 100644
--- a/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/AbstractBaseClientStorageServiceTest.java
+++ b/opensaml-storage-impl/src/test/java/org/opensaml/storage/impl/client/AbstractBaseClientStorageServiceTest.java
@@ -22,6 +22,7 @@ import javax.annotation.Nonnull;
 import org.springframework.core.io.ClassPathResource;
 import org.testng.Assert;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.net.CookieManager;
 import net.shibboleth.shared.resource.Resource;
@@ -35,7 +36,7 @@ import net.shibboleth.shared.spring.resource.ResourceHelper;
 public class AbstractBaseClientStorageServiceTest {
 
     /** Storage name. */
-    @Nonnull public static final String STORAGE_NAME = "foo";
+    @Nonnull @NotEmpty public static final String STORAGE_NAME = "foo";
     
     private Resource keystoreResource;
     private Resource versionResource;
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/keyinfo/KeyInfoSupport.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/keyinfo/KeyInfoSupport.java
index c20a0bf03..5570a4d62 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/keyinfo/KeyInfoSupport.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/keyinfo/KeyInfoSupport.java
@@ -91,6 +91,7 @@ import org.slf4j.Logger;
 
 import com.google.common.base.Strings;
 
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.codec.Base64Support;
 import net.shibboleth.shared.codec.DecodingException;
 import net.shibboleth.shared.codec.EncodingException;
@@ -1072,7 +1073,7 @@ public class KeyInfoSupport {
      * @return the encoded CryptoBinary value
      * @throws EncodingException if the BigInteger as bytes can not be base64 encoded.
      */
-    @Nonnull public static final String encodeCryptoBinaryFromBigInteger(@Nonnull final BigInteger bigInt) 
+    @Nonnull @NotEmpty public static final String encodeCryptoBinaryFromBigInteger(@Nonnull final BigInteger bigInt) 
             throws EncodingException {
         Constraint.isNotNull(bigInt, "BigInteger cannot be null");
         
@@ -1266,4 +1267,4 @@ public class KeyInfoSupport {
         return null;
     }
 
-}
\ No newline at end of file
+}
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/signature/X509IssuerSerial.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/signature/X509IssuerSerial.java
index b17bbd9c4..e6a3c626b 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/signature/X509IssuerSerial.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/signature/X509IssuerSerial.java
@@ -37,7 +37,7 @@ public interface X509IssuerSerial extends XMLObject {
             DEFAULT_ELEMENT_LOCAL_NAME, SignatureConstants.XMLSIG_PREFIX);
 
     /** Local name of the XSI type. */
-    @Nonnull public static final String TYPE_LOCAL_NAME = "X509IssuerSerialType";
+    @Nonnull @NotEmpty public static final String TYPE_LOCAL_NAME = "X509IssuerSerialType";
 
     /** QName of the XSI type. */
     @Nonnull @NotEmpty public static final QName TYPE_NAME = new QName(SignatureConstants.XMLSIG_NS, TYPE_LOCAL_NAME,
@@ -71,4 +71,4 @@ public interface X509IssuerSerial extends XMLObject {
      */
     public void setX509SerialNumber(@Nullable final X509SerialNumber newX509SerialNumber);
 
-}
\ No newline at end of file
+}

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


More information about the commits mailing list