2016-04-16 1 views
1

Coincé avec le problème étrange. J'ajoute un ServletContext à ma classe (défini comme @Service) et il retourne toujours null. J'ai essayé @Autowired et sans elle.Printemps ServletContext renvoie null

De même, je n'ai reçu aucune erreur au démarrage de l'application. Seule la valeur nulle quand je l'appelle 'servletContext.getRealPath ("/ WEB-INF /")'

C'est une classe où je suis en train de l'utiliser:

@Service 
public class MyFactory implements ServletContextAware { 

    @Autowired 
    ServletContext servletContext; 

    public void setServletContext(ServletContext servletContext) { 
     this.servletContext = servletContext; 
    } 

    private someMethod(){ 
     servletContext.getRealPath("/WEB-INF/"); //this return null 
    } 

} 

PS servletContext lui-même null, pas une méthode .getRealPath("/WEB-INF/")

+0

Vous laissez bien sûr Spring installer la classe pour vous, sans appeler 'new MyFactory()' vous-même, n'est-ce pas? Et 'someMethod()' est appelé * après que * autowiring se termine aussi, non? – Andreas

+0

oui, les deux à droite. – user1935987

Répondre

1

La description de votre problème est source de confusion. Vous dites ajouter ServletContext et renvoie null (@Autowired ou non), ce qui donne l'impression que la valeur de servletContext est nulle, alors que votre exemple de code et de texte semble indiquer que getRealPath() renvoie null.

Si servletContext est nul, alors servletContext.getRealPath() provoque NullPointerException.

Si servletContext est non nul, alors servletContext.getRealPath() réussirons, mais peut return null.

javadoc getRealPath() Citation:

Cette méthode retourne null si le conteneur de servlet est incapable de traduire la donnée chemin virtuel à un vrai chemin .

Donc, si /WEB-INF/ est dans un fichier .war qui n'a pas été déballée, il n'y a pas de chemin réel et getRealPath() renvoie null.

+1

Désolé, vous avez raison, la description du problème n'est pas assez claire. servletContext est null. – user1935987