java.lang.NoSuchFieldError: INSTANCE

Ao tentar enviar minha topologia através do StormSubmitter, estou recebendo –

Caused by: java.lang.NoSuchFieldError: INSTANCE at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.(DefaultHttpRequestWriterFactory.java:52) 

Eu estou usando a primavera.

Eu não estou inicializando o HttpClient no Construtor de bico / parafuso. Em vez disso, é inicializado no construtor de uma class que está sendo buscada no Spring Context no método prepare() do bolt

Código é estruturado da seguinte forma –

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); } } 

Este é provavelmente um problema de dependência.

É uma mensagem de erro muito clara, mas eu encontrei algo semelhante aqui: Hibernate NoSuchFieldError INSTANCE, mas apenas com Struts 1?

Eu enfrentei um problema semelhante como este, no meu caminho de class havia dois jar contém mesma class, httpcore-4.3 e apache-httpcomponents-httpcore, eu removi apache-httpcomponents-httpcore de caminho de class resolveu o problema.

Harsh está certo no caminho da class de tempestade.

Então o que eu fiz para fazer este trabalho foi remover o httpclient e httpcore que vem com tempestade e substituiu-os com as versões mais recentes 4.3.3 e 4.3.2, respectivamente. Isso muda o caminho de class que o works / nimbus / supervisor usa para iniciar. Você pode executar o classpath de tempestade e imprimir o caminho da class.

 [nimbus ~]$ storm classpath ...../storm-0.8.2/lib/httpclient-4.3.3.jar:..../storm-0.8.2/lib/httpcore-4.3.2.jar..... 

Não tenho certeza se este é um trabalho muito bom, não sei qual parte da tempestade usa esse jarro.

se você olhar para o código de tempestade python, verá que ele colocará todos os potes na raiz da tempestade e na tempestade / 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)) 

Eu tinha os arquivos jar abaixo no caminho dentro da pasta do plugin:
./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

Depois, eu removi o arquivo abaixo, funcionou para mim
/var/lib/jenkins/plugins/build-pipeline-plugin/WEB-INF/lib/httpcore-4.2.1.jar

    Intereting Posts