java.lang.NoSuchFieldError: INSTANCE

Cuando trato de enviar mi topología a través de StormSubmitter, estoy obteniendo …

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

Estoy usando Spring.

No estoy inicializando HttpClient en Spout / Bolt Constructor. En su lugar, se inicializa en el constructor de una clase que se va a buscar desde Spring Context en el método de cálculo de prepare()

El código está estructurado de la siguiente manera:

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 es probablemente un problema de dependencia.

Es un mensaje de error muy claro pero encontré algo similar aquí: Hibernate NoSuchFieldError INSTANCE pero solo con Struts 1?

Me enfrenté a un problema similar al siguiente, en mi ruta de clase había dos jar que contenían la misma clase, httpcore-4.3 y apache-httpcomponents-httpcore, eliminé apache-httpcomponents-httpcore de classpath, resolvió el problema.

Harsh tiene razón, está en el camino de clase de la tormenta.

Entonces, lo que hice para que esto funcionara fue eliminar el httpclient y el httpcore que viene con storm y reemplazarlos con la versión más nueva 4.3.3 y 4.3.2, respectivamente. Esto cambia la classpath que works / nimbus / supervisor usa para comenzar. Puede ejecutar classpath de tormenta e imprimir la ruta de clase.

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

No estoy seguro de que este sea un buen trabajo, no estoy seguro de qué parte de la tormenta usa este contenedor.

si miras el código de la tormenta de python, ves que pondrá todos los flasks en la raíz de la tormenta y 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)) 

Tenía los archivos jar a continuación en la ruta dentro de la carpeta del complemento:
./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

Después, eliminé el archivo de abajo, funcionó para mí
/var/lib/jenkins/plugins/build-pipeline-plugin/WEB-INF/lib/httpcore-4.2.1.jar

    Intereting Posts