@Override
  protected void execute() throws Exception {

    String queriesXML = getXML();
    Map<String, PathQuery> toSave = new HashMap<String, PathQuery>();
    int version = getVersion();

    Reader r = new StringReader(queriesXML);
    Map<String, PathQuery> queries;
    try {
      queries = PathQueryBinding.unmarshalPathQueries(r, version);
    } catch (Exception e) {
      throw new BadRequestException("Could not de-serialize queries: " + e.getMessage());
    }

    for (String name : queries.keySet()) {
      PathQuery pq = queries.get(name);
      pq.setTitle(name);
      if (!pq.isValid()) {
        problems.add(name + ": " + formatMessage(pq.verifyQuery()));
      } else {
        Set<String> missingBags = new HashSet<String>();
        for (String bag : pq.getBagNames()) {
          if (!knownBags.contains(bag)) {
            missingBags.add(bag);
          }
        }
        if (missingBags.isEmpty()) {
          toSave.put(name, pq);
        } else {
          problems.add(name + " references the following missing lists: " + missingBags);
        }
      }
    }
    if (toSave.size() != queries.size()) {
      throw new BadRequestException("Errors with queries. " + StringUtils.join(problems, "\n"));
    }

    try {
      Map<String, String> saved = saveQueries(toSave);
      Iterator<Entry<String, String>> it = saved.entrySet().iterator();
      while (it.hasNext()) {
        Entry<String, String> pair = it.next();
        addResultItem(pair, it.hasNext());
      }
    } catch (Exception e) {
      throw new ServiceException("Failed to save queries", e);
    }
  }
  @Override
  protected void execute() throws Exception {

    String queriesXML = getXML();
    int version = getVersion();

    Reader r = new StringReader(queriesXML);
    Map<String, PathQuery> queries = PathQueryBinding.unmarshalPathQueries(r, version);

    for (String name : queries.keySet()) {
      PathQuery pq = queries.get(name);
      if (!pq.isValid()) {
        problems.add(name + ": " + formatMessage(pq.verifyQuery()));
      } else {
        Set<String> missingBags = new HashSet<String>();
        for (String bag : pq.getBagNames()) {
          if (!knownBags.contains(bag)) {
            missingBags.add(bag);
          }
        }
        if (missingBags.isEmpty()) {
          toSave.put(name, pq);
        } else {
          problems.add(name + " references the following missing lists: " + missingBags);
        }
      }
    }
    if (toSave.size() != queries.size()) {
      throw new BadRequestException("Errors with queries. " + StringUtils.join(problems, "\n"));
    }

    try {
      profile.saveQueries(toSave, saved);
    } catch (Exception e) {
      for (String name : saved) {
        profile.deleteQuery(name);
      }
      throw new ServiceException("Failed to save queries", e);
    }
  }