java.lang.NoSuchFieldError:INSTANCE
当我试图通过StormSubmitter提交我的拓扑时,我得到了 –
Caused by: java.lang.NoSuchFieldError: INSTANCE at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.(DefaultHttpRequestWriterFactory.java:52)
我正在使用Spring。
我没有在Spout / Bolt构造函数中初始化HttpClient。 相反,它是在一个类的构造函数中初始化的,该类是在bolt的prepare()
方法中从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 getBean(Class c) { return applicationContext.getBean(c); } }
这可能是一个依赖问题。
这是一个非常不清楚的错误消息,但我发现类似的东西: Hibernate NoSuchFieldError INSTANCE但只有Struts 1?
我遇到类似这样的问题,在我的类路径中有两个jar包含相同的类,httpcore-4.3和apache-httpcomponents-httpcore,我已经从类路径中删除了apache-httpcomponents-httpcore解决了这个问题。
苛刻是风暴阶级的正确道路。
所以我做的工作是删除风暴附带的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.....
我不确定这是一个非常好的工作,我不确定风暴的哪个部分使用这个jar子。
如果你看一下python 风暴代码,你会发现它会将所有的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))
我在插件文件夹中的路径中有以下jar文件:
./var/lib/jenkins/plugins/build-pipeline-plugin/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