java.lang.NoSuchFieldError:INSTANCE

Har*_*ani 26 java spring httpclient apache-storm

当我尝试通过StormSubmitter提交我的拓扑时,我得到了 -

Caused by: java.lang.NoSuchFieldError: INSTANCE  
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
Run Code Online (Sandbox Code Playgroud)

我正在使用Spring.

我没有在Spout/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);
    }
}
Run Code Online (Sandbox Code Playgroud)

SomeClient.java

@Component
public class SomeClient {
    private final CloseableHttpClient httpClient;

    public SomeClient() {
        this.httpClient = (httpClient == null ? HttpClients.createDefault() : httpClient);
    }
}
Run Code Online (Sandbox Code Playgroud)

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

K.C*_*.C. 17

这可能是一个依赖问题.

这是一个非常不清楚的错误消息,但我发现类似的东西: Hibernate NoSuchFieldError INSTANCE但只有Struts 1?

  • 这实际上是个问题.我们的风暴包提供了httpcore-4.2.5(因此运行任何东西,因为`storm jar/path/to/jar.jar`导致重复依赖问题.) (4认同)

小智 9

我遇到类似这样的问题,在我的类路径中有两个jar包含相同的类,httpcore-4.3和apache-httpcomponents-httpcore,我已经从类路径中删除了apache-httpcomponents-httpcore解决了这个问题.