/** {@inheritDoc} */
  protected void processAttribute(XMLObject xmlObject, Attr attribute)
      throws UnmarshallingException {
    PolicyType policy = (PolicyType) xmlObject;

    if (attribute.getLocalName().equals(PolicyType.POLICY_ID_ATTRIB_NAME)) {
      policy.setPolicyId(attribute.getValue());
    } else if (attribute.getLocalName().equals(PolicyType.VERSION_ATTRIB_NAME)) {
      policy.setVersion(attribute.getValue());
    } else if (attribute.getLocalName().equals(PolicyType.RULE_COMBINING_ALG_ID_ATTRIB_NAME)) {
      policy.setRuleCombiningAlgoId(attribute.getValue());
    } else {
      super.processAttribute(xmlObject, attribute);
    }
  }
  /** {@inheritDoc} */
  protected void processChildElement(XMLObject parentXMLObject, XMLObject childXMLObject)
      throws UnmarshallingException {
    PolicyType policy = (PolicyType) parentXMLObject;

    if (childXMLObject instanceof DescriptionType) {
      policy.setDescription((DescriptionType) childXMLObject);
    } else if (childXMLObject.getElementQName().equals(DefaultsType.POLICY_DEFAULTS_ELEMENT_NAME)) {
      policy.setPolicyDefaults((DefaultsType) childXMLObject);
    } else if (childXMLObject instanceof TargetType) {
      policy.setTarget((TargetType) childXMLObject);
    } else if (childXMLObject instanceof CombinerParametersType) {
      policy.getCombinerParameters().add((CombinerParametersType) childXMLObject);
    } else if (childXMLObject instanceof RuleCombinerParametersType) {
      policy.getRuleCombinerParameters().add((RuleCombinerParametersType) childXMLObject);
    } else if (childXMLObject instanceof VariableDefinitionType) {
      policy.getVariableDefinitions().add((VariableDefinitionType) childXMLObject);
    } else if (childXMLObject instanceof RuleType) {
      policy.getRules().add((RuleType) childXMLObject);
    } else if (childXMLObject instanceof ObligationsType) {
      policy.setObligations((ObligationsType) childXMLObject);
    } else {
      super.processChildElement(parentXMLObject, childXMLObject);
    }
  }