2011-04-20 9 views
6

Estoy tratando de hacer algo simple. Inyecte calificado String (o File) en CDI.Inyectar cadena con calificador en CDI

Así que tener un calificador:

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

tengo un productor:

public class FilesRepositoryPathProducer { 

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

Y yo estoy tratando de usarlo:

@ApplicationScoped 
public class FilesRepository { 

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

Sin embargo, soldadura no puede crear una instancia este frijol Me estoy haciendo una excepción:

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 es unproxable, pero ¿por qué SOLDADURA quiere crear un proxy? Tiene el alcance @Dependent, por lo que AFAIK no debería crear proxy de todos modos. ¿Cómo puedo hacer que funcione?

+0

Se puede publicar 'FilesRepositoryBeanTest' por favor? –

+0

presenta un problema en Weld. El código parece correcto según la especificación. – Bozho

+0

Eche un vistazo aquí: http://stackoverflow.com/questions/7583871/injecting-a-named-string-using-cdi, parece ser un problema similar – Kris

Respuesta

2

necesita el constructor por defecto

@ApplicationScoped 
public class FilesRepository { 

    public FilesRepository() { 
    } 

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