2014-02-07 8 views
21

Beim Versuch, meine Topologie durch StormSubmitter einreichen, erhalte ich -java.lang.NoSuchFieldError: INSTANZ

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

I Frühling verwenden.

Ich initiiere nicht HttpClient in Spout/Bolt Constructor. Statt dem in Konstruktor einer Klasse initialisiert, die aus Feder Context in prepare() Methode der Bolzen hergeholt werden

-Code ist wie folgt -

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

Möglicherweise ein Abhängigkeitsproblem, siehe http: // stackoverflow.com/questions/5106520/hibernate-nosuchfielderror-instance-aber-nur-mit-struts-1 –

+0

@ K.C. Danke für den Kommentar. Dies schien das Problem mit httpcore: 4.2 und 4.3 zu sein, die beide in Uberjar vorhanden sind. Aber selbst das konnte das Problem nicht lösen. –

+0

@ K.C. Scheint, das ist tatsächlich das Problem. Unser Storm-Paket stellt den httpcore-4.2.5 zur Verfügung (und somit alles zu starten, da 'storm jar/path/to/jar.jar' doppelte Abhängigkeit hat. [Bitte füge deinen Kommentar als Antwort hinzu und ich werde es akzeptieren] –

Antwort

17

Dies ist wahrscheinlich ein Abhängigkeitsproblem.

Es ist eine sehr unklare Fehlermeldung, aber ich fand etwas ähnliches hier: Hibernate NoSuchFieldError INSTANCE but only with Struts 1?

+4

Dies ist in der Tat das Problem.Unser Sturm-Paket liefert httpcore-4.2.5 (daher läuft alles als 'Sturmglas/Pfad/zu/jar.jar' verursacht doppelte Abhängigkeitsproblem.) –

+0

jemand Ich habe das gleiche Problem. – lockwobr

+0

@lockwobr, Das Problem war, dass Sturm httpcore-4.2.5 lieferte, während wir von httpcore-4.3 abhängig waren. Wir aktualisierten httpcore jar in Sturmbibliotheken, um das zu beheben. –

1

Harsh ist Recht, seine im Sturm Klassenpfad.

Also was ich getan habe, um diese Arbeit zu machen, war entfernen Sie die httpclient und httpcore, die mit Sturm kommt und ersetzte sie durch neuere Version 4.3.3 und 4.3.2 jeweils. Dies ändert den Klassenpfad, den der work/nimbus/supervisor zum Starten benutzt. Sie können storm classpath ausführen und den Klassenpfad ausgeben.

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

Ich bin nicht sicher, ob dies eine sehr gute Arbeit ist um, ich bin nicht sicher, welcher Teil des Sturms dieses Glas verwendet.

, wenn Sie den Python storm Code sehen Sie, dass es sehen alle Gläser im Sturm Wurzel und Sturm setzen/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

ich ähnliches Problem wie diese konfrontiert, In meiner Klasse Weg gab es zwei Glas enthält die gleiche Klasse, httpcore-4.3 und apache-httpcomponents-httpcore, ich habe Apache-httpcomponents-httpcore aus dem Klassenpfad entfernt das Problem gelöst.

1

Ich hatte die unter JAR-Dateien im Pfad innerhalb des Plugin-Ordner:
./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

Nachdem ich die unter Datei entfernt, es funktionierte für mich
/var/lib/jenkins/plugins/build-Pipeline-Plugin/WEB-INF/lib/httpcore -4.2.1.jar

Verwandte Themen