public FirewallService getResult() {
   try {
     return builder.build();
   } finally {
     builder = FirewallService.builder();
   }
 }
/** @author Kedar Dave */
public class FirewallServiceHandler extends ParseSax.HandlerWithResult<FirewallService> {
  protected StringBuilder currentText = new StringBuilder();
  private FirewallRuleHandler firewallRuleHandler;
  private FirewallService.Builder builder = FirewallService.builder();
  boolean inFirewallService;
  boolean inFirewallRule;

  @Inject
  public FirewallServiceHandler(FirewallRuleHandler firewallRuleHandler) {
    this.firewallRuleHandler = firewallRuleHandler;
  }

  public FirewallService getResult() {
    try {
      return builder.build();
    } finally {
      builder = FirewallService.builder();
    }
  }

  public void startElement(String uri, String localName, String qName, Attributes attrs)
      throws SAXException {
    if (equalsOrSuffix(qName, "FirewallService")) {
      inFirewallService = true;
    } else if (equalsOrSuffix(qName, "FirewallRule")) {
      inFirewallRule = true;
      firewallRuleHandler.startElement(uri, localName, qName, attrs);
    }
  }

  @Override
  public void endElement(String uri, String localName, String qName) throws SAXException {
    if (equalsOrSuffix(qName, "FirewallService")) {
      inFirewallService = false;
    } else if (equalsOrSuffix(qName, "FirewallRule")) {
      builder.firewallRule(firewallRuleHandler.getResult());
      inFirewallRule = false;
    } else if (equalsOrSuffix(qName, "isEnabled")) {
      if (inFirewallService) {
        String current = currentOrNull(currentText);
        if (current != null) {
          builder.isEnabled(Boolean.parseBoolean(current));
        }
      }
    }

    if (inFirewallRule) {
      firewallRuleHandler.endElement(uri, localName, qName);
    }
    currentText = new StringBuilder();
  }

  @Override
  public void characters(char ch[], int start, int length) {
    currentText.append(ch, start, length);
    firewallRuleHandler.characters(ch, start, length);
  }
}