2014-02-07 1 views
21

При попытке представить свою топологию через StormSubmitter, я получаю -java.lang.NoSuchFieldError: INSTANCE

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

Я использую Spring.

Я не инициализирую HttpClient в конструкции Spout/Bolt. Вместо его инициализации в конструкторе класса, который выбирался с весной в контексте 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); 
    } 
} 
+0

Возможно, проблема зависимости, см. Http: // stackoverflow.com/questions/5106520/hibernate-nosuchfielderror-instance-but-only-with-struts-1 –

+0

@ K.C. Спасибо за комментарий. Это, казалось, проблема с httpcore: 4.2 и 4.3, которые находятся в uberjar. Но даже разрешив это, он не разрешил проблему. –

+0

@ K.C. Похоже, это проблема. Наш штормовой пакет предоставляет httpcore-4.2.5 (и, следовательно, работает что-либо, поскольку «буря jar/path/to/jar.jar» будет иметь дублируемую зависимость. [Пожалуйста, добавьте свой комментарий в качестве ответа, и я приму его] –

ответ

17

Это, вероятно, проблема зависимости.

Это сообщение очень неясно ошибка, но я нашел что-то подобное здесь: Hibernate NoSuchFieldError INSTANCE but only with Struts 1?

+4

Это проблема. Наш пакет штормов снабжает httpcore-4.2.5 (следовательно, работает что-либо, поскольку «штормовой банд/путь/в/jar.jar» вызывает проблему с дублирующейся зависимостью.) –

+0

У меня такая же проблема. У меня такая же проблема. – lockwobr

+0

@lockwobr. Проблема заключалась в том, что шторм поставлял httpcore-4.2.5, в то время как мы были зависимы от httpcore-4.3. Мы исправили httpcore jar в библиотеках штормов, чтобы исправить это. –

1

Сурового является правом ее в пути класса шторма.

Так что я сделал это, чтобы удалить httpclient и httpcore, который поставляется со штормом, и заменил их более новой версией 4.3.3 и 4.3.2 соответственно. Это изменяет путь к классам, который использует works/nimbus/supervisor. Вы можете запустить путь штурма, и он напечатает путь класса.

[nimbus ~]$ storm classpath 
...../storm-0.8.2/lib/httpclient-4.3.3.jar:..../storm-0.8.2/lib/httpcore-4.3.2.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)) 
7

я столкнулся подобный вопрос, как это, в моем классе пути было два банка содержит тот же класс, httpcore-4.3 и apache-httpcomponents-httpcore, я удалил apache-httpcomponents-httpcore из пути класса, разрешившего проблему.

1

Я была ниже опарника в пути в папке плагина:
./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

После, я удалил файл ниже, он работал для меня
/вар/Lib/Jenkins/плагины/строить-конвейерный-плагин/WEB-INF/Lib/httpcore -4.2.1.jar