복붙노트

[SPRING] java.lang.NoSuchFieldError : INSTANCE

SPRING

java.lang.NoSuchFieldError : INSTANCE

StormSubmitter를 통해 내 토폴로지를 제출하려고 할 때,

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

나는 봄을 사용하고있다.

Spout / Bolt 생성자에서 HttpClient를 초기화하지 않습니다. 대신에 Spring 컨텍스트에서 가져온 클래스의 생성자에서 초기화 된 () 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);
    }
}

해결법

  1. ==============================

    1.이것은 아마도 종속성 문제 일 것입니다.

    이것은 아마도 종속성 문제 일 것입니다.

    매우 명확하지 않은 오류 메시지이지만 다음과 비슷한 것을 발견했습니다. NoSuchFieldError 인스턴스를 최대 절전 모드로 유지하지만 Struts 1에서만 사용할 수 있습니까?

  2. ==============================

    2.나는 비슷한 문제에 직면했다. 클래스 경로에 두 개의 jar 파일에 동일한 클래스 인 httpcore-4.3과 apache-httpcomponents-httpcore가있다. 클래스 경로에서 apache-httpcomponents-httpcore를 제거했다.

    나는 비슷한 문제에 직면했다. 클래스 경로에 두 개의 jar 파일에 동일한 클래스 인 httpcore-4.3과 apache-httpcomponents-httpcore가있다. 클래스 경로에서 apache-httpcomponents-httpcore를 제거했다.

  3. ==============================

    3.가혹한 것은 폭풍우의 길에서 옳습니다.

    가혹한 것은 폭풍우의 길에서 옳습니다.

    그래서 내가이 작업을하기 위해 한 것은 폭풍과 함께 제공되는 httpclient와 httpcore를 제거하고 새로운 버전 4.3.3과 4.3.2로 각각 대체했습니다. 이것은 작업 / 비 활동가 / 감독자가 시작하는 데 사용하는 클래스 경로를 변경합니다. storm classpath를 실행하면 클래스 경로가 출력됩니다.

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

    나는 이것이 주위에 아주 좋은 일이라고 확신하지 못한다. 폭풍의 어떤 부분이이 항아리를 사용하는지 모르겠다.

    파이썬 폭풍 코드를 보면 폭풍우의 뿌리와 폭풍 / 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))
    
  4. ==============================

    4.나는 플러그인 폴더 안의 경로에 아래 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

    나는 플러그인 폴더 안의 경로에 아래 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

  5. from https://stackoverflow.com/questions/21622885/java-lang-nosuchfielderror-instance by cc-by-sa and MIT license