Beim Versuch, meine Topologie durch StormSubmitter einreichen, erhalte ich -java.lang.NoSuchFieldError: INSTANZ
Caused by: java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
I Frühling verwenden.
Ich initiiere nicht HttpClient in Spout/Bolt Constructor. Statt dem in Konstruktor einer Klasse initialisiert, die aus Feder Context in prepare()
Methode der Bolzen hergeholt werden
-Code ist wie folgt -
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);
}
}
Möglicherweise ein Abhängigkeitsproblem, siehe http: // stackoverflow.com/questions/5106520/hibernate-nosuchfielderror-instance-aber-nur-mit-struts-1 –
@ K.C. Danke für den Kommentar. Dies schien das Problem mit httpcore: 4.2 und 4.3 zu sein, die beide in Uberjar vorhanden sind. Aber selbst das konnte das Problem nicht lösen. –
@ K.C. Scheint, das ist tatsächlich das Problem. Unser Storm-Paket stellt den httpcore-4.2.5 zur Verfügung (und somit alles zu starten, da 'storm jar/path/to/jar.jar' doppelte Abhängigkeit hat. [Bitte füge deinen Kommentar als Antwort hinzu und ich werde es akzeptieren] –