OpenRefine / OpenRefine/OpenRefine

Legacy extension functions/controls causes AbstractMethodError

Open
#7,488 0 comments 0 reactions 1 assignee View on GitHub

@tfmorris is already working on this.

Since Oct 8, 2025.

extension grel Type: Bug
Dominant language
Java
Stars
12k
Forks
2.2k
Avg merge
1d 14h
Merged PRs (30d)
27

Description

If you load a pre-2018 extension, such as the georefine extension, you will get an empty Help tab in the Expression Preview window caused by an AbstractMethodError for the new methods which were added to the Function interface during the conversion from org.json to Jackson for JSON serialization.

To Reproduce

Steps to reproduce the behavior:

  1. Install the georefine extension
  2. Open a project and use Transform... to load the GREL expression editor
  3. Click the Help tab.
Current Results

Help tab is disabled with no hint as to why.

Expected Behavior

At a minimum, the user should be informed what happened and what the offending Function/Control is. Ideally, the legacy JSON write method would be invoked to fetch the JSON to be inserted into the Jackson output.

Versions
  • OpenRefine: 3.0 or later
  • extension(s): pre-3.0
Additional context

Normally these extensions don't even load, but the author of this one released a new version that bundles the org.json JAR when OpenRefine removed it from the build.

Stack trace:

java.lang.AbstractMethodError
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:688)
	at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:760)
	at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:807)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:763)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:719)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:34)
	at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:732)
	at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:760)
	at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183)
	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:503)
	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:342)
	at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1587)
	at com.fasterxml.jackson.databind.ObjectWriter._writeValueAndClose(ObjectWriter.java:1289)
	at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1114)
	at com.google.refine.commands.HttpUtilities.respondJsonInternal(HttpUtilities.java:119)
	at com.google.refine.commands.HttpUtilities.respondJSON(HttpUtilities.java:107)
	at com.google.refine.commands.Command.respondJSON(Command.java:385)
	at com.google.refine.commands.Command.respondJSON(Command.java:375)
	at com.google.refine.commands.expr.GetExpressionLanguageInfoCommand.doGet(GetExpressionLanguageInfoCommand.java:70)

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.