public static Obligation getInstance(Node root) throws ParsingException {
URI id;
int fulfillOn = -1;
List assignments = new ArrayList();
AttributeFactory attrFactory = AttributeFactory.getInstance();
NamedNodeMap attrs = root.getAttributes();
try {
id = new URI(attrs.getNamedItem("ObligationId").getNodeValue());
} catch (Exception e) {
throw new ParsingException("Error parsing required attriubte " +
"ObligationId", e);
}
String effect = null;
try {
effect = attrs.getNamedItem("FulfillOn").getNodeValue();
} catch (Exception e) {
throw new ParsingException("Error parsing required attriubte " +
"FulfillOn", e);
}
if (effect.equals("Permit")) {
fulfillOn = Result.DECISION_PERMIT;
} else if (effect.equals("Deny")) {
fulfillOn = Result.DECISION_DENY;
} else {
throw new ParsingException("Invlid Effect type: " + effect);
}
NodeList nodes = root.getChildNodes();
for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item(i);
if (SunxacmlUtil.getNodeName(node).equals("AttributeAssignment")) {
try {
URI attrId =
new URI(node.getAttributes().
getNamedItem("AttributeId").getNodeValue());
AttributeValue attrValue = attrFactory.createValue(node);
assignments.add(new Attribute(attrId, null, null,
attrValue));
} catch (URISyntaxException use) {
throw new ParsingException("Error parsing URI", use);
} catch (UnknownIdentifierException uie) {