web-dev-qa-db-ja.com

java.lang.NoSuchFieldError:INSTANCE

StormSubmitterを使用してトポロジを送信しようとすると、

_Caused by: Java.lang.NoSuchFieldError: INSTANCE  
at org.Apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.Java:52)
_

私はSpringを使用しています。

Spout/Bolt ConstructorでHttpClientを初期化していません。代わりに、ボルトのprepare()メソッドでSpring Contextからフェッチされるクラスのコンストラクターで初期化されます

コードの構造は次のとおりです-

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);
    }
}
_
25
Harsh Moorjani

これはおそらく依存関係の問題です。

非常に不明瞭なエラーメッセージですが、次のようなものが見つかりました: Hibernate NoSuchFieldError INSTANCEしかしStruts 1のみ?

17
K.C.

私はこのような同様の問題に直面しました。私のクラスパスには、同じクラスを含む2つのjar、httpcore-4.3とApache-httpcomponents-httpcoreがあり、クラスパスからApache-httpcomponents-httpcoreを削除して問題を解決しました。

9

厳しいのは、まさに嵐のクラスパスです。

そのため、この作業を行うために行ったのは、stormに付属している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.....

これが非常に良い回避策であるかどうかはわかりません。ストームのどの部分でこのjarが使用されているかわかりません。

python storm コードを見ると、すべての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))
1
lockwobr

プラグインフォルダー内のパスに以下の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

1
user3048960