protected virtual XacmlContextAttributeValue ReadContextAttributeValue(XmlReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            if (!reader.IsStartElement(XacmlConstants.ElementNames.AttributeValue, this.Version.NamespaceContext))
            {
                throw ThrowHelperXml(reader, "XML message is not valid.");
            }

            XacmlContextAttributeValue result = new XacmlContextAttributeValue();

            if (reader.IsEmptyElement)
            {
                reader.Read();
                return(result);
            }

            reader.ReadStartElement(XacmlConstants.ElementNames.AttributeValue, this.Version.NamespaceContext);

            // Read elements
            // result.Value = reader.ReadInnerXml() // TODO:
            result.Value = reader.ReadContentAsString(); // JG:

            reader.ReadEndElement();

            return(result);
        }
Beispiel #2
0
        protected virtual void WriteContextAttributeValue(XmlWriter writer, XacmlContextAttributeValue xacmlContextAttributeValue)
        {
            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }

            if (xacmlContextAttributeValue == null)
            {
                throw new ArgumentNullException(nameof(xacmlContextAttributeValue));
            }

            writer.WriteStartElement(XacmlConstants.Prefixes.Context, XacmlConstants.ElementNames.AttributeValue, this.Version.NamespaceContext);

            // UNDONE AnyAttribute

            writer.WriteRaw(xacmlContextAttributeValue.Value);

            writer.WriteEndElement();
        }
        protected virtual XacmlContextAttribute ReadContextAttribute(XmlReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            if (!reader.IsStartElement(XacmlConstants.ElementNames.Attribute, this.Version.NamespaceContext))
            {
                throw ThrowHelperXml(reader, "XML message is not valid.");
            }

            // Read attributes
            Uri      attributeId        = this.ReadAttribute <Uri>(reader, XacmlConstants.AttributeNames.AttributeId, isRequered: true);
            Uri      dataType           = this.ReadAttribute <Uri>(reader, XacmlConstants.AttributeNames.DataType, isRequered: true);
            string   issuer             = this.ReadAttribute <string>(reader, XacmlConstants.AttributeNames.Issuer, isRequered: false);
            DateTime?issueInstant       = null;
            string   issueInstantString = this.ReadAttribute <string>(reader, XacmlConstants.AttributeNames.IssueInstant, isRequered: false);

            if (!string.IsNullOrWhiteSpace(issueInstantString))
            {
                issueInstant = XmlConvert.ToDateTime(issueInstantString, XmlDateTimeSerializationMode.Local);
            }

            reader.ReadStartElement(XacmlConstants.ElementNames.Attribute, this.Version.NamespaceContext);

            // Read elements
            XacmlContextAttributeValue attrVal = this.ReadRequired(XacmlConstants.ElementNames.AttributeValue, this.Version.NamespaceContext, this.ReadContextAttributeValue, reader);

            XacmlContextAttribute result = new XacmlContextAttribute(attributeId, dataType, attrVal)
            {
                Issuer       = issuer,
                IssueInstant = issueInstant,
            };

            reader.ReadEndElement();

            return(result);
        }