当试图通过stormsubmitter提交我的拓扑时,我得到-
Caused by: java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
我用的是Spring。
我没有在spoutt/bolt构造函数中初始化httpclient。相反,它是在从中的spring上下文获取的类的构造函数中初始化的 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);
}
}
4条答案
按热度按时间n9vozmp41#
严酷是正确的风暴级道路。
所以我所做的工作就是删除了storm附带的httpclient和httpcore,并分别用更新的版本4.3.3和4.3.2替换它们。这将更改works/nimbus/supervisor用于启动的类路径。您可以运行storm classpath并打印出类路径。
我不确定这是一个很好的工作周围,我不知道什么部分的风暴使用这个jar。
如果您查看pythonStorm代码,就会发现它会将所有jar放在storm root和storm/lib中
uqdfh47h2#
我遇到了类似这样的问题,在我的类路径中有两个jar包含相同的类,httpcore-4.3和apache-httpcomponents-httpcore,我已经从类路径中删除了apache-httpcomponents-httpcore解决了这个问题。
vom3gejh3#
我在plugin文件夹的路径中有以下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
monwx1rj4#
这可能是一个依赖性问题。
这是一个非常不清楚的错误消息,但我在这里发现了类似的东西:hibernate nosuchfielderror示例,但只有struts1?