2015-04-14 19 views
7

को सह-अस्तित्व में प्राप्त करने के लिए मुझे ड्रॉपविज़ार्ड प्रोजेक्ट मिला है (जर्सी 2.x का उपयोग करके) जहां मुझे एक और लाइब्रेरी का उपयोग करने की आवश्यकता है जिस पर जर्सी-क्लाइंट पर 1.x से निर्भरता है और मैं ' मुझे क्लासपाथ पर सह-अस्तित्व में आने में कुछ परेशानी हो रही है। ऐसा लगता है कि क्या हो रहा है यह है कि HK2 कुछ भी ढूंढ रहा है जो प्रदाताओं को javax.ws.rs से लागू करता है। * और उन्हें तुरंत चालू करने का प्रयास करता है। जब यह जर्सी 1.x से एक वर्ग है, निर्भरता इंजेक्शन इसकी आवश्यकता है कि वहाँ नहीं है और मैं की तरह त्रुटियों के बहुत सारे के साथ अंत:जर्सी 1.x और 2.x को

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) 

वहाँ किसी भी तरह से जर्सी 2.x/HK2 को पाने के लिए है com.sun.jersey में कुछ भी अनदेखा करें। * पैकेज स्पेस?

उत्तर

10

यह org.glassfish.jersey.internal के लिए डिफ़ॉल्ट व्यवहार की तरह दिखता है। सेवाफिंडर क्लासपाथ पर मेटा-आईएनएफ/सेवाओं के माध्यम से सेवा कार्यान्वयन ढूंढना है। हालांकि, इसमें एक setIteratorProvider विधि है जो आपको वैकल्पिक सेवा इटरेटर प्रदाता कार्यान्वयन सेट करने की अनुमति देती है। मैं इसे एक कार्यान्वयन देकर समस्या का समाधान कर सकता था जो com.sun.jersey से किसी भी वर्ग के नाम को फ़िल्टर करता है। *

public class Jersey2ServiceIteratorProvider extends ServiceFinder.ServiceIteratorProvider { 

    ServiceFinder.DefaultServiceIteratorProvider delegate = new ServiceFinder.DefaultServiceIteratorProvider(); 
    @Override 
    public <T> Iterator<T> createIterator(Class<T> service, String serviceName, 
              ClassLoader loader, boolean ignoreOnClassNotFound) { 
     return delegate.createIterator(service, serviceName, loader, ignoreOnClassNotFound); 
    } 

    @Override 
    public <T> Iterator<Class<T>> createClassIterator(Class<T> service, String serviceName, 
                 ClassLoader loader, boolean ignoreOnClassNotFound) { 
     final Iterator<Class<T>> delegateClassIterator = delegate.createClassIterator(service, serviceName, loader, ignoreOnClassNotFound); 
     return Iterators.filter(delegateClassIterator, input -> !input.toString().startsWith("class com.sun.jersey")); 
    } 
} 
+0

सेवाफिंडर का उदाहरण कैसे प्राप्त किया जा सकता था? – badunk

+0

io.dropwizard के मेरे ओवरराइड में। एप्लिकेशन # प्रारंभ करें मैंने इसे जोड़ा: ServiceFinder.setIteratorProvider (नया Jersey2ServiceIteratorProvider()); –

संबंधित मुद्दे