[java-opensaml] branch master updated: OSJ-291 - Sweep SAML XMLObject interfaces for consistency

Scott Cantor cantor.2 at osu.edu
Mon Nov 25 19:32:27 EST 2019


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

scantor pushed a commit to branch master
in repository java-opensaml.

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

The following commit(s) were added to refs/heads/master by this push:
       new  d5f0431   OSJ-291 - Sweep SAML XMLObject interfaces for consistency
d5f0431 is described below

commit d5f043105e3f73fcfa99848bdb424829494e49a7
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Mon Nov 25 19:32:20 2019 -0500

    OSJ-291 - Sweep SAML XMLObject interfaces for consistency
    
    https://issues.shibboleth.net/jira/browse/OSJ-291
    
    Further cleanup of SAML 2 core.
    Misc. WS-* and SOAP adjustments.
---
 .../java/org/opensaml/saml/saml2/core/Action.java  | 21 +++-------------
 .../org/opensaml/saml/saml2/core/Artifact.java     | 24 ++----------------
 .../opensaml/saml/saml2/core/AssertionIDRef.java   | 25 ++++++++++++++-----
 .../opensaml/saml/saml2/core/AssertionURIRef.java  | 26 ++++++++++++++-----
 .../opensaml/saml/saml2/core/AttributeValue.java   |  2 +-
 .../org/opensaml/saml/saml2/core/Audience.java     | 28 ++-------------------
 .../saml/saml2/core/AuthenticatingAuthority.java   | 25 ++++++-------------
 .../saml/saml2/core/AuthnContextClassRef.java      | 17 ++-----------
 .../saml/saml2/core/AuthnContextDeclRef.java       | 17 ++-----------
 .../org/opensaml/saml/saml2/core/GetComplete.java  | 17 ++-----------
 .../org/opensaml/saml/saml2/core/NameIDType.java   | 18 +++-----------
 .../java/org/opensaml/saml/saml2/core/NewID.java   | 17 ++-----------
 .../org/opensaml/saml/saml2/core/RequesterID.java  | 21 +++-------------
 .../org/opensaml/saml/saml2/core/SessionIndex.java | 17 ++-----------
 .../opensaml/saml/saml2/core/StatusMessage.java    | 25 ++++++++++++++-----
 .../saml/saml2/core/impl/AbstractNameIDType.java   | 26 +++----------------
 .../core/impl/AbstractNameIDTypeMarshaller.java    | 11 +++++---
 .../core/impl/AbstractNameIDTypeUnmarshaller.java  | 21 ++++++----------
 .../opensaml/saml/saml2/core/impl/ActionImpl.java  | 24 ++----------------
 .../saml/saml2/core/impl/ActionMarshaller.java     |  9 ++++---
 .../saml/saml2/core/impl/ActionUnmarshaller.java   | 10 ++------
 .../saml/saml2/core/impl/ArtifactImpl.java         | 27 +++-----------------
 .../saml/saml2/core/impl/ArtifactMarshaller.java   |  4 +--
 .../saml/saml2/core/impl/ArtifactUnmarshaller.java | 12 ++-------
 .../saml/saml2/core/impl/AssertionIDRefImpl.java   | 26 +++----------------
 .../saml2/core/impl/AssertionIDRefMarshaller.java  | 11 +++++---
 .../core/impl/AssertionIDRefUnmarshaller.java      | 14 +++--------
 .../saml/saml2/core/impl/AssertionURIRefImpl.java  | 26 +++----------------
 .../saml2/core/impl/AssertionURIRefMarshaller.java | 11 +++++---
 .../core/impl/AssertionURIRefUnmarshaller.java     | 14 +++--------
 .../saml/saml2/core/impl/AudienceImpl.java         | 25 ++-----------------
 .../saml/saml2/core/impl/AudienceMarshaller.java   |  9 ++++---
 .../saml/saml2/core/impl/AudienceUnmarshaller.java | 10 ++------
 .../core/impl/AuthenticatingAuthorityImpl.java     | 24 ++----------------
 .../impl/AuthenticatingAuthorityMarshaller.java    | 11 +++++---
 .../impl/AuthenticatingAuthorityUnmarshaller.java  | 12 +++------
 .../saml2/core/impl/AuthnContextClassRefImpl.java  | 25 ++-----------------
 .../core/impl/AuthnContextClassRefMarshaller.java  |  9 ++++---
 .../impl/AuthnContextClassRefUnmarshaller.java     | 12 +++------
 .../saml2/core/impl/AuthnContextDeclRefImpl.java   | 25 ++-----------------
 .../core/impl/AuthnContextDeclRefMarshaller.java   |  9 ++++---
 .../core/impl/AuthnContextDeclRefUnmarshaller.java | 10 ++------
 .../saml/saml2/core/impl/GetCompleteImpl.java      | 25 ++-----------------
 .../saml2/core/impl/GetCompleteMarshaller.java     |  4 +--
 .../saml2/core/impl/GetCompleteUnmarshaller.java   | 14 +++--------
 .../opensaml/saml/saml2/core/impl/NameIDImpl.java  |  2 +-
 .../opensaml/saml/saml2/core/impl/NewIDImpl.java   | 27 +++-----------------
 .../saml/saml2/core/impl/NewIDMarshaller.java      |  4 +--
 .../saml/saml2/core/impl/NewIDUnmarshaller.java    | 11 ++------
 .../saml/saml2/core/impl/RequesterIDImpl.java      | 27 +++-----------------
 .../saml2/core/impl/RequesterIDMarshaller.java     |  8 +++---
 .../saml2/core/impl/RequesterIDUnmarshaller.java   | 13 +++-------
 .../saml/saml2/core/impl/SessionIndexImpl.java     | 25 ++-----------------
 .../saml2/core/impl/SessionIndexMarshaller.java    |  5 ++--
 .../saml2/core/impl/SessionIndexUnmarshaller.java  | 11 ++------
 .../saml/saml2/core/impl/StatusMessageImpl.java    | 29 +++-------------------
 .../saml2/core/impl/StatusMessageMarshaller.java   | 10 ++++----
 .../saml2/core/impl/StatusMessageUnmarshaller.java | 15 +++--------
 .../org/opensaml/saml/common/RoundTripTest.java    |  2 +-
 .../AddAudienceRestrictionToAssertionsTest.java    |  4 +--
 .../ext/saml2mdrpi/impl/PublicationInfoTest.java   |  6 ++---
 .../ext/saml2mdrpi/impl/RegistrationInfoTest.java  |  6 ++---
 .../saml2mdrpi/impl/RegistrationPolicyTest.java    |  4 +--
 .../saml/ext/saml2mdrpi/impl/UsagePolicyTest.java  |  4 +--
 .../ext/saml2mdui/impl/InformationURLTest.java     |  4 +--
 .../saml2mdui/impl/PrivacyStatementURLTest.java    |  4 +--
 .../impl/FunctionDrivenMetadataIndexTest.java      |  6 ++---
 .../AudienceRestrictionConditionValidatorTest.java |  2 +-
 .../impl/ExtractProxiedRequestersHandlerTest.java  |  4 +--
 .../saml/saml2/core/impl/AssertionIDRefTest.java   |  4 +--
 .../saml/saml2/core/impl/AssertionURIRefTest.java  |  4 +--
 .../saml/saml2/core/impl/AudienceTest.java         |  4 +--
 .../saml/saml2/core/impl/RequesterIDTest.java      |  4 +--
 .../saml/saml2/core/impl/StatusMessageTest.java    |  4 +--
 .../saml2/encryption/SimpleEncryptionTest.java     |  2 +-
 .../profile/impl/AddStatusToResponseTest.java      |  2 +-
 .../java/org/opensaml/soap/util/SOAPSupport.java   |  2 +-
 .../http/impl/HttpClientRequestSOAP11Encoder.java  | 13 +++-------
 .../encoder/http/impl/HTTPSOAP11Encoder.java       | 13 +++-------
 .../wsaddressing/impl/AttributedURIMarshaller.java |  2 +-
 .../impl/AttributedURIUnmarshaller.java            |  2 +-
 .../messaging/impl/AddActionHandler.java           |  5 ++--
 .../messaging/impl/AddMessageIDHandler.java        |  2 +-
 .../messaging/impl/AddRelatesToHandler.java        |  2 +-
 .../messaging/impl/ExtractMessageIDHandler.java    |  2 +-
 .../messaging/impl/ValidateActionHandler.java      |  2 +-
 86 files changed, 295 insertions(+), 777 deletions(-)

diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Action.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Action.java
index d48f741..b9438a9 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Action.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Action.java
@@ -21,6 +21,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import org.opensaml.core.xml.schema.XSString;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
@@ -29,20 +30,20 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 /**
  * SAML 2.0 Core Action.
  */
