stanfordnlp/CoreNLP · error · RuntimeException

Error getting field value for

Error message

Error getting field value for {fieldName}

What it means

The debug helper fieldValues uses reflection (field.get(o)) to dump all declared fields of an object; any reflective access failure (IllegalAccessException, IllegalArgumentException, etc.) is wrapped in a RuntimeException with this message naming the field.

Solutions

  1. Run with --add-opens flags for the failing package, or downgrade expectations and use toString() instead of reflection
  2. Remove SecurityManager / module access restrictions for the code doing reflection
  3. Only call fieldValues on CoreNLP's own model/config classes, not JDK or third-party objects

Example fix

// before
java --module-path corenlp.jar ...  // JDK 17, setAccessible fails
// after
java --add-opens edu.stanford.nlp.coref.statistical=ALL-UNNAMED --module-path corenlp.jar ...
Defensive patterns

Strategy: validation

Validate before calling

if (System.getSecurityManager() != null)
  throw new IllegalStateException("fieldValues reflection requires no SecurityManager");

Try / catch

try {
  String dump = fieldValues(o);
} catch (RuntimeException e) {
  logger.warning("reflective dump failed: " + e.getMessage());
  String dump = o.toString();
}

Prevention

When it happens

Trigger: Calling fieldValues(o) when a declared field of o's class cannot be accessed reflectively — e.g. security manager/JPMS denies setAccessible, or the field belongs to a different class instance for primitives/primitive wrappers edge cases.

Common situations: Running CoreNLP training/debug on JDK 9+ with strong encapsulation where setAccessible on JDK-internal or private fields fails; custom classloaders; SecurityManager restrictions.

Understand the failure class

Background: "You do not have permission" / 403 Forbidden errors: authenticated but not allowed — causes and fixes across open-source libraries — this error's family across 31 libraries.

Related errors


AI-assisted analysis of stanfordnlp/CoreNLP@1b7edd19c4 (2026-09-10). Data as JSON: /api/errors/f3e2cd7a2494822d. Report an issue: GitHub.

Appendix: source

Thrown at src/edu/stanford/nlp/coref/statistical/StatisticalCorefTrainer.java:72

    makeDir(extractedFeaturesPath);

    datasetFile = dataPath + "dataset.ser";
    predictionsName = name + "_predictions";
    goldClustersFile = dataPath + "gold_clusters.ser";
    mentionTypesFile = dataPath + "mention_types.ser";
    compressorFile = extractedFeaturesPath + "compressor.ser";
    extractedFeaturesFile = extractedFeaturesPath + "compressed_features.ser";
  }

  public static String fieldValues(Object o) {
    String s = "";
    Field[] fields = o.getClass().getDeclaredFields();
    for (Field field : fields) {
      try {
        field.setAccessible(true);
        s += field.getName() + " = " + field.get(o) + "\n";
      } catch (Exception e) {
        throw new RuntimeException("Error getting field value for " + field.getName(), e);
      }
    }
    return s;
  }

  private static void preprocess(Properties props, Dictionaries dictionaries, boolean isTrainSet)
      throws Exception {
    (isTrainSet ? new DatasetBuilder(StatisticalCorefProperties.minClassImbalance(props),
        StatisticalCorefProperties.maxTrainExamplesPerDocument(props)) :
          new DatasetBuilder()).runFromScratch(props, dictionaries);
    new MetadataWriter(isTrainSet).runFromScratch(props, dictionaries);
    new FeatureExtractorRunner(props, dictionaries).runFromScratch(props, dictionaries);
  }

  public static void doTraining(Properties props) throws Exception {
    setTrainingPath(props);
    Dictionaries dictionaries = new Dictionaries(props);

View on GitHub (pinned to 1b7edd19c4)