ThreadSafeFilterConfigurationMapper.ConfigBuilder - Not possible to add BasePlainTextFilter configurations

Issue #1338 resolved
Philipp created an issue

Hi Okapi team,

I see in 1.46.0 that the FilterConfigurationMapper has been deprecated and is to be replaced by the ThreadSafeFilterConfigurationMapper. I’d like to make you aware of the following issue.

Unfortunately, it’s not possible to load the configurations of the BasePlainTextFilter(s) via method net.sf.okapi.common.filters.ThreadSafeFilterConfigurationMapper.ConfigBuilder#addConfigurations

When I try to add this filter, e.g., by adding it to the net.sf.okapi.common.integration.RoundTripUtils#loadDefaultConfigs method…

private static Map<String, FilterConfiguration> loadDefaultConfigs() {
    var builder = new ThreadSafeFilterConfigurationMapper.ConfigBuilder();
    builder.addConfigurations(BasePlainTextFilter.class); // add filter here to provoke the error
    builder.addConfigurations(OpenXMLFilter.class);
    ...

… I get the following error:

Caused by: net.sf.okapi.common.exceptions.OkapiException: java.lang.IllegalArgumentException: Couldn't add configurations for net.sf.okapi.filters.plaintext.base.BasePlainTextFilter
    at net.sf.okapi.common.integration.RoundTripUtils.extract(RoundTripUtils.java:193)
    at net.sf.okapi.common.integration.RoundTripUtils.extract(RoundTripUtils.java:78)
    at net.sf.okapi.common.integration.XmlOrTextRoundTripIT.runTest(XmlOrTextRoundTripIT.java:65)
    ... 10 more
Caused by: java.lang.IllegalArgumentException: Couldn't add configurations for net.sf.okapi.filters.plaintext.base.BasePlainTextFilter
    at net.sf.okapi.common.filters.ThreadSafeFilterConfigurationMapper$ConfigBuilder.addConfigurations(ThreadSafeFilterConfigurationMapper.java:443)
    at net.sf.okapi.common.integration.RoundTripUtils.loadDefaultConfigs(RoundTripUtils.java:83)
    at java.base/java.lang.ThreadLocal$SuppliedThreadLocal.initialValue(ThreadLocal.java:305)
    at java.base/java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:195)
    at java.base/java.lang.ThreadLocal.get(ThreadLocal.java:172)
    at net.sf.okapi.common.filters.ThreadSafeFilterConfigurationMapper.getConfiguration(ThreadSafeFilterConfigurationMapper.java:239)
    at net.sf.okapi.common.filters.ThreadSafeFilterConfigurationMapper.createFilter(ThreadSafeFilterConfigurationMapper.java:202)
    at net.sf.okapi.common.filters.ThreadSafeFilterConfigurationMapper.createFilter(ThreadSafeFilterConfigurationMapper.java:233)
    at net.sf.okapi.common.integration.RoundTripUtils.extract(RoundTripUtils.java:132)
    ... 12 more
Caused by: net.sf.okapi.common.exceptions.OkapiException: java.io.IOException: Stream closed
    at net.sf.okapi.common.BaseParameters.load(BaseParameters.java:95)
    at net.sf.okapi.common.filters.ThreadSafeFilterConfigurationMapper.createDefaultParameters(ThreadSafeFilterConfigurationMapper.java:73)
    at net.sf.okapi.common.filters.ThreadSafeFilterConfigurationMapper$ConfigBuilder.addConfigurations(ThreadSafeFilterConfigurationMapper.java:437)
    ... 20 more
Caused by: java.io.IOException: Stream closed
    at java.base/java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:157)
    at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:282)
    at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:343)
    at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:270)
    at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:313)
    at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188)
    at java.base/java.io.InputStreamReader.read(InputStreamReader.java:177)
    at java.base/java.io.Reader.read(Reader.java:250)
    at net.sf.okapi.common.BaseParameters.load(BaseParameters.java:85)
    ... 22 more

I set this to critical, because the FilterConfigurationMapper is deprecated and I had to create a custom filter mapper class in our code base to work around this issue.

Thanks for looking into it!

Kind regards

Philipp

Comments (4)

  1. jhargrave-straker

    @Pablo Pardo Pérez

    The BasePlainTextFilter shouldn't be called directly. Since PlainTextFilter is a compound filter all the functionality of the other plaintext filters are included within it.

    Just add this to your loadConfigs:

    builder.addConfigurations(PlainTextFilter.class);
    
  2. Philipp reporter

    Hey Jim! Great! This solves the issue and I’m now able to replace the FilterConfigurationMapper with the ThreadSafeFilterConfigurationMapper.

    Thank you very much and have a good day!

  3. Log in to comment