-public interface Action extends SAMLObject {
+public interface Action extends SAMLObject, XSString {
 
     /** Element local name. */
     @Nonnull @NotEmpty static final String DEFAULT_ELEMENT_LOCAL_NAME = "Action";
 
     /** Default element name. */
-    static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
+    @Nonnull 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 @NotEmpty static final String TYPE_LOCAL_NAME = "ActionType";
 
     /** QName of the XSI type. */
-    static final QName TYPE_NAME = new QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME,
+    @Nonnull static final QName TYPE_NAME = new QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /** Name of the Namespace attribute. */
@@ -115,20 +116,6 @@ public interface Action extends SAMLObject {
      * @param newNamespace the namespace scope of the specified action
      */
     void setNamespace(@Nullable final String newNamespace);
-
-    /**
-     * Gets the value of the action to be performed.
-     * 
-     * @return the value of the action to be performed
-     */
-    @Nullable String getValue();
-
-    /**
-     * Sets the value of the action to be performed.
-     * 
-     * @param value the value of the action to be performed
-     */
-    void setValue(@Nullable final String value);
     
     /**
      * Gets the value of the action to be performed.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Artifact.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Artifact.java
index eac9f55..9c128d2 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Artifact.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Artifact.java
@@ -25,6 +25,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import org.opensaml.core.xml.schema.XSString;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
@@ -33,7 +34,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 /**
  * SAML 2.0 Core Artifact.
  */
-public interface Artifact extends SAMLObject {
+public interface Artifact extends SAMLObject, XSString {
 
     /** Element local name. */
     @Nonnull @NotEmpty static final String DEFAULT_ELEMENT_LOCAL_NAME = "Artifact";
@@ -41,27 +42,6 @@ public interface Artifact extends SAMLObject {
     /** Default element name. */
     @Nonnull 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 @NotEmpty static final String TYPE_LOCAL_NAME = "ArtifactType";
-
-    /** QName of the XSI type. */
-    @Nonnull static final QName TYPE_NAME = new QName(SAMLConstants.SAML20P_NS, TYPE_LOCAL_NAME,
-            SAMLConstants.SAML20P_PREFIX);
-
-    /**
-     * Get artifact value.
-     * 
-     * @return the artifact value
-     */
-    @Nullable String getValue();
-
-    /**
-     * Set artifact value.
-     * 
-     * @param value new artifact value
-     */
-    void setValue(@Nullable final String value);
     
     /**
      * Get artifact value.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AssertionIDRef.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AssertionIDRef.java
index 2351e33..f81fae4 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AssertionIDRef.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AssertionIDRef.java
@@ -17,34 +17,47 @@
 
 package org.opensaml.saml.saml2.core;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import org.opensaml.core.xml.schema.XSString;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core AssertionIDRef.
  */
-public interface AssertionIDRef extends SAMLObject, Evidentiary {
+public interface AssertionIDRef extends SAMLObject, XSString, Evidentiary {
 
     /** Element local name. */
-    public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AssertionIDRef";
+    @Nonnull @NotEmpty static final String DEFAULT_ELEMENT_LOCAL_NAME = "AssertionIDRef";
 
     /** Default element name. */
-    public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
+    @Nonnull static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /**
      * Gets the ID of the assertion this references.
      * 
      * @return the ID of the assertion this references
+     * 
+     * @deprecated
      */
-    public String getAssertionID();
+    @Nullable default String getAssertionID() {
+        return getValue();
+    }
 
     /**
      * Sets the ID of the assertion this references.
      * 
-     * @param newID the ID of the assertion this references
+     * @param value the ID of the assertion this references
+     * 
+     * @deprecated
      */
-    public void setAssertionID(String newID);
+    default void setAssertionID(@Nullable final String value) {
+        setValue(value);
+    }
 }
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AssertionURIRef.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AssertionURIRef.java
index 8629a32..fce95c6 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AssertionURIRef.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AssertionURIRef.java
@@ -17,34 +17,48 @@
 
 package org.opensaml.saml.saml2.core;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import org.opensaml.core.xml.schema.XSURI;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core AssertionURIRef.
  */
-public interface AssertionURIRef extends SAMLObject, Evidentiary {
+public interface AssertionURIRef extends SAMLObject, XSURI, Evidentiary {
 
     /** Element local name. */
-    public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AssertionURIRef";
+    @Nonnull @NotEmpty static final String DEFAULT_ELEMENT_LOCAL_NAME = "AssertionURIRef";
 
     /** Default element name. */
-    public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
+    @Nonnull static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
 
     /**
      * Gets the URI of the assertion this references.
      * 
      * @return the URI of the assertion this references
+     * 
+     * @deprecated
      */
-    public String getAssertionURI();
+    @Nullable default String getAssertionURI() {
+        return getURI();
+    }
 
     /**
      * Sets the URI of the assertion this references.
      * 
-     * @param newURI the URI of the assertion this references
+     * @param uri the URI of the assertion this references
+     * 
+     * @deprecated
      */
-    public void setAssertionURI(String newURI);
+    default void setAssertionURI(@Nullable final String uri) {
+        setURI(uri);
+    }
+    
 }
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AttributeValue.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AttributeValue.java
index 4f0ac50..6f2b96a 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AttributeValue.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AttributeValue.java
@@ -23,7 +23,7 @@ import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
 /**
- * This interface defines how the object representing a SAML 12 <code> AttributeValue </code> element behaves.
+ * This interface defines how the object representing a SAML 2 <code> AttributeValue </code> element behaves.
  */
 public interface AttributeValue extends SAMLObject {
 
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Audience.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Audience.java
index 2fdc202..b24d12f 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Audience.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/Audience.java
@@ -21,6 +21,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import org.opensaml.core.xml.schema.XSURI;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
@@ -29,7 +30,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 /**
  * SAML 2.0 Core Audience.
  */
-public interface Audience extends SAMLObject {
+public interface Audience extends SAMLObject, XSURI {
 
     /** Element local name. */
     @Nonnull @NotEmpty static final String DEFAULT_ELEMENT_LOCAL_NAME = "Audience";
@@ -38,31 +39,6 @@ public interface Audience extends SAMLObject {
     @Nonnull 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 @NotEmpty static final String TYPE_LOCAL_NAME = "AudienceType";
-
-    /** QName of the XSI type. */
-    @Nonnull static final QName TYPE_NAME = new QName(SAMLConstants.SAML20_NS, TYPE_LOCAL_NAME,
-            SAMLConstants.SAML20_PREFIX);
-
-    /**
-     * Gets the URI of the audience for the assertion.
-     * 
-     * @return the URI of the audience for the assertion
-     * 
-     * @since 4.0.0
-     */
-    @Nullable String getURI();
-
-    /**
-     * Sets the URI of the audience for the assertion.
-     * 
-     * @param uri the URI of the audience for the assertion
-     * 
-     * @since 4.0.0
-     */
-    void setURI(@Nullable final String uri);
-
     /**
      * Gets the URI of the audience for the assertion.
      * 
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthenticatingAuthority.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthenticatingAuthority.java
index 6609c4a..fb4c8b3 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthenticatingAuthority.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthenticatingAuthority.java
@@ -21,34 +21,25 @@
 
 package org.opensaml.saml.saml2.core;
 
+import javax.annotation.Nonnull;
 import javax.xml.namespace.QName;
 
+import org.opensaml.core.xml.schema.XSURI;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core AuthenticatingAuthority.
  */
-public interface AuthenticatingAuthority extends SAMLObject {
+public interface AuthenticatingAuthority extends SAMLObject, XSURI {
 
     /** Local Name of AuthenticatingAuthority. */
-    public static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthenticatingAuthority";
+    @Nonnull @NotEmpty static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthenticatingAuthority";
 
     /** Default element name. */
-    public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
+    @Nonnull static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20_PREFIX);
-
-    /**
-     * Gets the URI of this Authenticating Authority.
-     * 
-     * @return AuthenticatingAuthority URI
-     */
-    public String getURI();
-
-    /**
-     * Sets the URI of this Authenticating Authority.
-     * 
-     * @param newURI the URI of this Authenticating Authority
-     */
-    public void setURI(String newURI);
+    
 }
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnContextClassRef.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnContextClassRef.java
index 966bba3..3a9dd37 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnContextClassRef.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnContextClassRef.java
@@ -24,6 +24,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import org.opensaml.core.xml.schema.XSURI;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
@@ -32,7 +33,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 /**
  * SAML 2.0 Core AuthnContextClassRef.
  */
-public interface AuthnContextClassRef extends SAMLObject {
+public interface AuthnContextClassRef extends SAMLObject, XSURI {
     
     /** Element local name. */
     @Nonnull @NotEmpty static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthnContextClassRef";
@@ -40,20 +41,6 @@ public interface AuthnContextClassRef extends SAMLObject {
     /** Default element name. */
     @Nonnull static final QName DEFAULT_ELEMENT_NAME = 
         new QName(SAMLConstants.SAML20_NS, DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20_PREFIX);
-
-    /**
-     * Gets the URI reference to an authentication context class.
-     * 
-     * @return authentication context class reference URI
-     */
-    @Nullable String getURI();
-
-    /**
-     * Sets the URI reference to an authentication context class.
-     * 
-     * @param uri the new AuthnContextClassRef URI
-     */
-    void setURI(@Nullable final String uri);
     
     /**
      * Gets the URI reference to an authentication context class.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnContextDeclRef.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnContextDeclRef.java
index 3b28ad8..6b23b6f 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnContextDeclRef.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/AuthnContextDeclRef.java
@@ -21,6 +21,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import org.opensaml.core.xml.schema.XSURI;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
@@ -29,7 +30,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 /**
  * SAML 2.0 Core AuthnContextDeclRef.
  */
-public interface AuthnContextDeclRef extends SAMLObject {
+public interface AuthnContextDeclRef extends SAMLObject, XSURI {
     
     /** Element local name. */
     @Nonnull @NotEmpty static final String DEFAULT_ELEMENT_LOCAL_NAME = "AuthnContextDeclRef";
@@ -42,20 +43,6 @@ public interface AuthnContextDeclRef extends SAMLObject {
      * Gets the URI reference to an authentication context declaration.
      * 
      * @return authentication context declaration reference URI
-     */
-    @Nullable String getURI();
-
-    /**
-     * Sets the URI reference to an authentication context declaration.
-     * 
-     * @param uri the new AuthnContextDeclRef URI
-     */
-    void setURI(@Nullable final String uri);
-    
-    /**
-     * Gets the URI reference to an authentication context declaration.
-     * 
-     * @return authentication context declaration reference URI
      * 
      * @deprecated
      */
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/GetComplete.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/GetComplete.java
index 6c006bb..75e5adb 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/GetComplete.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/GetComplete.java
@@ -21,6 +21,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import org.opensaml.core.xml.schema.XSURI;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
@@ -29,7 +30,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 /**
  * SAML 2.0 Core GetComplete.
  */
-public interface GetComplete extends SAMLObject {
+public interface GetComplete extends SAMLObject, XSURI {
 
     /** Element Local Name. */
     @Nonnull @NotEmpty static final String DEFAULT_ELEMENT_LOCAL_NAME = "GetComplete";
@@ -42,20 +43,6 @@ public interface GetComplete extends SAMLObject {
      * Gets the GetComplete URI value.
      * 
      * @return GetComplete URI
-     */
-    @Nullable String getURI();
-
-    /**
-     * Sets the GetComplete URI.
-     * 
-     * @param uri the GetComplete URI
-     */
-    void setURI(@Nullable final String uri);
-
-    /**
-     * Gets the GetComplete URI value.
-     * 
-     * @return GetComplete URI
      * 
      * @deprecated
      */
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 8fe6f94..9236190 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
@@ -17,10 +17,12 @@
 
 package org.opensaml.saml.saml2.core;
 
+import org.opensaml.core.xml.schema.XSString;
+
 /**
  * SAML 2.0 Assertion NameID schema type.
  */
-public interface NameIDType {
+public interface NameIDType extends XSString {
 
     /** NameQualifier attribute name. */
     public static final String NAME_QUALIFIER_ATTRIB_NAME = "NameQualifier";
@@ -63,20 +65,6 @@ public interface NameIDType {
     public static final String ENCRYPTED = "urn:oasis:names:tc:SAML:2.0:nameid-format:encrypted";
 
     /**
-     * Gets the value of this type.
-     * 
-     * @return the value of this type
-     */
-    public String getValue();
-
-    /**
-     * Sets the value of this type.
-     * 
-     * @param newValue the value of this type
-     */
-    public void setValue(String newValue);
-
-    /**
      * Gets the NameQualifier value.
      * 
      * @return the NameQualifier value
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NewID.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NewID.java
index f830e2f..cc364fb 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NewID.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/NewID.java
@@ -25,6 +25,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import org.opensaml.core.xml.schema.XSString;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
@@ -33,7 +34,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 /**
  * SAML 2.0 Core NewID.
  */
-public interface NewID extends SAMLObject {
+public interface NewID extends SAMLObject, XSString {
 
     /** Element local name. */
     @Nonnull @NotEmpty static final String DEFAULT_ELEMENT_LOCAL_NAME = "NewID";
@@ -46,20 +47,6 @@ public interface NewID extends SAMLObject {
      * Get NewID value.
      * 
      * @return NewID value
-     */
-    @Nullable String getValue();
-
-    /**
-     * Set NewID value.
-     * 
-     * @param value the new NewID value
-     */
-    void setValue(@Nullable final String value);
-
-    /**
-     * Get NewID value.
-     * 
-     * @return NewID value
      * 
      * @deprecated
      */
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/RequesterID.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/RequesterID.java
index 5e82bb3..62d6a88 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/RequesterID.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/RequesterID.java
@@ -21,6 +21,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import org.opensaml.core.xml.schema.XSURI;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
@@ -29,7 +30,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 /**
  * SAML 2.0 Core RequesterID.
  */
-public interface RequesterID extends SAMLObject {
+public interface RequesterID extends SAMLObject, XSURI {
 
     /** Element Local Name. */
     @Nonnull @NotEmpty static final String DEFAULT_ELEMENT_LOCAL_NAME = "RequesterID";
@@ -42,25 +43,11 @@ public interface RequesterID extends SAMLObject {
      * Gets the RequesterID value.
      * 
      * @return RequesterID value
-     */
-    @Nullable String getValue();
-
-    /**
-     * Sets the RequesterID value.
-     * 
-     * @param value the RequesterID value
-     */
-    void setValue(@Nullable final String value);
-
-    /**
-     * Gets the RequesterID value.
-     * 
-     * @return RequesterID value
      * 
      * @deprecated
      */
     @Nullable default String getRequesterID() {
-        return getValue();
+        return getURI();
     }
 
     /**
@@ -71,7 +58,7 @@ public interface RequesterID extends SAMLObject {
      * @deprecated
      */
     default void setRequesterID(@Nullable final String value) {
-        setValue(value);
+        setURI(value);
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/SessionIndex.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/SessionIndex.java
index 3dc57e9..7607cc7 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/SessionIndex.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/SessionIndex.java
@@ -25,6 +25,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import org.opensaml.core.xml.schema.XSString;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
@@ -33,7 +34,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 /**
  * SAML 2.0 Core SessionIndex.
  */
-public interface SessionIndex extends SAMLObject {
+public interface SessionIndex extends SAMLObject, XSString {
 
     /** Element local name. */
     @Nonnull @NotEmpty static final String DEFAULT_ELEMENT_LOCAL_NAME = "SessionIndex";
@@ -46,20 +47,6 @@ public interface SessionIndex extends SAMLObject {
      * Gets the session index value of the request.
      * 
      * @return the session index value of the request
-     */
-    @Nullable String getValue();
-
-    /**
-     * Sets the session index value of the request.
-     * 
-     * @param value the new session index value of the request
-     */
-    void setValue(@Nullable final String value);
-
-    /**
-     * Gets the session index value of the request.
-     * 
-     * @return the session index value of the request
      * 
      * @deprecated
      */
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/StatusMessage.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/StatusMessage.java
index f23f9b8..95a2d92 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/StatusMessage.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/core/StatusMessage.java
@@ -17,34 +17,47 @@
 
 package org.opensaml.saml.saml2.core;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.xml.namespace.QName;
 
+import org.opensaml.core.xml.schema.XSString;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
+import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+
 /**
  * SAML 2.0 Core StatusMessage.
  */
-public interface StatusMessage extends SAMLObject {
+public interface StatusMessage extends SAMLObject, XSString {
 
     /** Local Name of StatusMessage. */
-    public static final String DEFAULT_ELEMENT_LOCAL_NAME = "StatusMessage";
+    @Nonnull @NotEmpty static final String DEFAULT_ELEMENT_LOCAL_NAME = "StatusMessage";
 
     /** Default element name. */
-    public static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
+    @Nonnull static final QName DEFAULT_ELEMENT_NAME = new QName(SAMLConstants.SAML20P_NS, DEFAULT_ELEMENT_LOCAL_NAME,
             SAMLConstants.SAML20P_PREFIX);
 
     /**
      * Gets the Message of this Status Message.
      * 
      * @return StatusMessage message
+     * 
+     * @deprecated
      */
-    public String getMessage();
+    @Nullable default String getMessage() {
+        return getValue();
+    }
 
     /**
      * Sets the Message of this Status Message.
      * 
-     * @param newMessage the Message of this Status Message
+     * @param value the Message of this Status Message
+     * 
+     * @deprecated
      */
-    public void setMessage(String newMessage);
+    default void setMessage(@Nullable final String value) {
+        setValue(value);
+    }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AbstractNameIDType.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AbstractNameIDType.java
index f121307..fdc18e3 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AbstractNameIDType.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AbstractNameIDType.java
@@ -17,19 +17,13 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import java.util.List;
-
-import org.opensaml.core.xml.AbstractXMLObject;
-import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.schema.impl.XSStringImpl;
 import org.opensaml.saml.saml2.core.NameIDType;
 
 /**
  * Abstract implementation of {@link org.opensaml.saml.saml2.core.NameIDType}.
  */
-public class AbstractNameIDType extends AbstractXMLObject implements NameIDType {
-
-    /** Name of the Name ID. */
-    private String name;
+public class AbstractNameIDType extends XSStringImpl implements NameIDType {
     
     /** Name Qualifier of the Name ID. */
     private String nameQualifier;
@@ -54,16 +48,6 @@ public class AbstractNameIDType extends AbstractXMLObject implements NameIDType
             final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
     }
-
-    /** {@inheritDoc} */
-    public String getValue() {
-        return name;
-    }
-    
-    /** {@inheritDoc} */
-    public void setValue(final String newName) {
-        this.name = prepareForAssignment(this.name, newName);
-    }
     
     /** {@inheritDoc} */
     public String getNameQualifier() {
@@ -104,9 +88,5 @@ public class AbstractNameIDType extends AbstractXMLObject implements NameIDType
     public void setSPProvidedID(final String newSPProvidedID) {
         this.spProvidedID = prepareForAssignment(this.spProvidedID, newSPProvidedID);
     }
-
-    /** {@inheritDoc} */
-    public List<XMLObject> getOrderedChildren() {
-        return null;
-    }
+    
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AbstractNameIDTypeMarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AbstractNameIDTypeMarshaller.java
index 64f2646..406c04c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AbstractNameIDTypeMarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AbstractNameIDTypeMarshaller.java
@@ -21,15 +21,15 @@ import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.MarshallingException;
-import org.opensaml.saml.common.AbstractSAMLObjectMarshaller;
+import org.opensaml.core.xml.schema.impl.XSStringMarshaller;
 import org.opensaml.saml.saml2.core.NameID;
 import org.opensaml.saml.saml2.core.NameIDType;
 import org.w3c.dom.Element;
 
 /**
- * A thread safe Marshaller for {@link org.opensaml.saml.saml2.core.NameIDType} objects.
+ * A thread safe Marshaller for {@link NameIDType} objects.
  */
-public abstract class AbstractNameIDTypeMarshaller extends AbstractSAMLObjectMarshaller {
+public abstract class AbstractNameIDTypeMarshaller extends XSStringMarshaller {
 
     /** {@inheritDoc} */
     protected void marshallAttributes(final XMLObject samlObject, final Element domElement)
@@ -57,6 +57,9 @@ public abstract class AbstractNameIDTypeMarshaller extends AbstractSAMLObjectMar
     protected void marshallElementContent(final XMLObject samlObject, final Element domElement)
             throws MarshallingException {
         final NameIDType nameID = (NameIDType) samlObject;
-        ElementSupport.appendTextContent(domElement, nameID.getValue());
+        
+        if (nameID.getValue() != null) {
+            ElementSupport.appendTextContent(domElement, nameID.getValue());
+        }
     }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AbstractNameIDTypeUnmarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AbstractNameIDTypeUnmarshaller.java
index 69c10fc..b52c338 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AbstractNameIDTypeUnmarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AbstractNameIDTypeUnmarshaller.java
@@ -19,34 +19,27 @@ package org.opensaml.saml.saml2.core.impl;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.UnmarshallingException;
-import org.opensaml.saml.common.AbstractSAMLObjectUnmarshaller;
-import org.opensaml.saml.saml2.core.NameID;
+import org.opensaml.core.xml.schema.impl.XSStringUnmarshaller;
 import org.opensaml.saml.saml2.core.NameIDType;
 import org.w3c.dom.Attr;
 
 /**
- * A thread-safe Unmarshaller for {@link org.opensaml.saml.saml2.core.NameIDType} objects.
+ * A thread-safe Unmarshaller for {@link NameIDType} objects.
  */
-public abstract class AbstractNameIDTypeUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-    /** {@inheritDoc} */
-    protected void processElementContent(final XMLObject samlObject, final String elementContent) {
-        final NameIDType nameID = (NameIDType) samlObject;
-        nameID.setValue(elementContent);
-    }
+public abstract class AbstractNameIDTypeUnmarshaller extends XSStringUnmarshaller {
 
     /** {@inheritDoc} */
     protected void processAttribute(final XMLObject samlObject, final Attr attribute) throws UnmarshallingException {
         final NameIDType nameID = (NameIDType) samlObject;
         
         if (attribute.getNamespaceURI() == null) {
-            if (attribute.getLocalName().equals(NameID.NAME_QUALIFIER_ATTRIB_NAME)) {
+            if (attribute.getLocalName().equals(NameIDType.NAME_QUALIFIER_ATTRIB_NAME)) {
                 nameID.setNameQualifier(attribute.getValue());
-            } else if (attribute.getLocalName().equals(NameID.SP_NAME_QUALIFIER_ATTRIB_NAME)) {
+            } else if (attribute.getLocalName().equals(NameIDType.SP_NAME_QUALIFIER_ATTRIB_NAME)) {
                 nameID.setSPNameQualifier(attribute.getValue());
-            } else if (attribute.getLocalName().equals(NameID.FORMAT_ATTRIB_NAME)) {
+            } else if (attribute.getLocalName().equals(NameIDType.FORMAT_ATTRIB_NAME)) {
                 nameID.setFormat(attribute.getValue());
-            } else if (attribute.getLocalName().equals(NameID.SPPROVIDED_ID_ATTRIB_NAME)) {
+            } else if (attribute.getLocalName().equals(NameIDType.SPPROVIDED_ID_ATTRIB_NAME)) {
                 nameID.setSPProvidedID(attribute.getValue());
             } else {
                 super.processAttribute(samlObject, attribute);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ActionImpl.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ActionImpl.java
index 051f9f9..eadae62 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ActionImpl.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ActionImpl.java
@@ -21,23 +21,17 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import java.util.List;
-
-import org.opensaml.core.xml.AbstractXMLObject;
-import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.schema.impl.XSStringImpl;
 import org.opensaml.saml.saml2.core.Action;
 
 /**
  * A concrete implementation of {@link Action}.
  */
-public class ActionImpl extends AbstractXMLObject implements Action {
+public class ActionImpl extends XSStringImpl implements Action {
 
     /** URI of the Namespace of this Action. */
     private String namespace;
 
-    /** Action value. */
-    private String action;
-
     /**
      * Constructor.
      * 
@@ -59,18 +53,4 @@ public class ActionImpl extends AbstractXMLObject implements Action {
         this.namespace = prepareForAssignment(this.namespace, newNamespace);
     }
 
-    /** {@inheritDoc} */
-    public String getValue() {
-        return action;
-    }
-
-    /** {@inheritDoc} */
-    public void setValue(final String value) {
-        action = prepareForAssignment(action, value);
-    }
-
-    /** {@inheritDoc} */
-    public List<XMLObject> getOrderedChildren() {
-        return null;
-    }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ActionMarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ActionMarshaller.java
index 12935b5..bd0b0aa 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ActionMarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ActionMarshaller.java
@@ -25,14 +25,14 @@ import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.MarshallingException;
-import org.opensaml.saml.common.AbstractSAMLObjectMarshaller;
+import org.opensaml.core.xml.schema.impl.XSStringMarshaller;
 import org.opensaml.saml.saml2.core.Action;
 import org.w3c.dom.Element;
 
 /**
  * A thread-safe Marshaller for {@link Action}.
  */
-public class ActionMarshaller extends AbstractSAMLObjectMarshaller {
+public class ActionMarshaller extends XSStringMarshaller {
 
     /** {@inheritDoc} */
     protected void marshallAttributes(final XMLObject samlObject, final Element domElement)
@@ -48,6 +48,9 @@ public class ActionMarshaller extends AbstractSAMLObjectMarshaller {
     protected void marshallElementContent(final XMLObject samlObject, final Element domElement)
             throws MarshallingException {
         final Action action = (Action) samlObject;
-        ElementSupport.appendTextContent(domElement, action.getValue());
+        
+        if (action.getValue() != null) {
+            ElementSupport.appendTextContent(domElement, action.getValue());
+        }
     }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ActionUnmarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ActionUnmarshaller.java
index d8a7b4e..0d1c348 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ActionUnmarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ActionUnmarshaller.java
@@ -23,20 +23,14 @@ package org.opensaml.saml.saml2.core.impl;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.UnmarshallingException;
-import org.opensaml.saml.common.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.core.xml.schema.impl.XSStringUnmarshaller;
 import org.opensaml.saml.saml2.core.Action;
 import org.w3c.dom.Attr;
 
 /**
  * A thread-safe Unmarshaller for {@link Action}.
  */
-public class ActionUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-    /** {@inheritDoc} */
-    protected void processElementContent(final XMLObject samlObject, final String elementContent) {
-        final Action action = (Action) samlObject;
-        action.setValue(elementContent);
-    }
+public class ActionUnmarshaller extends XSStringUnmarshaller {
 
     /** {@inheritDoc} */
     protected void processAttribute(final XMLObject samlObject, final Attr attribute) throws UnmarshallingException {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ArtifactImpl.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ArtifactImpl.java
index e0f0706..3c7bb6c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ArtifactImpl.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ArtifactImpl.java
@@ -21,19 +21,13 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import java.util.List;
-
-import org.opensaml.core.xml.AbstractXMLObject;
-import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.schema.impl.XSStringImpl;
 import org.opensaml.saml.saml2.core.Artifact;
 
 /**
  * Concrete implementation of {@link Artifact}.
  */
-public class ArtifactImpl extends AbstractXMLObject implements Artifact {
-
-    /** Artifact data. */
-    private String artifact;
+public class ArtifactImpl extends XSStringImpl implements Artifact {
 
     /**
      * Constructor.
@@ -45,20 +39,5 @@ public class ArtifactImpl extends AbstractXMLObject implements Artifact {
     protected ArtifactImpl(final String namespaceURI, final String elementLocalName, final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
     }
-
-    /** {@inheritDoc} */
-    public String getValue() {
-        return artifact;
-    }
-
-    /** {@inheritDoc} */
-    public void setValue(final String value) {
-        artifact = prepareForAssignment(artifact, value);
-    }
-
-    /** {@inheritDoc} */
-    public List<XMLObject> getOrderedChildren() {
-        // no children
-        return null;
-    }
+    
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ArtifactMarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ArtifactMarshaller.java
index eb8f0f5..369f899 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ArtifactMarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ArtifactMarshaller.java
@@ -25,14 +25,14 @@ import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.MarshallingException;
-import org.opensaml.saml.common.AbstractSAMLObjectMarshaller;
+import org.opensaml.core.xml.schema.impl.XSStringMarshaller;
 import org.opensaml.saml.saml2.core.Artifact;
 import org.w3c.dom.Element;
 
 /**
  * A thread-safe Marshaller for {@link Artifact}.
  */
-public class ArtifactMarshaller extends AbstractSAMLObjectMarshaller {
+public class ArtifactMarshaller extends XSStringMarshaller {
 
     /** {@inheritDoc} */
     protected void marshallElementContent(final XMLObject samlObject, final Element domElement)
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ArtifactUnmarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ArtifactUnmarshaller.java
index c592aa1..7ffe52b 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ArtifactUnmarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/ArtifactUnmarshaller.java
@@ -21,20 +21,12 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.saml.common.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.core.xml.schema.impl.XSStringUnmarshaller;
 import org.opensaml.saml.saml2.core.Artifact;
 
 /**
  * A thead-safe Unmarshaller for {@link Artifact}.
  */
-public class ArtifactUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-    /** {@inheritDoc} */
-    protected void processElementContent(final XMLObject samlObject, final String elementContent) {
-        final Artifact artifact = (Artifact) samlObject;
-
-        artifact.setValue(elementContent);
-    }
+public class ArtifactUnmarshaller extends XSStringUnmarshaller {
 
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionIDRefImpl.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionIDRefImpl.java
index 632ddb4..ff8aee7 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionIDRefImpl.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionIDRefImpl.java
@@ -21,19 +21,13 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import java.util.List;
-
-import org.opensaml.core.xml.AbstractXMLObject;
-import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.schema.impl.XSStringImpl;
 import org.opensaml.saml.saml2.core.AssertionIDRef;
 
 /**
- * Concrete implementation of {@link org.opensaml.saml.saml2.core.AssertionIDRef}.
+ * Concrete implementation of {@link AssertionIDRef}.
  */
-public class AssertionIDRefImpl extends AbstractXMLObject implements AssertionIDRef {
-
-    /** ID Ref of the Assertion. */
-    private String assertionID;
+public class AssertionIDRefImpl extends XSStringImpl implements AssertionIDRef {
 
     /**
      * Constructor.
@@ -47,18 +41,4 @@ public class AssertionIDRefImpl extends AbstractXMLObject implements AssertionID
         super(namespaceURI, elementLocalName, namespacePrefix);
     }
 
-    /** {@inheritDoc} */
-    public String getAssertionID() {
-        return assertionID;
-    }
-
-    /** {@inheritDoc} */
-    public void setAssertionID(final String newIDRef) {
-        this.assertionID = prepareForAssignment(this.assertionID, newIDRef);
-    }
-
-    /** {@inheritDoc} */
-    public List<XMLObject> getOrderedChildren() {
-        return null;
-    }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionIDRefMarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionIDRefMarshaller.java
index 99438c7..2ecbf1a 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionIDRefMarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionIDRefMarshaller.java
@@ -25,19 +25,22 @@ import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.MarshallingException;
-import org.opensaml.saml.common.AbstractSAMLObjectMarshaller;
+import org.opensaml.core.xml.schema.impl.XSStringMarshaller;
 import org.opensaml.saml.saml2.core.AssertionIDRef;
 import org.w3c.dom.Element;
 
 /**
- * A thread-safe Marshaller for {@link org.opensaml.saml.saml2.core.AssertionIDRef}.
+ * A thread-safe Marshaller for {@link AssertionIDRef}.
  */
-public class AssertionIDRefMarshaller extends AbstractSAMLObjectMarshaller {
+public class AssertionIDRefMarshaller extends XSStringMarshaller {
 
     /** {@inheritDoc} */
     protected void marshallElementContent(final XMLObject samlObject, final Element domElement)
             throws MarshallingException {
         final AssertionIDRef assertionIDRef = (AssertionIDRef) samlObject;
-        ElementSupport.appendTextContent(domElement, assertionIDRef.getAssertionID());
+        
+        if (assertionIDRef.getValue() != null) {
+            ElementSupport.appendTextContent(domElement, assertionIDRef.getValue());
+        }
     }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionIDRefUnmarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionIDRefUnmarshaller.java
index 5c68c86..7d066e7 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionIDRefUnmarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionIDRefUnmarshaller.java
@@ -21,18 +21,12 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.saml.common.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.core.xml.schema.impl.XSStringUnmarshaller;
 import org.opensaml.saml.saml2.core.AssertionIDRef;
 
 /**
- * A thead-safe Unmarshaller for {@link org.opensaml.saml.saml2.core.AssertionIDRef}.
+ * A thead-safe Unmarshaller for {@link AssertionIDRef}.
  */
-public class AssertionIDRefUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-    /** {@inheritDoc} */
-    protected void processElementContent(final XMLObject samlObject, final String elementContent) {
-        final AssertionIDRef assertionIDRef = (AssertionIDRef) samlObject;
-        assertionIDRef.setAssertionID(elementContent);
-    }
+public class AssertionIDRefUnmarshaller extends XSStringUnmarshaller {
+    
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionURIRefImpl.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionURIRefImpl.java
index c91acdd..ab1df16 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionURIRefImpl.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionURIRefImpl.java
@@ -21,19 +21,13 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import java.util.List;
-
-import org.opensaml.core.xml.AbstractXMLObject;
-import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.schema.impl.XSURIImpl;
 import org.opensaml.saml.saml2.core.AssertionURIRef;
 
 /**
- * A concrete implementation of {@link org.opensaml.saml.saml2.core.AssertionURIRef}.
+ * A concrete implementation of {@link AssertionURIRef}.
  */
-public class AssertionURIRefImpl extends AbstractXMLObject implements AssertionURIRef {
-
-    /** URI of the Assertion. */
-    private String assertionURI;
+public class AssertionURIRefImpl extends XSURIImpl implements AssertionURIRef {
 
     /**
      * Constructor.
@@ -47,18 +41,4 @@ public class AssertionURIRefImpl extends AbstractXMLObject implements AssertionU
         super(namespaceURI, elementLocalName, namespacePrefix);
     }
 
-    /** {@inheritDoc} */
-    public String getAssertionURI() {
-        return assertionURI;
-    }
-
-    /** {@inheritDoc} */
-    public void setAssertionURI(final String newAssertionURI) {
-        this.assertionURI = prepareForAssignment(this.assertionURI, newAssertionURI);
-    }
-
-    /** {@inheritDoc} */
-    public List<XMLObject> getOrderedChildren() {
-        return null;
-    }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionURIRefMarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionURIRefMarshaller.java
index 01f67f0..6b9b566 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionURIRefMarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionURIRefMarshaller.java
@@ -25,19 +25,22 @@ import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.MarshallingException;
-import org.opensaml.saml.common.AbstractSAMLObjectMarshaller;
+import org.opensaml.core.xml.schema.impl.XSURIMarshaller;
 import org.opensaml.saml.saml2.core.AssertionURIRef;
 import org.w3c.dom.Element;
 
 /**
- * A thread-safe Marshaller for {@link org.opensaml.saml.saml2.core.AssertionURIRef}.
+ * A thread-safe Marshaller for {@link AssertionURIRef}.
  */
-public class AssertionURIRefMarshaller extends AbstractSAMLObjectMarshaller {
+public class AssertionURIRefMarshaller extends XSURIMarshaller {
 
     /** {@inheritDoc} */
     protected void marshallElementContent(final XMLObject samlObject, final Element domElement)
             throws MarshallingException {
         final AssertionURIRef assertionURIRef = (AssertionURIRef) samlObject;
-        ElementSupport.appendTextContent(domElement, assertionURIRef.getAssertionURI());
+        
+        if (assertionURIRef.getURI() != null) {
+            ElementSupport.appendTextContent(domElement, assertionURIRef.getURI());
+        }
     }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionURIRefUnmarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionURIRefUnmarshaller.java
index 870a36e..bb7defd 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionURIRefUnmarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AssertionURIRefUnmarshaller.java
@@ -21,18 +21,12 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.saml.common.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.core.xml.schema.impl.XSURIUnmarshaller;
 import org.opensaml.saml.saml2.core.AssertionURIRef;
 
 /**
- * A thread-safe Unmarshaller for {@link org.opensaml.saml.saml2.core.AssertionURIRef}.
+ * A thread-safe Unmarshaller for {@link AssertionURIRef}.
  */
-public class AssertionURIRefUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-    /** {@inheritDoc} */
-    protected void processElementContent(final XMLObject samlObject, final String elementContent) {
-        final AssertionURIRef assertionURIRef = (AssertionURIRef) samlObject;
-        assertionURIRef.setAssertionURI(elementContent);
-    }
+public class AssertionURIRefUnmarshaller extends XSURIUnmarshaller {
+    
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AudienceImpl.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AudienceImpl.java
index 17494c9..6947f93 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AudienceImpl.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AudienceImpl.java
@@ -21,13 +21,10 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import java.util.List;
-
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import org.opensaml.core.xml.AbstractXMLObject;
-import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.schema.impl.XSURIImpl;
 import org.opensaml.saml.saml2.core.Audience;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
@@ -35,10 +32,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 /**
  * Concrete implementation of {@link Audience}.
  */
-public class AudienceImpl extends AbstractXMLObject implements Audience {
-
-    /** URI of this Audience. */
-    private String audienceURI;
+public class AudienceImpl extends XSURIImpl implements Audience {
 
     /**
      * Constructor.
@@ -51,20 +45,5 @@ public class AudienceImpl extends AbstractXMLObject implements Audience {
             @Nonnull @NotEmpty final String elementLocalName, @Nullable @NotEmpty final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
     }
-
-    /** {@inheritDoc} */
-    @Nullable public String getURI() {
-        return audienceURI;
-    }
-
-    /** {@inheritDoc} */
-    public void setURI(@Nullable final String uri) {
-        audienceURI = prepareForAssignment(audienceURI, uri);
-    }
-
-    /** {@inheritDoc} */
-    @Nullable public List<XMLObject> getOrderedChildren() {
-        return null;
-    }
     
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AudienceMarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AudienceMarshaller.java
index 4d69fd7..f86d600 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AudienceMarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AudienceMarshaller.java
@@ -25,19 +25,22 @@ import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.MarshallingException;
-import org.opensaml.saml.common.AbstractSAMLObjectMarshaller;
+import org.opensaml.core.xml.schema.impl.XSURIMarshaller;
 import org.opensaml.saml.saml2.core.Audience;
 import org.w3c.dom.Element;
 
 /**
  * A thread safe Marshaller for {@link Audience} objects.
  */
-public class AudienceMarshaller extends AbstractSAMLObjectMarshaller {
+public class AudienceMarshaller extends XSURIMarshaller {
 
     /** {@inheritDoc} */
     protected void marshallElementContent(final XMLObject samlObject, final Element domElement)
             throws MarshallingException {
         final Audience audience = (Audience) samlObject;
-        ElementSupport.appendTextContent(domElement, audience.getURI());
+        
+        if (audience.getURI() != null) {
+            ElementSupport.appendTextContent(domElement, audience.getURI());
+        }
     }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AudienceUnmarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AudienceUnmarshaller.java
index f4f688f..e04007d 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AudienceUnmarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AudienceUnmarshaller.java
@@ -21,18 +21,12 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.saml.common.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.core.xml.schema.impl.XSURIUnmarshaller;
 import org.opensaml.saml.saml2.core.Audience;
 
 /**
  * A thread-safe Unmarshaller for {@link Audience} objects.
  */
-public class AudienceUnmarshaller extends AbstractSAMLObjectUnmarshaller {
+public class AudienceUnmarshaller extends XSURIUnmarshaller {
 
-    /** {@inheritDoc} */
-    protected void processElementContent(final XMLObject samlObject, final String elementContent) {
-        final Audience audience = (Audience) samlObject;
-        audience.setURI(elementContent);
-    }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthenticatingAuthorityImpl.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthenticatingAuthorityImpl.java
index 252ead4..5159d9d 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthenticatingAuthorityImpl.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthenticatingAuthorityImpl.java
@@ -21,19 +21,13 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import java.util.List;
-
-import org.opensaml.core.xml.AbstractXMLObject;
-import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.schema.impl.XSURIImpl;
 import org.opensaml.saml.saml2.core.AuthenticatingAuthority;
 
 /**
  * A concrete implementation of {@link org.opensaml.saml.saml2.core.AuthenticatingAuthority}.
  */
-public class AuthenticatingAuthorityImpl extends AbstractXMLObject implements AuthenticatingAuthority {
-
-    /** URI of the Authenticating Authority. */
-    private String uri;
+public class AuthenticatingAuthorityImpl extends XSURIImpl implements AuthenticatingAuthority {
 
     /**
      * Constructor.
@@ -47,18 +41,4 @@ public class AuthenticatingAuthorityImpl extends AbstractXMLObject implements Au
         super(namespaceURI, elementLocalName, namespacePrefix);
     }
 
-    /** {@inheritDoc} */
-    public String getURI() {
-        return uri;
-    }
-
-    /** {@inheritDoc} */
-    public void setURI(final String newURI) {
-        this.uri = prepareForAssignment(this.uri, newURI);
-    }
-
-    /** {@inheritDoc} */
-    public List<XMLObject> getOrderedChildren() {
-        return null;
-    }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthenticatingAuthorityMarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthenticatingAuthorityMarshaller.java
index 4667bbd..100ebe8 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthenticatingAuthorityMarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthenticatingAuthorityMarshaller.java
@@ -25,19 +25,22 @@ import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.MarshallingException;
-import org.opensaml.saml.common.AbstractSAMLObjectMarshaller;
+import org.opensaml.core.xml.schema.impl.XSURIMarshaller;
 import org.opensaml.saml.saml2.core.AuthenticatingAuthority;
 import org.w3c.dom.Element;
 
 /**
- * A thread-safe Marshaller for {@link org.opensaml.saml.saml2.core.AuthenticatingAuthority}.
+ * A thread-safe Marshaller for {@link AuthenticatingAuthority}.
  */
-public class AuthenticatingAuthorityMarshaller extends AbstractSAMLObjectMarshaller {
+public class AuthenticatingAuthorityMarshaller extends XSURIMarshaller {
 
     /** {@inheritDoc} */
     protected void marshallElementContent(final XMLObject samlObject, final Element domElement)
             throws MarshallingException {
         final AuthenticatingAuthority authenticatingAuthority = (AuthenticatingAuthority) samlObject;
-        ElementSupport.appendTextContent(domElement, authenticatingAuthority.getURI());
+        
+        if (authenticatingAuthority.getURI() != null) {
+            ElementSupport.appendTextContent(domElement, authenticatingAuthority.getURI());
+        }
     }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthenticatingAuthorityUnmarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthenticatingAuthorityUnmarshaller.java
index aef1152..95d5450 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthenticatingAuthorityUnmarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthenticatingAuthorityUnmarshaller.java
@@ -21,18 +21,12 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.saml.common.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.core.xml.schema.impl.XSURIUnmarshaller;
 import org.opensaml.saml.saml2.core.AuthenticatingAuthority;
 
 /**
- * A thread-safe Unmarshaller for {@link org.opensaml.saml.saml2.core.AuthenticatingAuthority}.
+ * A thread-safe Unmarshaller for {@link AuthenticatingAuthority}.
  */
-public class AuthenticatingAuthorityUnmarshaller extends AbstractSAMLObjectUnmarshaller {
+public class AuthenticatingAuthorityUnmarshaller extends XSURIUnmarshaller {
 
-    /** {@inheritDoc} */
-    protected void processElementContent(final XMLObject samlObject, final String elementContent) {
-        final AuthenticatingAuthority authenticatingAuthority = (AuthenticatingAuthority) samlObject;
-        authenticatingAuthority.setURI(elementContent);
-    }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextClassRefImpl.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextClassRefImpl.java
index 174b8b0..4eb7d2d 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextClassRefImpl.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextClassRefImpl.java
@@ -21,13 +21,10 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import java.util.List;
-
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import org.opensaml.core.xml.AbstractXMLObject;
-import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.schema.impl.XSURIImpl;
 import org.opensaml.saml.saml2.core.AuthnContextClassRef;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
@@ -35,10 +32,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 /**
  * A concrete implementation of {@link AuthnContextClassRef}.
  */
-public class AuthnContextClassRefImpl extends AbstractXMLObject implements AuthnContextClassRef {
-
-    /** URI of the Authentication Context Class. */
-    @Nullable private String authnContextClassRef;
+public class AuthnContextClassRefImpl extends XSURIImpl implements AuthnContextClassRef {
 
     /**
      * Constructor.
@@ -51,20 +45,5 @@ public class AuthnContextClassRefImpl extends AbstractXMLObject implements Authn
             @Nonnull @NotEmpty final String elementLocalName, @Nullable final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
     }
-
-    /** {@inheritDoc} */
-    @Nullable public String getURI() {
-        return authnContextClassRef;
-    }
-
-    /** {@inheritDoc} */
-    public void setURI(@Nullable final String uri) {
-        authnContextClassRef = prepareForAssignment(authnContextClassRef, uri);
-    }
-
-    /** {@inheritDoc} */
-    @Nullable public List<XMLObject> getOrderedChildren() {
-        return null;
-    }
     
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextClassRefMarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextClassRefMarshaller.java
index 0094f66..e83a23b 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextClassRefMarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextClassRefMarshaller.java
@@ -25,19 +25,22 @@ import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.MarshallingException;
-import org.opensaml.saml.common.AbstractSAMLObjectMarshaller;
+import org.opensaml.core.xml.schema.impl.XSStringMarshaller;
 import org.opensaml.saml.saml2.core.AuthnContextClassRef;
 import org.w3c.dom.Element;
 
 /**
  * A thread-safe Marshaller for {@link AuthnContextClassRef}.
  */
-public class AuthnContextClassRefMarshaller extends AbstractSAMLObjectMarshaller {
+public class AuthnContextClassRefMarshaller extends XSStringMarshaller {
 
     /** {@inheritDoc} */
     protected void marshallElementContent(final XMLObject samlObject, final Element domElement)
             throws MarshallingException {
         final AuthnContextClassRef authnContextClassRef = (AuthnContextClassRef) samlObject;
-        ElementSupport.appendTextContent(domElement, authnContextClassRef.getURI());
+        
+        if (authnContextClassRef.getURI() != null) {
+            ElementSupport.appendTextContent(domElement, authnContextClassRef.getURI());
+        }
     }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextClassRefUnmarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextClassRefUnmarshaller.java
index 580f9c6..a65437d 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextClassRefUnmarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextClassRefUnmarshaller.java
@@ -21,18 +21,12 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.saml.common.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.core.xml.schema.impl.XSURIUnmarshaller;
 import org.opensaml.saml.saml2.core.AuthnContextClassRef;
 
 /**
  * A thread-safe Unmarshaller for {@link AuthnContextClassRef}.
  */
-public class AuthnContextClassRefUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-    /** {@inheritDoc} */
-    protected void processElementContent(final XMLObject samlObject, final String elementContent) {
-        final AuthnContextClassRef authnContextClassRef = (AuthnContextClassRef) samlObject;
-        authnContextClassRef.setURI(elementContent);
-    }
+public class AuthnContextClassRefUnmarshaller extends XSURIUnmarshaller {
+    
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextDeclRefImpl.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextDeclRefImpl.java
index a6ec0bf..979a428 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextDeclRefImpl.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextDeclRefImpl.java
@@ -21,13 +21,10 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import java.util.List;
-
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import org.opensaml.core.xml.AbstractXMLObject;
-import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.schema.impl.XSURIImpl;
 import org.opensaml.saml.saml2.core.AuthnContextDeclRef;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
@@ -35,10 +32,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 /**
  * A concrete implementation of {@link AuthnContextDeclRef}.
  */
-public class AuthnContextDeclRefImpl extends AbstractXMLObject implements AuthnContextDeclRef {
-
-    /** URI of the Authentication Context Declaration. */
-    @Nullable private String authnContextDeclRef;
+public class AuthnContextDeclRefImpl extends XSURIImpl implements AuthnContextDeclRef {
 
     /**
      * Constructor.
@@ -51,20 +45,5 @@ public class AuthnContextDeclRefImpl extends AbstractXMLObject implements AuthnC
             @Nonnull @NotEmpty final String elementLocalName, @Nullable final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
     }
-
-    /** {@inheritDoc} */
-    @Nullable public String getURI() {
-        return authnContextDeclRef;
-    }
-
-    /** {@inheritDoc} */
-    public void setURI(@Nullable final String uri) {
-        authnContextDeclRef = prepareForAssignment(authnContextDeclRef, uri);
-    }
-
-    /** {@inheritDoc} */
-    @Nullable public List<XMLObject> getOrderedChildren() {
-        return null;
-    }
     
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextDeclRefMarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextDeclRefMarshaller.java
index 72831e5..d058340 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextDeclRefMarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextDeclRefMarshaller.java
@@ -25,19 +25,22 @@ import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.MarshallingException;
-import org.opensaml.saml.common.AbstractSAMLObjectMarshaller;
+import org.opensaml.core.xml.schema.impl.XSURIMarshaller;
 import org.opensaml.saml.saml2.core.AuthnContextDeclRef;
 import org.w3c.dom.Element;
 
 /**
  * A thread-safe Marshaller for {@link AuthnContextDeclRef}.
  */
-public class AuthnContextDeclRefMarshaller extends AbstractSAMLObjectMarshaller {
+public class AuthnContextDeclRefMarshaller extends XSURIMarshaller {
 
     /** {@inheritDoc} */
     protected void marshallElementContent(final XMLObject samlObject, final Element domElement)
             throws MarshallingException {
         final AuthnContextDeclRef authnContextDeclRef = (AuthnContextDeclRef) samlObject;
-        ElementSupport.appendTextContent(domElement, authnContextDeclRef.getURI());
+        
+        if (authnContextDeclRef.getURI() != null) {
+            ElementSupport.appendTextContent(domElement, authnContextDeclRef.getURI());
+        }
     }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextDeclRefUnmarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextDeclRefUnmarshaller.java
index d81655b..06eac14 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextDeclRefUnmarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/AuthnContextDeclRefUnmarshaller.java
@@ -21,18 +21,12 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.saml.common.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.core.xml.schema.impl.XSURIUnmarshaller;
 import org.opensaml.saml.saml2.core.AuthnContextDeclRef;
 
 /**
  * A thread-safe Unmarshaller for {@link AuthnContextDeclRef}.
  */
-public class AuthnContextDeclRefUnmarshaller extends AbstractSAMLObjectUnmarshaller {
+public class AuthnContextDeclRefUnmarshaller extends XSURIUnmarshaller {
 
-    /** {@inheritDoc} */
-    protected void processElementContent(final XMLObject samlObject, final String elementContent) {
-        final AuthnContextDeclRef authnContextDeclRef = (AuthnContextDeclRef) samlObject;
-        authnContextDeclRef.setURI(elementContent);
-    }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/GetCompleteImpl.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/GetCompleteImpl.java
index 8c339df..d1d3615 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/GetCompleteImpl.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/GetCompleteImpl.java
@@ -21,19 +21,13 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import java.util.List;
-
-import org.opensaml.core.xml.AbstractXMLObject;
-import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.schema.impl.XSURIImpl;
 import org.opensaml.saml.saml2.core.GetComplete;
 
 /**
  * Concrete implementation of {@link GetComplete}.
  */
-public class GetCompleteImpl extends AbstractXMLObject implements GetComplete {
-
-    /** URI element content. */
-    private String getComplete;
+public class GetCompleteImpl extends XSURIImpl implements GetComplete {
 
     /**
      * Constructor.
@@ -46,19 +40,4 @@ public class GetCompleteImpl extends AbstractXMLObject implements GetComplete {
         super(namespaceURI, elementLocalName, namespacePrefix);
     }
 
-    /** {@inheritDoc} */
-    public String getURI() {
-        return getComplete;
-    }
-
-    /** {@inheritDoc} */
-    public void setURI(final String uri) {
-        getComplete = prepareForAssignment(getComplete, uri);
-    }
-
-    /** {@inheritDoc} */
-    public List<XMLObject> getOrderedChildren() {
-        // No children
-        return null;
-    }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/GetCompleteMarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/GetCompleteMarshaller.java
index a7963ca..3b82baf 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/GetCompleteMarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/GetCompleteMarshaller.java
@@ -25,14 +25,14 @@ import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.MarshallingException;
-import org.opensaml.saml.common.AbstractSAMLObjectMarshaller;
+import org.opensaml.core.xml.schema.impl.XSURIMarshaller;
 import org.opensaml.saml.saml2.core.GetComplete;
 import org.w3c.dom.Element;
 
 /**
  * A thread safe Marshaller for {@link GetComplete} objects.
  */
-public class GetCompleteMarshaller extends AbstractSAMLObjectMarshaller {
+public class GetCompleteMarshaller extends XSURIMarshaller {
 
     /** {@inheritDoc} */
     protected void marshallElementContent(final XMLObject samlObject, final Element domElement)
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/GetCompleteUnmarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/GetCompleteUnmarshaller.java
index 146defa..8817fc9 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/GetCompleteUnmarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/GetCompleteUnmarshaller.java
@@ -21,19 +21,13 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.saml.common.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.core.xml.schema.impl.XSURIUnmarshaller;
 import org.opensaml.saml.saml2.core.GetComplete;
 
 /**
  * A thread-safe Unmarshaller for {@link GetComplete} objects.
  */
-public class GetCompleteUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-    /** {@inheritDoc} */
-    protected void processElementContent(final XMLObject samlObject, final String elementContent) {
-        final GetComplete gc = (GetComplete) samlObject;
-
-        gc.setURI(elementContent);
-    }
+public class GetCompleteUnmarshaller extends XSURIUnmarshaller {
+    
+    
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/NameIDImpl.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/NameIDImpl.java
index 0d1ae17..06905c8 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/NameIDImpl.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/NameIDImpl.java
@@ -20,7 +20,7 @@ package org.opensaml.saml.saml2.core.impl;
 import org.opensaml.saml.saml2.core.NameID;
 
 /**
- * Concrete implementation of {@link org.opensaml.saml.saml2.core.NameID}.
+ * Concrete implementation of {@link NameID}.
  */
 public class NameIDImpl extends AbstractNameIDType implements NameID {
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/NewIDImpl.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/NewIDImpl.java
index 4596120..b7111c4 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/NewIDImpl.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/NewIDImpl.java
@@ -21,19 +21,13 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import java.util.List;
-
-import org.opensaml.core.xml.AbstractXMLObject;
-import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.schema.impl.XSStringImpl;
 import org.opensaml.saml.saml2.core.NewID;
 
 /**
  * Concrete implementation of {@link NewID}.
  */
-public class NewIDImpl extends AbstractXMLObject implements NewID {
-
-    /** The new NameID. */
-    private String newID;
+public class NewIDImpl extends XSStringImpl implements NewID {
 
     /**
      * Constructor.
@@ -45,20 +39,5 @@ public class NewIDImpl extends AbstractXMLObject implements NewID {
     protected NewIDImpl(final String namespaceURI, final String elementLocalName, final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
     }
-
-    /** {@inheritDoc} */
-    public String getValue() {
-        return newID;
-    }
-
-    /** {@inheritDoc} */
-    public void setValue(final String value) {
-        newID = prepareForAssignment(newID, value);
-    }
-
-    /** {@inheritDoc} */
-    public List<XMLObject> getOrderedChildren() {
-        // no children
-        return null;
-    }
+    
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/NewIDMarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/NewIDMarshaller.java
index bbfa8c5..5ed4dd4 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/NewIDMarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/NewIDMarshaller.java
@@ -25,14 +25,14 @@ import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.MarshallingException;
-import org.opensaml.saml.common.AbstractSAMLObjectMarshaller;
+import org.opensaml.core.xml.schema.impl.XSStringMarshaller;
 import org.opensaml.saml.saml2.core.NewID;
 import org.w3c.dom.Element;
 
 /**
  * A thread safe Marshaller for {@link NewID} objects.
  */
-public class NewIDMarshaller extends AbstractSAMLObjectMarshaller {
+public class NewIDMarshaller extends XSStringMarshaller {
 
     /** {@inheritDoc} */
     protected void marshallElementContent(final XMLObject samlObject, final Element domElement)
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/NewIDUnmarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/NewIDUnmarshaller.java
index bb8ac18..d9d9eb8 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/NewIDUnmarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/NewIDUnmarshaller.java
@@ -21,19 +21,12 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.saml.common.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.core.xml.schema.impl.XSStringUnmarshaller;
 import org.opensaml.saml.saml2.core.NewID;
 
 /**
  * A thread-safe Unmarshaller for {@link NewID} objects.
  */
-public class NewIDUnmarshaller extends AbstractSAMLObjectUnmarshaller {
+public class NewIDUnmarshaller extends XSStringUnmarshaller {
 
-    /** {@inheritDoc} */
-    protected void processElementContent(final XMLObject samlObject, final String elementContent) {
-        final NewID newID = (NewID) samlObject;
-
-        newID.setValue(elementContent);
-    }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/RequesterIDImpl.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/RequesterIDImpl.java
index 071b9db..e9a25cb 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/RequesterIDImpl.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/RequesterIDImpl.java
@@ -21,19 +21,13 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import java.util.List;
-
-import org.opensaml.core.xml.AbstractXMLObject;
-import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.schema.impl.XSURIImpl;
 import org.opensaml.saml.saml2.core.RequesterID;
 
 /**
  * Concrete implementation of {@link RequesterID}.
  */
-public class RequesterIDImpl extends AbstractXMLObject implements RequesterID {
-
-    /** ID of the requester. */
-    private String requesterID;
+public class RequesterIDImpl extends XSURIImpl implements RequesterID {
 
     /**
      * Constructor.
@@ -45,20 +39,5 @@ public class RequesterIDImpl extends AbstractXMLObject implements RequesterID {
     protected RequesterIDImpl(final String namespaceURI, final String elementLocalName, final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
     }
-
-    /** {@inheritDoc} */
-    public String getValue() {
-        return requesterID;
-    }
-
-    /** {@inheritDoc} */
-    public void setValue(final String value) {
-        requesterID = prepareForAssignment(requesterID, value);
-    }
-
-    /** {@inheritDoc} */
-    public List<XMLObject> getOrderedChildren() {
-        // No children
-        return null;
-    }
+    
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/RequesterIDMarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/RequesterIDMarshaller.java
index 81d5152..a6088bc 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/RequesterIDMarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/RequesterIDMarshaller.java
@@ -25,22 +25,22 @@ import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.MarshallingException;
-import org.opensaml.saml.common.AbstractSAMLObjectMarshaller;
+import org.opensaml.core.xml.schema.impl.XSURIMarshaller;
 import org.opensaml.saml.saml2.core.RequesterID;
 import org.w3c.dom.Element;
 
 /**
  * A thread safe Marshaller for {@link RequesterID} objects.
  */
-public class RequesterIDMarshaller extends AbstractSAMLObjectMarshaller {
+public class RequesterIDMarshaller extends XSURIMarshaller {
 
     /** {@inheritDoc} */
     protected void marshallElementContent(final XMLObject samlObject, final Element domElement)
             throws MarshallingException {
         final RequesterID reqID = (RequesterID) samlObject;
 
-        if (reqID.getValue() != null) {
-            ElementSupport.appendTextContent(domElement, reqID.getValue());
+        if (reqID.getURI() != null) {
+            ElementSupport.appendTextContent(domElement, reqID.getURI());
         }
     }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/RequesterIDUnmarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/RequesterIDUnmarshaller.java
index 326c324..2fbcfd3 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/RequesterIDUnmarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/RequesterIDUnmarshaller.java
@@ -21,19 +21,12 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.saml.common.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.core.xml.schema.impl.XSURIUnmarshaller;
 import org.opensaml.saml.saml2.core.RequesterID;
 
 /**
  * A thread-safe Unmarshaller for {@link RequesterID} objects.
  */
-public class RequesterIDUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-    /** {@inheritDoc} */
-    protected void processElementContent(final XMLObject samlObject, final String elementContent) {
-        final RequesterID reqID = (RequesterID) samlObject;
-
-        reqID.setValue(elementContent);
-    }
+public class RequesterIDUnmarshaller extends XSURIUnmarshaller {
+    
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/SessionIndexImpl.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/SessionIndexImpl.java
index 2fae8cd..bd6cd42 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/SessionIndexImpl.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/SessionIndexImpl.java
@@ -21,19 +21,13 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import java.util.List;
-
-import org.opensaml.core.xml.AbstractXMLObject;
-import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.schema.impl.XSStringImpl;
 import org.opensaml.saml.saml2.core.SessionIndex;
 
 /**
  * Concrete implementation of {@link SessionIndex}.
  */
-public class SessionIndexImpl extends AbstractXMLObject implements SessionIndex {
-
-    /** The session index value. */
-    private String sessionIndex;
+public class SessionIndexImpl extends XSStringImpl implements SessionIndex {
 
     /**
      * Constructor.
@@ -46,19 +40,4 @@ public class SessionIndexImpl extends AbstractXMLObject implements SessionIndex
         super(namespaceURI, elementLocalName, namespacePrefix);
     }
 
-    /** {@inheritDoc} */
-    public String getValue() {
-        return sessionIndex;
-    }
-
-    /** {@inheritDoc} */
-    public void setValue(final String value) {
-        sessionIndex = prepareForAssignment(sessionIndex, value);
-    }
-
-    /** {@inheritDoc} */
-    public List<XMLObject> getOrderedChildren() {
-        // no children
-        return null;
-    }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/SessionIndexMarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/SessionIndexMarshaller.java
index a6d8e60..9f247a9 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/SessionIndexMarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/SessionIndexMarshaller.java
@@ -25,14 +25,14 @@ import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.MarshallingException;
-import org.opensaml.saml.common.AbstractSAMLObjectMarshaller;
+import org.opensaml.core.xml.schema.impl.XSStringMarshaller;
 import org.opensaml.saml.saml2.core.SessionIndex;
 import org.w3c.dom.Element;
 
 /**
  * A thread safe Marshaller for {@link SessionIndex} objects.
  */
-public class SessionIndexMarshaller extends AbstractSAMLObjectMarshaller {
+public class SessionIndexMarshaller extends XSStringMarshaller {
 
     /** {@inheritDoc} */
     protected void marshallElementContent(final XMLObject samlObject, final Element domElement)
@@ -43,4 +43,5 @@ public class SessionIndexMarshaller extends AbstractSAMLObjectMarshaller {
             ElementSupport.appendTextContent(domElement, si.getValue());
         }
     }
+    
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/SessionIndexUnmarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/SessionIndexUnmarshaller.java
index fed99bb..9698d04 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/SessionIndexUnmarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/SessionIndexUnmarshaller.java
@@ -21,19 +21,12 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.saml.common.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.core.xml.schema.impl.XSStringUnmarshaller;
 import org.opensaml.saml.saml2.core.SessionIndex;
 
 /**
  * A thread-safe Unmarshaller for {@link SessionIndex} objects.
  */
-public class SessionIndexUnmarshaller extends AbstractSAMLObjectUnmarshaller {
+public class SessionIndexUnmarshaller extends XSStringUnmarshaller {
 
-    /** {@inheritDoc} */
-    protected void processElementContent(final XMLObject samlObject, final String elementContent) {
-        final SessionIndex si = (SessionIndex) samlObject;
-
-        si.setValue(elementContent);
-    }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/StatusMessageImpl.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/StatusMessageImpl.java
index cd51e10..fe3ba6e 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/StatusMessageImpl.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/StatusMessageImpl.java
@@ -21,19 +21,13 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import java.util.List;
-
-import org.opensaml.core.xml.AbstractXMLObject;
-import org.opensaml.core.xml.XMLObject;
+import org.opensaml.core.xml.schema.impl.XSStringImpl;
 import org.opensaml.saml.saml2.core.StatusMessage;
 
 /**
- * Concrete implementation of {@link org.opensaml.saml.saml2.core.StatusMessage}.
+ * Concrete implementation of {@link StatusMessage}.
  */
-public class StatusMessageImpl extends AbstractXMLObject implements StatusMessage {
-
-    /** The message string. */
-    private String message;
+public class StatusMessageImpl extends XSStringImpl implements StatusMessage {
 
     /**
      * Constructor.
@@ -46,20 +40,5 @@ public class StatusMessageImpl extends AbstractXMLObject implements StatusMessag
             final String namespacePrefix) {
         super(namespaceURI, elementLocalName, namespacePrefix);
     }
-
-    /** {@inheritDoc} */
-    public String getMessage() {
-        return this.message;
-    }
-
-    /** {@inheritDoc} */
-    public void setMessage(final String newMessage) {
-        this.message = prepareForAssignment(this.message, newMessage);
-    }
-
-    /** {@inheritDoc} */
-    public List<XMLObject> getOrderedChildren() {
-        // No children for this element
-        return null;
-    }
+    
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/StatusMessageMarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/StatusMessageMarshaller.java
index 535689a..75e630c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/StatusMessageMarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/StatusMessageMarshaller.java
@@ -25,22 +25,22 @@ import net.shibboleth.utilities.java.support.xml.ElementSupport;
 
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.MarshallingException;
-import org.opensaml.saml.common.AbstractSAMLObjectMarshaller;
+import org.opensaml.core.xml.schema.impl.XSStringMarshaller;
 import org.opensaml.saml.saml2.core.StatusMessage;
 import org.w3c.dom.Element;
 
 /**
- * A thread safe Marshaller for {@link org.opensaml.saml.saml2.core.StatusMessage} objects.
+ * A thread safe Marshaller for {@link StatusMessage} objects.
  */
-public class StatusMessageMarshaller extends AbstractSAMLObjectMarshaller {
+public class StatusMessageMarshaller extends XSStringMarshaller {
 
     /** {@inheritDoc} */
     protected void marshallElementContent(final XMLObject samlObject, final Element domElement)
             throws MarshallingException {
         final StatusMessage message = (StatusMessage) samlObject;
 
-        if (message.getMessage() != null) {
-            ElementSupport.appendTextContent(domElement, message.getMessage());
+        if (message.getValue() != null) {
+            ElementSupport.appendTextContent(domElement, message.getValue());
         }
     }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/StatusMessageUnmarshaller.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/StatusMessageUnmarshaller.java
index d18ce97..2cbc60c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/StatusMessageUnmarshaller.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/core/impl/StatusMessageUnmarshaller.java
@@ -21,20 +21,13 @@
 
 package org.opensaml.saml.saml2.core.impl;
 
-import org.opensaml.core.xml.XMLObject;
-import org.opensaml.saml.common.AbstractSAMLObjectUnmarshaller;
+import org.opensaml.core.xml.schema.impl.XSStringUnmarshaller;
 import org.opensaml.saml.saml2.core.StatusMessage;
 
 /**
- * A thread-safe Unmarshaller for {@link org.opensaml.saml.saml2.core.StatusMessage} objects.
+ * A thread-safe Unmarshaller for {@link StatusMessage} objects.
  * 
  */
-public class StatusMessageUnmarshaller extends AbstractSAMLObjectUnmarshaller {
-
-    /** {@inheritDoc} */
-    protected void processElementContent(final XMLObject samlObject, final String elementContent) {
-        final StatusMessage message = (StatusMessage) samlObject;
-
-        message.setMessage(elementContent);
-    }
+public class StatusMessageUnmarshaller extends XSStringUnmarshaller {
+    
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/RoundTripTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/RoundTripTest.java
index be1dda1..129987a 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/RoundTripTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/RoundTripTest.java
@@ -75,7 +75,7 @@ public class RoundTripTest extends XMLObjectBaseTestCase {
                 XMLObjectProviderRegistrySupport.getBuilderFactory().<OrganizationURL>getBuilderOrThrow(
                         OrganizationURL.DEFAULT_ELEMENT_NAME);
         OrganizationURL newOrgURL = orgURLBuilder.buildObject();    
-        newOrgURL.setValue("http://org.url.edu");
+        newOrgURL.setURI("http://org.url.edu");
         newOrgURL.setXMLLang("en");
         organization.getURLs().add(newOrgURL);
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/AddAudienceRestrictionToAssertionsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/AddAudienceRestrictionToAssertionsTest.java
index 76078ba..f5dda18 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/AddAudienceRestrictionToAssertionsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/profile/impl/AddAudienceRestrictionToAssertionsTest.java
@@ -205,8 +205,8 @@ public class AddAudienceRestrictionToAssertionsTest extends OpenSAMLInitBaseTest
         Assert.assertEquals(assertion.getConditions().getAudienceRestrictions().size(), 1);
         final AudienceRestriction audcond = assertion.getConditions().getAudienceRestrictions().get(0);
         Assert.assertEquals(audcond.getAudiences().size(), 2);
-        Assert.assertEquals(audcond.getAudiences().get(0).getAudienceURI(), AUDIENCE1);
-        Assert.assertEquals(audcond.getAudiences().get(1).getAudienceURI(), AUDIENCE2);
+        Assert.assertEquals(audcond.getAudiences().get(0).getURI(), AUDIENCE1);
+        Assert.assertEquals(audcond.getAudiences().get(1).getURI(), AUDIENCE2);
     }
 
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdrpi/impl/PublicationInfoTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdrpi/impl/PublicationInfoTest.java
index 0712288..aa7dba9 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdrpi/impl/PublicationInfoTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdrpi/impl/PublicationInfoTest.java
@@ -85,10 +85,10 @@ public class PublicationInfoTest extends XMLObjectProviderBaseTestCase {
         Assert.assertEquals(info.getPublisher(), expectedPublisher);
         UsagePolicy policy = info.getUsagePolicies().get(0);
         Assert.assertEquals(policy.getXMLLang(), langs[0]);
-        Assert.assertEquals(policy.getValue(), uris[0]);
+        Assert.assertEquals(policy.getURI(), uris[0]);
         policy = info.getUsagePolicies().get(1);
         Assert.assertEquals(policy.getXMLLang(), langs[1]);
-        Assert.assertEquals(policy.getValue(), uris[1]);
+        Assert.assertEquals(policy.getURI(), uris[1]);
     }
 
     @Test
@@ -99,7 +99,7 @@ public class PublicationInfoTest extends XMLObjectProviderBaseTestCase {
         for (int i = 0; i < 2; i++) {
 
             UsagePolicy policy = (UsagePolicy) buildXMLObject(UsagePolicy.DEFAULT_ELEMENT_NAME);
-            policy.setValue(uris[i]);
+            policy.setURI(uris[i]);
             policy.setXMLLang(langs[i]);
             info.getUsagePolicies().add(policy);
         }
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdrpi/impl/RegistrationInfoTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdrpi/impl/RegistrationInfoTest.java
index c31bec3..0ae59e4 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdrpi/impl/RegistrationInfoTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdrpi/impl/RegistrationInfoTest.java
@@ -82,10 +82,10 @@ public class RegistrationInfoTest extends XMLObjectProviderBaseTestCase {
         Assert.assertEquals(info.getRegistrationInstant(), expectedRegistrationInstant);
         RegistrationPolicy policy = info.getRegistrationPolicies().get(0);
         Assert.assertEquals(policy.getXMLLang(), langs[0]);
-        Assert.assertEquals(policy.getValue(), uris[0]);
+        Assert.assertEquals(policy.getURI(), uris[0]);
         policy = info.getRegistrationPolicies().get(1);
         Assert.assertEquals(policy.getXMLLang(), langs[1]);
-        Assert.assertEquals(policy.getValue(), uris[1]);
+        Assert.assertEquals(policy.getURI(), uris[1]);
     }
 
     public void testChildElementsMarshall() {
@@ -96,7 +96,7 @@ public class RegistrationInfoTest extends XMLObjectProviderBaseTestCase {
         for (int i = 0; i < 2; i++) {
 
             RegistrationPolicy policy = (RegistrationPolicy) buildXMLObject(RegistrationPolicy.DEFAULT_ELEMENT_NAME);
-            policy.setValue(uris[i]);
+            policy.setURI(uris[i]);
             policy.setXMLLang(langs[i]);
             info.getRegistrationPolicies().add(policy);
         }
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdrpi/impl/RegistrationPolicyTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdrpi/impl/RegistrationPolicyTest.java
index 4ead67e..40698d2 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdrpi/impl/RegistrationPolicyTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdrpi/impl/RegistrationPolicyTest.java
@@ -38,14 +38,14 @@ public class RegistrationPolicyTest extends XMLObjectProviderBaseTestCase {
     public void testSingleElementUnmarshall() {
         RegistrationPolicy policy = (RegistrationPolicy) unmarshallElement(singleElementFile);
         Assert.assertEquals(policy.getXMLLang(), "en");
-        Assert.assertEquals(policy.getValue(), "https://www.aai.dfn.de/en/join/");
+        Assert.assertEquals(policy.getURI(), "https://www.aai.dfn.de/en/join/");
     }
 
     /** {@inheritDoc} */
     public void testSingleElementMarshall() {
         RegistrationPolicy policy = (RegistrationPolicy) buildXMLObject(RegistrationPolicy.DEFAULT_ELEMENT_NAME);
 
-        policy.setValue("https://www.aai.dfn.de/en/join/");
+        policy.setURI("https://www.aai.dfn.de/en/join/");
         policy.setXMLLang("en");
 
         assertXMLEquals(expectedDOM, policy);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdrpi/impl/UsagePolicyTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdrpi/impl/UsagePolicyTest.java
index 9409947..b84d979 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdrpi/impl/UsagePolicyTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdrpi/impl/UsagePolicyTest.java
@@ -35,14 +35,14 @@ public class UsagePolicyTest extends XMLObjectProviderBaseTestCase {
     public void testSingleElementUnmarshall() {
         UsagePolicy policy = (UsagePolicy) unmarshallElement(singleElementFile);
         Assert.assertEquals(policy.getXMLLang(), "en");
-        Assert.assertEquals(policy.getValue(), "https://www.aai.dfn.de/en/join/");
+        Assert.assertEquals(policy.getURI(), "https://www.aai.dfn.de/en/join/");
     }
 
     /** {@inheritDoc} */
     public void testSingleElementMarshall() {
         UsagePolicy policy = (UsagePolicy) buildXMLObject(UsagePolicy.DEFAULT_ELEMENT_NAME);
 
-        policy.setValue("https://www.aai.dfn.de/en/join/");
+        policy.setURI("https://www.aai.dfn.de/en/join/");
         policy.setXMLLang("en");
 
         assertXMLEquals(expectedDOM, policy);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/InformationURLTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/InformationURLTest.java
index ea3b05f..546d5f5 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/InformationURLTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/InformationURLTest.java
@@ -49,7 +49,7 @@ public class InformationURLTest extends XMLObjectProviderBaseTestCase {
     public void testSingleElementUnmarshall() {
         InformationURL url = (InformationURL) unmarshallElement(singleElementFile);
 
-        Assert.assertEquals(url.getValue(), expectValue, "URI was not expected value");
+        Assert.assertEquals(url.getURI(), expectValue, "URI was not expected value");
         Assert.assertEquals(url.getXMLLang(), expectLang, "xml:lang was not expected value");
 
     }
@@ -59,7 +59,7 @@ public class InformationURLTest extends XMLObjectProviderBaseTestCase {
     public void testSingleElementMarshall() {
         InformationURL url = (InformationURL) buildXMLObject(InformationURL.DEFAULT_ELEMENT_NAME);
         
-        url.setValue(expectValue);
+        url.setURI(expectValue);
         url.setXMLLang(expectLang);
 
         assertXMLEquals(expectedDOM, url);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/PrivacyStatementURLTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/PrivacyStatementURLTest.java
index e40dc6e..9c41763 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/PrivacyStatementURLTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/ext/saml2mdui/impl/PrivacyStatementURLTest.java
@@ -50,7 +50,7 @@ public class PrivacyStatementURLTest extends XMLObjectProviderBaseTestCase {
     public void testSingleElementUnmarshall() {
         PrivacyStatementURL url = (PrivacyStatementURL) unmarshallElement(singleElementFile);
         
-        Assert.assertEquals(url.getValue(), expectValue, "URI was not expected value");
+        Assert.assertEquals(url.getURI(), expectValue, "URI was not expected value");
         Assert.assertEquals(url.getXMLLang(), expectLang, "xml:lang was not expected value");
     }
 
@@ -59,7 +59,7 @@ public class PrivacyStatementURLTest extends XMLObjectProviderBaseTestCase {
     public void testSingleElementMarshall() {
         PrivacyStatementURL url = (PrivacyStatementURL) buildXMLObject(PrivacyStatementURL.DEFAULT_ELEMENT_NAME);
         
-        url.setValue(expectValue);
+        url.setURI(expectValue);
         url.setXMLLang(expectLang);
 
         assertXMLEquals(expectedDOM, url);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/FunctionDrivenMetadataIndexTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/FunctionDrivenMetadataIndexTest.java
index aa65b38..cc55fe7 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/FunctionDrivenMetadataIndexTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/FunctionDrivenMetadataIndexTest.java
@@ -39,7 +39,7 @@ public class FunctionDrivenMetadataIndexTest extends OpenSAMLInitBaseTestCase {
     private FunctionDrivenMetadataIndex metadataIndex;
     
     private EntityDescriptor a, b, c;
-    private MetadataIndexKey keyA, keyB, keyC;
+    private MetadataIndexKey keyA;
     
     @BeforeClass
     protected void setUp() {
@@ -51,11 +51,11 @@ public class FunctionDrivenMetadataIndexTest extends OpenSAMLInitBaseTestCase {
         
         b = (EntityDescriptor) XMLObjectSupport.buildXMLObject(EntityDescriptor.DEFAULT_ELEMENT_NAME);
         b.setEntityID("urn:test:b");
-        keyB = new SimpleStringMetadataIndexKey(b.getEntityID().toUpperCase());
+        new SimpleStringMetadataIndexKey(b.getEntityID().toUpperCase());
         
         c = (EntityDescriptor) XMLObjectSupport.buildXMLObject(EntityDescriptor.DEFAULT_ELEMENT_NAME);
         c.setEntityID("urn:test:c");
-        keyC = new SimpleStringMetadataIndexKey(c.getEntityID().toUpperCase());
+        new SimpleStringMetadataIndexKey(c.getEntityID().toUpperCase());
     }
     
     @Test
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/AudienceRestrictionConditionValidatorTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/AudienceRestrictionConditionValidatorTest.java
index 0686692..212b84c 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/AudienceRestrictionConditionValidatorTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/assertion/impl/AudienceRestrictionConditionValidatorTest.java
@@ -50,7 +50,7 @@ public class AudienceRestrictionConditionValidatorTest extends BaseAssertionVali
     public void setUp() {
         validator = new AudienceRestrictionConditionValidator();
         audience = buildXMLObject(Audience.DEFAULT_ELEMENT_NAME);
-        audience.setAudienceURI(expectedAudienceURI);
+        audience.setURI(expectedAudienceURI);
         condition = buildXMLObject(AudienceRestriction.DEFAULT_ELEMENT_NAME);
         ((AudienceRestriction)condition).getAudiences().add(audience);
         getAssertion().getConditions().getConditions().add(condition);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/ExtractProxiedRequestersHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/ExtractProxiedRequestersHandlerTest.java
index 2926edf..1aaafa7 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/ExtractProxiedRequestersHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/ExtractProxiedRequestersHandlerTest.java
@@ -70,9 +70,9 @@ public class ExtractProxiedRequestersHandlerTest extends OpenSAMLInitBaseTestCas
         
         final Scoping scoping = scopingBuilder.buildObject();
         final RequesterID one = requesterIDBuilder.buildObject();
-        one.setRequesterID("one");
+        one.setURI("one");
         final RequesterID two = requesterIDBuilder.buildObject();
-        two.setRequesterID("two");
+        two.setURI("two");
         scoping.getRequesterIDs().addAll(Arrays.asList(one, two));
         
         ((AuthnRequest) messageCtx.getMessage()).setScoping(scoping);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/AssertionIDRefTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/AssertionIDRefTest.java
index 97e00f8..8212767 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/AssertionIDRefTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/AssertionIDRefTest.java
@@ -49,7 +49,7 @@ public class AssertionIDRefTest extends XMLObjectProviderBaseTestCase {
     public void testSingleElementUnmarshall() {
         AssertionIDRef assertionIDRef = (AssertionIDRef) unmarshallElement(singleElementFile);
 
-        String assertionID = assertionIDRef.getAssertionID();
+        String assertionID = assertionIDRef.getValue();
         Assert.assertEquals(assertionID, expectedAssertionID,
                 "AssertionID was " + assertionID + ", expected " + expectedAssertionID);
     }
@@ -66,7 +66,7 @@ public class AssertionIDRefTest extends XMLObjectProviderBaseTestCase {
         QName qname = new QName(SAMLConstants.SAML20_NS, AssertionIDRef.DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20_PREFIX);
         AssertionIDRef assertionIDRef = (AssertionIDRef) buildXMLObject(qname);
 
-        assertionIDRef.setAssertionID(expectedAssertionID);
+        assertionIDRef.setValue(expectedAssertionID);
         assertXMLEquals(expectedDOM, assertionIDRef);
     }
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/AssertionURIRefTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/AssertionURIRefTest.java
index 688262e..b6c7bd5 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/AssertionURIRefTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/AssertionURIRefTest.java
@@ -49,7 +49,7 @@ public class AssertionURIRefTest extends XMLObjectProviderBaseTestCase {
     public void testSingleElementUnmarshall() {
         AssertionURIRef assertionURIRef = (AssertionURIRef) unmarshallElement(singleElementFile);
 
-        String assertionURI = assertionURIRef.getAssertionURI();
+        String assertionURI = assertionURIRef.getURI();
         Assert.assertEquals(assertionURI, expectedAssertionURI,
                 "AssertionURI was " + assertionURI + ", expected " + expectedAssertionURI);
     }
@@ -66,7 +66,7 @@ public class AssertionURIRefTest extends XMLObjectProviderBaseTestCase {
         QName qname = new QName(SAMLConstants.SAML20_NS, AssertionURIRef.DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20_PREFIX);
         AssertionURIRef assertionURIRef = (AssertionURIRef) buildXMLObject(qname);
 
-        assertionURIRef.setAssertionURI(expectedAssertionURI);
+        assertionURIRef.setURI(expectedAssertionURI);
         assertXMLEquals(expectedDOM, assertionURIRef);
     }
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/AudienceTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/AudienceTest.java
index 56e4add..02a9af3 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/AudienceTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/AudienceTest.java
@@ -49,7 +49,7 @@ public class AudienceTest extends XMLObjectProviderBaseTestCase {
     public void testSingleElementUnmarshall() {
         Audience audience = (Audience) unmarshallElement(singleElementFile);
 
-        String audienceURI = audience.getAudienceURI();
+        String audienceURI = audience.getURI();
         Assert.assertEquals(audienceURI, expectedAudienceURI,
                 "AssertionURI was " + audienceURI + ", expected " + expectedAudienceURI);
     }
@@ -66,7 +66,7 @@ public class AudienceTest extends XMLObjectProviderBaseTestCase {
         QName qname = new QName(SAMLConstants.SAML20_NS, Audience.DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20_PREFIX);
         Audience audience = (Audience) buildXMLObject(qname);
 
-        audience.setAudienceURI(expectedAudienceURI);
+        audience.setURI(expectedAudienceURI);
         assertXMLEquals(expectedDOM, audience);
     }
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/RequesterIDTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/RequesterIDTest.java
index 7c89a3d..91389a2 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/RequesterIDTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/RequesterIDTest.java
@@ -54,7 +54,7 @@ public class RequesterIDTest extends XMLObjectProviderBaseTestCase {
     public void testSingleElementUnmarshall() {
         RequesterID reqID = (RequesterID) unmarshallElement(singleElementFile);
         
-       Assert.assertEquals(reqID.getValue(), expectedRequesterID, "Unmarshalled requester ID was not the expected value"); 
+       Assert.assertEquals(reqID.getURI(), expectedRequesterID, "Unmarshalled requester ID was not the expected value"); 
     }
 
     /** {@inheritDoc} */
@@ -62,7 +62,7 @@ public class RequesterIDTest extends XMLObjectProviderBaseTestCase {
     public void testSingleElementMarshall() {
         RequesterID reqID = (RequesterID) buildXMLObject(RequesterID.DEFAULT_ELEMENT_NAME);
 
-        reqID.setValue(expectedRequesterID);
+        reqID.setURI(expectedRequesterID);
         
         assertXMLEquals(expectedDOM, reqID);
     }
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/StatusMessageTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/StatusMessageTest.java
index 4e96f0f..df2c8b9 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/StatusMessageTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/core/impl/StatusMessageTest.java
@@ -51,7 +51,7 @@ public class StatusMessageTest extends XMLObjectProviderBaseTestCase {
     public void testSingleElementMarshall() {
         StatusMessage message = (StatusMessage) buildXMLObject(StatusMessage.DEFAULT_ELEMENT_NAME);
         
-        message.setMessage(expectedMessage);
+        message.setValue(expectedMessage);
         
         assertXMLEquals(expectedDOM, message);
     }
@@ -61,6 +61,6 @@ public class StatusMessageTest extends XMLObjectProviderBaseTestCase {
     public void testSingleElementUnmarshall() {
         StatusMessage message = (StatusMessage) unmarshallElement(singleElementFile);
         
-        Assert.assertEquals(message.getMessage(), expectedMessage, "Unmarshalled status message was not the expected value");   
+        Assert.assertEquals(message.getValue(), expectedMessage, "Unmarshalled status message was not the expected value");   
     }
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/encryption/SimpleEncryptionTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/encryption/SimpleEncryptionTest.java
index 2a436d9..7144982 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/encryption/SimpleEncryptionTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/encryption/SimpleEncryptionTest.java
@@ -265,7 +265,7 @@ public class SimpleEncryptionTest extends XMLObjectBaseTestCase {
     @Test
     public void testNewID() {
         NewID target = (NewID) buildXMLObject(NewID.DEFAULT_ELEMENT_NAME);
-        target.setNewID("SomeNewID");
+        target.setValue("SomeNewID");
         
         KeyName keyName = (KeyName) buildXMLObject(org.opensaml.xmlsec.signature.KeyName.DEFAULT_ELEMENT_NAME);
         keyName.setValue(expectedKeyName);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponseTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponseTest.java
index f4e55d5..f05115c 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponseTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponseTest.java
@@ -97,7 +97,7 @@ public class AddStatusToResponseTest extends OpenSAMLInitBaseTestCase {
 
         final Status status = response.getStatus();
         Assert.assertNotNull(status);
-        Assert.assertEquals(status.getStatusMessage().getMessage(), "Foo");
+        Assert.assertEquals(status.getStatusMessage().getValue(), "Foo");
     }
     
  }
\ No newline at end of file
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/util/SOAPSupport.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/util/SOAPSupport.java
index d2452e3..d8cecba 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/util/SOAPSupport.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/util/SOAPSupport.java
@@ -427,7 +427,7 @@ public final class SOAPSupport {
         if (faultActor != null) {
             final FaultActor faultActorObj =  (FaultActor) builderFactory.getBuilder(FaultActor.DEFAULT_ELEMENT_NAME)
                 .buildObject(FaultActor.DEFAULT_ELEMENT_NAME);
-            faultActorObj.setValue(faultActor);
+            faultActorObj.setURI(faultActor);
             faultObj.setActor(faultActorObj);
         }
             
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/encoder/http/impl/HttpClientRequestSOAP11Encoder.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/encoder/http/impl/HttpClientRequestSOAP11Encoder.java
index 71996a5..b21c5d2 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/encoder/http/impl/HttpClientRequestSOAP11Encoder.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/encoder/http/impl/HttpClientRequestSOAP11Encoder.java
@@ -24,7 +24,6 @@ import java.util.List;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.xml.SerializeSupport;
 
 import org.apache.http.HttpEntity;
@@ -65,13 +64,10 @@ public class HttpClientRequestSOAP11Encoder extends BaseHttpClientRequestXMLMess
     
     /** Constructor. */
     public HttpClientRequestSOAP11Encoder() {
-        super();
         final XMLObjectBuilderFactory builderFactory = XMLObjectProviderRegistrySupport.getBuilderFactory();
-        envBuilder = (SOAPObjectBuilder<Envelope>) builderFactory.getBuilder(Envelope.DEFAULT_ELEMENT_NAME);
-        bodyBuilder = (SOAPObjectBuilder<Body>) builderFactory.getBuilder(Body.DEFAULT_ELEMENT_NAME);
-        
-        Constraint.isNotNull(envBuilder, "Envelope Builder cannot be null");
-        Constraint.isNotNull(bodyBuilder, "Body Builder cannot be null");
+        envBuilder = (SOAPObjectBuilder<Envelope>) builderFactory.<Envelope>getBuilderOrThrow(
+                Envelope.DEFAULT_ELEMENT_NAME);
+        bodyBuilder = (SOAPObjectBuilder<Body>) builderFactory.<Body>getBuilderOrThrow(Body.DEFAULT_ELEMENT_NAME);
     }
     
     /** {@inheritDoc}
@@ -229,9 +225,8 @@ public class HttpClientRequestSOAP11Encoder extends BaseHttpClientRequestXMLMess
         final List<XMLObject> objList = header.getUnknownXMLObjects(Action.ELEMENT_NAME);
         if (objList == null || objList.isEmpty()) {
             return null;
-        } else {
-            return ((Action)objList.get(0)).getValue();
         }
+        return ((Action)objList.get(0)).getURI();
     }
     
     /** {@inheritDoc} */
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11Encoder.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11Encoder.java
index 5b6cf53..8d7fb10 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11Encoder.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11Encoder.java
@@ -23,7 +23,6 @@ import java.util.List;
 import javax.annotation.Nonnull;
 import javax.servlet.http.HttpServletResponse;
 
-import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.net.HttpServletSupport;
 import net.shibboleth.utilities.java.support.xml.SerializeSupport;
 
@@ -61,13 +60,10 @@ public class HTTPSOAP11Encoder extends BaseHttpServletResponseXMLMessageEncoder
     
     /** Constructor. */
     public HTTPSOAP11Encoder() {
-        super();
         final XMLObjectBuilderFactory builderFactory = XMLObjectProviderRegistrySupport.getBuilderFactory();
-        envBuilder = (SOAPObjectBuilder<Envelope>) builderFactory.getBuilder(Envelope.DEFAULT_ELEMENT_NAME);
-        bodyBuilder = (SOAPObjectBuilder<Body>) builderFactory.getBuilder(Body.DEFAULT_ELEMENT_NAME);
-        
-        Constraint.isNotNull(envBuilder, "Envelope Builder cannot be null");
-        Constraint.isNotNull(bodyBuilder, "Body Builder cannot be null");
+        envBuilder = (SOAPObjectBuilder<Envelope>) builderFactory.<Envelope>getBuilderOrThrow(
+                Envelope.DEFAULT_ELEMENT_NAME);
+        bodyBuilder = (SOAPObjectBuilder<Body>) builderFactory.<Body>getBuilderOrThrow(Body.DEFAULT_ELEMENT_NAME);
     }
     
     /** {@inheritDoc} */
@@ -209,9 +205,8 @@ public class HTTPSOAP11Encoder extends BaseHttpServletResponseXMLMessageEncoder
         final List<XMLObject> objList = header.getUnknownXMLObjects(Action.ELEMENT_NAME);
         if (objList == null || objList.isEmpty()) {
             return null;
-        } else {
-            return ((Action)objList.get(0)).getValue();
         }
+        return ((Action)objList.get(0)).getURI();
     }
     
     /**
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/impl/AttributedURIMarshaller.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/impl/AttributedURIMarshaller.java
index a498a9a..5aefd92 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/impl/AttributedURIMarshaller.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/impl/AttributedURIMarshaller.java
@@ -36,7 +36,7 @@ public class AttributedURIMarshaller extends AbstractWSAddressingObjectMarshalle
     protected void marshallElementContent(final XMLObject xmlObject, final Element domElement)
             throws MarshallingException {
         final AttributedURI attributedURI = (AttributedURI) xmlObject;
-        ElementSupport.appendTextContent(domElement, attributedURI.getValue());
+        ElementSupport.appendTextContent(domElement, attributedURI.getURI());
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/impl/AttributedURIUnmarshaller.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/impl/AttributedURIUnmarshaller.java
index 6cb3192..ac68248 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/impl/AttributedURIUnmarshaller.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/impl/AttributedURIUnmarshaller.java
@@ -33,7 +33,7 @@ public class AttributedURIUnmarshaller extends AbstractWSAddressingObjectUnmarsh
     protected void processElementContent(final XMLObject xmlObject, final String elementContent) {
         if (elementContent != null) {
             final AttributedURI attributedURI = (AttributedURI) xmlObject;
-            attributedURI.setValue(elementContent);
+            attributedURI.setURI(elementContent);
         }
     }
 
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/AddActionHandler.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/AddActionHandler.java
index 420da3b..e8ddc69 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/AddActionHandler.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/AddActionHandler.java
@@ -154,16 +154,15 @@ public class AddActionHandler extends AbstractHeaderGeneratingMessageHandler {
         }
         if (faultCode != null && WSAddressingConstants.WS_ADDRESSING_FAULTS.contains(faultCode)) {
             return WSAddressingConstants.ACTION_URI_FAULT;
-        } else {
-            return WSAddressingConstants.ACTION_URI_SOAP_FAULT;
         }
+        return WSAddressingConstants.ACTION_URI_SOAP_FAULT;
     }
 
     /** {@inheritDoc} */
     protected void doInvoke(@Nonnull final MessageContext messageContext) throws MessageHandlerException {
         log.debug("Issuing WS-Addressing Action header with URI value: {}", sendURI);
         final Action action = (Action) XMLObjectSupport.buildXMLObject(Action.ELEMENT_NAME);
-        action.setValue(sendURI);
+        action.setURI(sendURI);
         decorateGeneratedHeader(messageContext, action);
         SOAPMessagingSupport.addHeaderBlock(messageContext, action);
     }
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/AddMessageIDHandler.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/AddMessageIDHandler.java
index 5f2043b..bb54bb0 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/AddMessageIDHandler.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/AddMessageIDHandler.java
@@ -78,7 +78,7 @@ public class AddMessageIDHandler extends AbstractHeaderGeneratingMessageHandler
         final String id = getMessageID(messageContext);
         log.debug("Issuing WS-Addressing MessageID: {}", id);
         final MessageID messageID = (MessageID) XMLObjectSupport.buildXMLObject(MessageID.ELEMENT_NAME);
-        messageID.setValue(id);
+        messageID.setURI(id);
         decorateGeneratedHeader(messageContext, messageID);
         SOAPMessagingSupport.addHeaderBlock(messageContext, messageID);
     }
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/AddRelatesToHandler.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/AddRelatesToHandler.java
index b50539e..3e3fb6a 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/AddRelatesToHandler.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/AddRelatesToHandler.java
@@ -120,7 +120,7 @@ public class AddRelatesToHandler extends AbstractHeaderGeneratingMessageHandler
         log.debug("Issuing WS-Addressing RelatesTo header with URI '{}' and RelationshipType '{}'", 
                 relatesToURI, relationshipType);
         final RelatesTo relatesTo = (RelatesTo) XMLObjectSupport.buildXMLObject(RelatesTo.ELEMENT_NAME);
-        relatesTo.setValue(relatesToURI);
+        relatesTo.setURI(relatesToURI);
         relatesTo.setRelationshipType(relationshipType);
         decorateGeneratedHeader(messageContext, relatesTo);
         SOAPMessagingSupport.addHeaderBlock(messageContext, relatesTo);
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/ExtractMessageIDHandler.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/ExtractMessageIDHandler.java
index d867fab..dbb740f 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/ExtractMessageIDHandler.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/ExtractMessageIDHandler.java
@@ -49,7 +49,7 @@ public class ExtractMessageIDHandler extends AbstractMessageHandler {
     /** {@inheritDoc} */
     protected void doInvoke(final MessageContext messageContext) throws MessageHandlerException {
         final MessageID header = getMessageID(messageContext);
-        final String headerValue = header != null ? StringSupport.trimOrNull(header.getValue()) : null;
+        final String headerValue = header != null ? StringSupport.trimOrNull(header.getURI()) : null;
         log.debug("Extracted inbound WS-Addressing MessageID value: {}", headerValue);
         if (header != null && headerValue != null) {
             messageContext.getSubcontext(WSAddressingContext.class, true).setMessageIDURI(headerValue);
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/ValidateActionHandler.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/ValidateActionHandler.java
index 1cca0c5..22d5dce 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/ValidateActionHandler.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/wsaddressing/messaging/impl/ValidateActionHandler.java
@@ -95,7 +95,7 @@ public class ValidateActionHandler extends AbstractMessageHandler {
     /** {@inheritDoc} */
     protected void doInvoke(final MessageContext messageContext) throws MessageHandlerException {
         final Action header = getAction(messageContext);
-        final String headerValue = header != null ? StringSupport.trimOrNull(header.getValue()) : null;
+        final String headerValue = header != null ? StringSupport.trimOrNull(header.getURI()) : null;
         log.debug("Checking inbound message WS-Addressing Action URI value: {}", headerValue);
         if (Objects.equals(getExpectedActionURI(), headerValue)) {
             log.debug("Inbound WS-Addressing Action URI matched expected value");

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


More information about the commits mailing list