2011-04-20 17 views
6

में क्वालीफायर के साथ स्ट्रिंग इंजेक्ट करें मैं सरल काम करने की कोशिश कर रहा हूं। सीडीआई में योग्य String (या File) इंजेक्ट करें।सीडीआई

तो मैं एक क्वालीफायर है:

@Retention(RetentionPolicy.RUNTIME) 
@Target({FIELD,METHOD,PARAMETER,TYPE}) 
@Qualifier 
public @interface FilesRepositoryPath {} 

मैं एक निर्माता है:

public class FilesRepositoryPathProducer { 

    @Produces 
    @FilesRepositoryPath 
    public String getRepositoryDirectory() { 
    return "path.taken.from.configuration"; 
    } 
} 

और मैं इसका इस्तेमाल करने की कोशिश कर रहा हूँ:

@ApplicationScoped 
public class FilesRepository { 

    @Inject 
    public FilesRepository(@FilesRepositoryPath String filesDirectory) { 
    //Do some stuff 
    } 
} 

हालांकि, वेल्ड का दृष्टांत नहीं कर सकते यह बीन मैं एक अपवाद हो रही है:

org.jboss.arquillian.impl.event.FiredEventException: org.jboss.weld.exceptions.UnproxyableResolutionException: WELD-001410 The injection point [field] @Inject private za.co.fnb.commercial.dms.file.FilesRepositoryBeanTest.repo has non-proxyable dependencies 

मैं जानता हूँ कि String unproxable है, लेकिन क्यों वेल्ड एक प्रॉक्सी बनाना चाहता है? इसमें @Dependent गुंजाइश है, इसलिए AFAIK इसे किसी भी तरह प्रॉक्सी नहीं बनाना चाहिए। मैं इसे कैसे कारगर बना सकता हूं?

+0

आप पोस्ट 'FilesRepositoryBeanTest' कृपया की जरूरत है? –

+0

वेल्ड में कोई समस्या दर्ज करें। कोड spec के अनुसार ठीक लगता है। – Bozho

+0

यहां एक नज़र डालें: http://stackoverflow.com/questions/7583871/injecting-a-named-string-using-cdi, एक समान समस्या प्रतीत होती है – Kris

उत्तर

2

आप डिफ़ॉल्ट निर्माता

@ApplicationScoped 
public class FilesRepository { 

    public FilesRepository() { 
    } 

    @Inject 
    public FilesRepository(@FilesRepositoryPath String filesDirectory) { 
    //Do some stuff 
    } 
} 
संबंधित मुद्दे