theonedev/onedev · warning · NoSubscriptionException
Project level issue state transition rule definition
Error message
Project level issue state transition rule definition
What it means
The project-level issue state transition rules setting page is a premium feature; the constructor checks WicketUtils.isSubscriptionActive() and throws NoSubscriptionException when no active OneDev subscription exists. The feature is gated behind a paid plan.
Source
Thrown at server-core/src/main/java/io/onedev/server/web/page/project/setting/issuesetting/ProjectStateTransitionListPage.java:27
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import io.onedev.server.OneDev;
import io.onedev.server.data.migration.VersionedXmlDoc;
import io.onedev.server.exception.NoSubscriptionException;
import io.onedev.server.model.support.issue.transitionspec.TransitionSpec;
import io.onedev.server.service.ProjectService;
import io.onedev.server.util.CollectionUtils;
import io.onedev.server.web.component.issue.transitionspec.StateTransitionListPanel;
import io.onedev.server.web.util.WicketUtils;
public class ProjectStateTransitionListPage extends ProjectIssueSettingPage {
public ProjectStateTransitionListPage(PageParameters params) {
super(params);
if (!WicketUtils.isSubscriptionActive()) {
throw new NoSubscriptionException("Project level issue state transition rule definition");
}
}
@Override
protected void onInitialize() {
super.onInitialize();
add(new StateTransitionListPanel("transitions") {
@Override
protected List<TransitionSpec> getTransitions() {
return getProject().getIssueSetting().getTransitionSpecs();
}
@Override
protected void onSave(AjaxRequestTarget target, int transitionIndex, TransitionSpec transition) {
String oldAuditContent = null;
List<TransitionSpec> transitions = getProject().getIssueSetting().getTransitionSpecs();View on GitHub (pinned to d44925c47c)
Solutions
- Purchase or renew a OneDev subscription and apply the license key on the server (Site Settings / subscription).
- Use the free alternative: define state transitions via project issue setting that is available in community (e.g. rules at the global level if offered) or manage states manually.
- If a subscription was recently applied, restart/refresh so the license check picks it up.
Defensive patterns
Strategy: validation
Validate before calling
if (!WicketUtils.isSubscriptionActive()) {
// hide the state transitions menu entry / redirect to subscription page
throw new NoSubscriptionException("State transition rules require an active subscription");
} Type guard
boolean canManageStateTransitions() { return WicketUtils.isSubscriptionActive(); } Try / catch
try { openStateTransitionsPage(project); } catch (NoSubscriptionException e) { promptSubscriptionUpgrade(); } Prevention
- Hide premium menu items when no subscription is active.
- Monitor subscription expiry and renew proactively.
- Apply the license key on all instances (including replicas) after purchase.
When it happens
Trigger: Opening Project -> Issue Settings -> State Transitions while running community edition or with an expired/absent subscription key.
Common situations: Using OneDev community build after evaluating premium features; subscription expired; license key not applied on the instance; sharing settings documentation that assumes enterprise edition.
Related errors
- An active subscription is required for this feature
- An active subscription is required for this feature
- An active subscription is required for this feature
- This feature requires an active subscription
- This operation requires active subscription
AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06).
Data as JSON: /api/errors/0c6a5fca92501f06.
Report an issue: GitHub.