2017-08-24 3 views
0

Je dois créer des objets avec des données définies par l'utilisateur à l'exécution.TO faire que j'ai utilisé injecté google guice.Mais quand je cours mon test il jette null exception de pointeur.S'il vous plaît laissez-moi savoir où j'ai fait l'erreur.Google Guice Assisted Inject objet est null

IArtifacts Interface

public interface IArtifacts { 

    MavenMetaDataXMLDTO getArtifactsVersions(); 
} 

ArtifactsService.java

public class ArtifactsService implements IArtifacts { 

    private ProductProfile productProfile; 

    @Inject 
    public ArtifactsService(@Assisted ProductProfile productProfile){ 
     System.out.println(productProfile.getArtifactManagementURL()); 
     this.productProfile=productProfile; 
    } 

    @Override 
    public MavenMetaDataXMLDTO getArtifactsVersions() { 

     System.out.println(productProfile.getArtifactManagementURL()); 
     return null; 
    } 
} 

ArtifactsFactory Interface

public interface ArtifactsFactory { 

    IArtifacts create(ProductProfile productProfile); 
} 

Module de classe

@Override 
    protected void configure() { 
    install(new FactoryModuleBuilder().implement(IArtifacts.class,ArtifactsService.class).build(ArtifactsFactory.class)); 
} 

TestArtifacts.java

public class TestArtifacts { 

    @Inject // this obj is null 
    private ArtifactsFactory artifactsFactory; 

    private IArtifacts s; 

    public TestArtifacts(){ 

    } 

    public void getdata(){ 
     //Pass custom data to factory 
     this.s=artifactsFactory.create(Products.QA.get()); 
     System.out.println(s.getArtifactsVersions()); 
    } 


} 

RESTE ENDPOINT

@GET 
    @Path("/test") 
    @Produces(MediaType.APPLICATION_JSON) 
    public String getartifacts(){ 
     new TestArtifacts().getdata(); 
    } 

Répondre

1

j'ai pu corriger l'ajout suivant extrait de code ci-dessous pour TestArtifacts.java classe

TestArtifacts.java

private Injector injector=Guice.createInjector(new MYModule());//where implemented configuration 

    @Inject 
    private ArtifactsFactory artifactsFactory=injector.getInstance(ArtifactsFactory.class); 
1

vous avez créé une instance des TestArtifacts de classe sur votre propre dans votre repos Endpoint classe, mais tout votre classe es doivent être créés par le Framework Guice et non par vous.

Alors, comment le framework Guice devrait-il injecter quelque chose dans votre classe quand vous le créez avec du nouveau? Vous devez également injecter la classe TestArtifacts dans votre point de terminaison de repos et votre point de terminaison de repos doit également être créé par Guice.

Mise à jour:

Peut-être que ce lien vous aidera

https://sites.google.com/a/athaydes.com/renato-athaydes/posts/jersey_guice_rest_api

+0

merci pour quick reply.do vous avez des échantillons à se référer. – gihan

+0

voir ma mise à jour. J'ai ajouté un lien –