1. ホーム
  2. java

[解決済み] java.lang.NoSuchFieldError: INSTANCE

2022-02-07 09:16:06

質問

StormSubmitterでトポロジーを送信しようとすると、次のようなメッセージが表示されます。

Caused by: java.lang.NoSuchFieldError: INSTANCE  
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)

Springを使っています。

Spout/BoltのコンストラクタでHttpClientを初期化していないのです。代わりに、Spring Contextから取得されるクラスのコンストラクタで初期化されます。 prepare() メソッド

コードは以下のように構成されています。

SomeBolt.java

@Component
public class SomeBolt extends BaseRichBolt {
    private OutputCollector _collector;
    private SomeClient someClient;

    @Override
    public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
        _collector = collector;
        someClient = AppContext.getBean(SomeClient.class);
    }
}

SomeClient.java

@Component
public class SomeClient {
    private final CloseableHttpClient httpClient;

    public SomeClient() {
        this.httpClient = (httpClient == null ? HttpClients.createDefault() : httpClient);
    }
}

AppContext.java

@Component
public class AppContext implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        AppContext.applicationContext = applicationContext;
    }

    public static <T> T getBean(Class<T> c) {
        return applicationContext.getBean(c);
    }
}

解決方法は?

これは、おそらく依存関係の問題です。

非常に不明瞭なエラーメッセージですが、ここに似たようなものを発見しました。 Hibernate NoSuchFieldError INSTANCE でも Struts 1 だけ?