При попытке представить свою топологию через StormSubmitter, я получаю -java.lang.NoSuchFieldError: INSTANCE
Caused by: java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
Я использую Spring.
Я не инициализирую HttpClient в конструкции Spout/Bolt. Вместо его инициализации в конструкторе класса, который выбирался с весной в контексте 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);
}
}
Возможно, проблема зависимости, см. Http: // stackoverflow.com/questions/5106520/hibernate-nosuchfielderror-instance-but-only-with-struts-1 –
@ K.C. Спасибо за комментарий. Это, казалось, проблема с httpcore: 4.2 и 4.3, которые находятся в uberjar. Но даже разрешив это, он не разрешил проблему. –
@ K.C. Похоже, это проблема. Наш штормовой пакет предоставляет httpcore-4.2.5 (и, следовательно, работает что-либо, поскольку «буря jar/path/to/jar.jar» будет иметь дублируемую зависимость. [Пожалуйста, добавьте свой комментарий в качестве ответа, и я приму его] –