2015-05-01 21 views
5

Ho un'API REST DropWizard scritta e funziona. Uno dei punti finali di risorse scrive in realtà una e-mail, ma non appena aggiungo le seguenti dipendenze DropWizard inizia a fallire all'avvioCome evitare il conflitto di dipendenze quando si utilizza il client dropwizard + jersey

<dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-client</artifactId> 
     <version>1.18.1</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-core</artifactId> 
     <version>1.18.1</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey.contribs</groupId> 
     <artifactId>jersey-multipart</artifactId> 
     <version>1.18.1</version> 
    </dependency> 

La dipendenza DropWizard è:

<dependency> 
     <groupId>io.dropwizard</groupId> 
     <artifactId>dropwizard-core</artifactId> 
     <version>0.8.1</version> 
    </dependency> 

L'errore all'avvio è molto lungo, di seguito riassunte

WARN [2015-05-01 20:06:08,887] org.glassfish.jersey.internal.Errors: The following warnings have been detected: WARNING: Unknown HK2 failure detected: 
MultiException stack 1 of 2 
java.lang.NullPointerException 
    at com.sun.jersey.core.provider.jaxb.AbstractJAXBProvider.setConfiguration(AbstractJAXBProvider.java:113) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    .... 
    MultiException stack 2 of 2 
java.lang.IllegalStateException: Unable to perform operation: method inject on com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App 
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:395) 
    .... 
    MultiException stack 3 of 3 
java.lang.IllegalStateException: Unable to perform operation: create on org.glassfish.jersey.message.internal.MessageBodyFactory 
    ... 

sto indovinando DropWizard sta utilizzando un'altra dipendenza in conflitto così come faccio a fare con questo?

Grazie in anticipo

risposta

4

Dropwizard 0.8.x utilizza Jersey 2.x che contrasta naturalmente con la tua maglia dipendenze 1.x..

penso che potrebbe andare bene con jersey-client finché non si dispone di dropwizard-client dipendenza ma jersey-core sarà in conflitto in molti punti con la maglia della dropwizard che io non credo che si possa risolvere il problema. Inoltre, non credo che ti occorresse lo jersey-core per l'invio di e-mail.

Se hai bisogno di questa maglia, prova a usare Jersey 2.16 invece che è la versione che il dropwizard sta usando.

+0

ok penso di aver appena realizzato qualcosa di doloroso ... il codice per la posta elettronica è stato scritto per (vecchio?) Cliente della maglia, mentre la nuova maglia è nella dipendenza dal glassfish - che sembra completamente diversa. Altrimenti quello che ho sopra va solo fino alla versione 1.19 –

+0

Ho avuto lo stesso problema, se il tuo progetto di genitore maven è dropwizard, puoi omettere la versione jersey nella tua dipendenza e tutto va bene. Il mio genitore non è dropwizard, quindi mvn dependency: l'albero rivelerà la versione della jersey necessaria (per DW 0.9.3 it.s 2.22.1) – Joel

1

Ho avuto lo stesso problema (sto usando DW 0.9.2 e hanno indesiderate dipendenze transitive sia DW 0.7.2 e Jersey 1.x)

La soluzione era abbastanza semplice: nella dipendenza che sta portando si quei due famiglia di librerie, dichiara un exclusion e dovrebbe funzionare, per esempio, è così che ho fatto in Gradle:

compile("com.example.culprit:culprit:1.2.3") { 
    exclude group: 'io.dropwizard' 
    exclude group: 'com.sun.jersey' 
} 

La sintassi per Maven è abbastanza simile (più prolisso in realtà ;-))

Spero che questo aiuti qualcuno.