NationalSecurityAgency/ghidra · error · RuntimeException

The parameter '%s' of method '%s' refers to a non-existent s

Error message

The parameter '%s' of method '%s' refers to a non-existent schema '%s'

What it means

Thrown by TraceRmiTarget.typeMatches when a RemoteParameter's declared schema type name is not present in the SchemaContext of the root schema. The method specification (from the trace's object schema) references a schema name that the loaded schema definitions do not define, so type matching for that method cannot proceed.

Source

Thrown at Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/service/tracermi/TraceRmiTarget.java:610

					.findFirst()
					.orElse(null);
		}
	}

	record MatchedMethod(RemoteMethod method, Map<String, RemoteParameter> params, int score)
			implements Comparable<MatchedMethod> {
		@Override
		public int compareTo(MatchedMethod that) {
			return Integer.compare(this.score, that.score);
		}
	}

	protected static boolean typeMatches(RemoteMethod method, RemoteParameter param,
			TraceObjectSchema rootSchema, KeyPath path, Class<?> type) {
		SchemaContext ctx = rootSchema.getContext();
		TraceObjectSchema sch = ctx.getSchemaOrNull(param.type());
		if (sch == null) {
			throw new RuntimeException(
				"The parameter '%s' of method '%s' refers to a non-existent schema '%s'"
						.formatted(param.name(), method.name(), param.type()));
		}
		if (type == TraceObject.class) {
			// The method cannot impose any further restriction. It must accept any object.
			return sch == PrimitiveTraceObjectSchema.OBJECT;
		}
		else if (TraceObjectInterface.class.isAssignableFrom(type)) {
			if (path == null) {
				return sch.getInterfaces().contains(type);
			}
			KeyPath found =
				rootSchema.searchForSuitable(type.asSubclass(TraceObjectInterface.class), path);
			if (found == null) {
				return false;
			}
			return sch == rootSchema.getSuccessorSchema(path);
		}

View on GitHub (pinned to d5f144c24d)

Solutions

  1. Inspect the error's schema name and verify it is declared in the loaded schema definitions; correct the spelling in the method spec or schema file.
  2. Ensure all required schema definition files/packages for the target are installed and loaded.
  3. Regenerate the method/schema spec against the schema set currently deployed in Ghidra.
Defensive patterns

Strategy: validation

Validate before calling

SchemaContext ctx = rootSchema.getContext();
if (ctx.getSchemaOrNull(param.type()) == null) {
    throw new IllegalStateException("unknown schema: " + param.type());
}

Type guard

boolean schemaExists(TraceObjectSchema root, SchemaName name) {
    return root.getContext().getSchemaOrNull(name) != null;
}

Prevention

When it happens

Trigger: A schema manifest references a type that was never declared, was misspelled, or belongs to a schema version newer than the loaded definitions; an extension method spec names a schema that the current Ghidra build does not ship.

Common situations: Custom schema files with a typo'd schema name; method spec generated against a newer schema set; missing schema definition file; partial/corrupt schema package.

Related errors


AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14). Data as JSON: /api/errors/2358721355f34878. Report an issue: GitHub.