public List<OperationDocumentation> getDocumentation() {
   List<OperationDocumentation> result = new ArrayList<OperationDocumentation>();
   Collection<OperationTypeImpl> ops = lookup().values();
   for (OperationTypeImpl ot : ops.toArray(new OperationTypeImpl[ops.size()])) {
     result.add(ot.getDocumentation());
   }
   Collections.sort(result);
   return result;
 }
 protected synchronized void putOperation(OperationTypeImpl op, boolean replace)
     throws OperationException {
   if (!replace && operations.containsKey(op.getId())) {
     throw new OperationException(
         "An operation is already bound to: "
             + op.getId()
             + ". Use 'replace=true' to replace an existing operation");
   }
   operations.put(op.getId(), op);
   lookup = null;
 }