2015-04-14 12 views
7

Ich habe ein Dropwizard-Projekt (mit Jersey 2.x), wo ich eine andere Bibliothek verwenden muss, die eine Abhängigkeit von Jersey-Client von 1.x hat und ich ' Ich habe Probleme, beide auf dem Klassenpfad nebeneinander zu haben. Es sieht so aus, als ob HK2 alles findet, was Provider von javax.ws.rs. * Implementiert und versucht, sie zu instanziieren. Wenn es eine Klasse von Jersey 1.x, die Dependency Injection, die es braucht, ist nicht da und ich am Ende mit vielen Fehlern wie:Geting Jersey 1.x und 2.x koexistieren

Caused by: java.lang.IllegalArgumentException: The MultiPartConfig instance we expected is not present. Have you registered the MultiPartConfigProvider class? 
    at com.sun.jersey.multipart.impl.MultiPartReaderClientSide.<init>(MultiPartReaderClientSide.java:107) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408) 
    at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1107) 
    at org.jvnet.hk2.internal.ClazzCreator.createMe(ClazzCreator.java:274) 
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:368) 

Gibt es irgendeine Art und Weise Jersey 2.x zu erhalten/HK2 zu alles im com.sun.jersey. * package space ignorieren?

Antwort

10

Es sieht so aus, als ob das Standardverhalten für org.glassfish.jersey.internal.ServiceFinder Serviceimplementierungen über META-INF/services im Klassenpfad findet. Es verfügt jedoch über eine setIteratorProvider-Methode, mit der Sie eine alternative ServiceIteratorProvider-Implementierung festlegen können. Ich konnte das Problem lösen, indem ich ihm eine Implementierung gab, die alle Klassennamen von com.sun.jersey herausfiltert. *

+0

Wie konnten Sie die Instanz des ServiceFinders bekommen? – badunk

+0

In meinem Override von io.dropwizard.Application # initialize habe ich Folgendes hinzugefügt: ServiceFinder.setIteratorProvider (new Jersey2ServiceIteratorProvider()); –