尝试通过StormSubmitter提交我的拓扑时,我得到了 -
Caused by: java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
我正在使用Spring。
我没有在Spout / Bolt构造函数中初始化HttpClient。相反,它在一个类的构造函数中初始化,该类是从prepare()
bolt方法中的Spring Context获取的
代码结构如下 -
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);
}
}
答案 0 :(得分:17)
这可能是一个依赖问题。
这是一个非常不清楚的错误消息,但我发现类似的东西: Hibernate NoSuchFieldError INSTANCE but only with Struts 1?
答案 1 :(得分:9)
我遇到类似这样的问题,在我的类路径中有两个jar包含相同的类,httpcore-4.3和apache-httpcomponents-httpcore,我已经从类路径中删除了apache-httpcomponents-httpcore解决了这个问题。
答案 2 :(得分:1)
苛刻是风暴阶级的道路。
所以我做的工作就是删除风暴附带的httpclient和httpcore,并分别用更新版本的4.3.3和4.3.2替换它们。这会更改works / nimbus / supervisor用于启动的类路径。您可以运行storm classpath并打印出类路径。
[nimbus ~]$ storm classpath
...../storm-0.8.2/lib/httpclient-4.3.3.jar:..../storm-0.8.2/lib/httpcore-4.3.2.jar.....
我不确定这是一个非常好的工作,我不确定风暴的哪个部分使用这个罐子。
如果你看一下python storm代码,你会发现它会把所有的jar都放在暴风根和storm / lib中
def get_classpath(extrajars):
ret = get_jars_full(STORM_DIR)
ret.extend(get_jars_full(STORM_DIR + "/lib"))
ret.extend(extrajars)
return normclasspath(":".join(ret))
答案 3 :(得分:1)
我在插件文件夹里面的路径中有以下jar文件:
的 ./ VAR / LIB /詹金斯/插件/集结流水线插件/ WEB-INF / LIB /的HttpCore-4.2.1.jar
./var/lib/jenkins/plugins/git-client/WEB-INF/lib/httpcore-4.3.2.jar
./var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/httpcore-4.2.4.jar
之后,我删除了下面的文件,它对我有用 的 /var/lib/jenkins/plugins/build-pipeline-plugin/WEB-INF/lib/httpcore-4.2.1.jar 强>