10
votes

java.lang.illegalargumentException: Null Source

Nous avons une application qui utilise JSF2 et le printemps. L'application fonctionne correctement lorsqu'elle est déployée. Mais cela se produit si je suis passé par les étapes suivantes:

  1. Ouvrez la page de connexion de l'application.
  2. redéployé l'application sur le serveur.
  3. J'ai essayé de vous connecter à l'aide de la page de connexion précédemment ouverte et indique l'exception suivante: XXX

    Si je clique sur la première page de connexion, puis entrez les informations de connexion que l'application ne casse pas. Cela ne se produit que si j'essaie d'utiliser la page de connexion chargée auparavant avec l'application nouvellement déployée.

    Quelqu'un connaît la réponse?


0 commentaires

4 Réponses :


13
votes

Celui-ci aurait dû être lancé sous forme de ViewExPiredException . C'est un bogue qui a commencé à se manifester à Mojarra 2.0.3 et est fixé à Mojarra 2.1.0. Voir aussi numéro 1762 (Notez que Mojarra 2.1.0 ne fonctionne pas sur Tomcat / jetée, utilisez au moins Mojarra 2.1.1 alors).

Fondamentalement, lorsque Mojarra ne parvient pas à construire ou à restaurer la vue, il jette généralement une exception suffisamment spécifique, mais en raison de ce bogue, une vue valide a été à l'abri de manière incorrecte ultérieurement dans le code qui aboutit à illegalargumentException : Source null . Le possible la cause réelle aurait été que la vue contient une simple erreur de syntaxe XML, telle qu'une balise manquante ou une valeur d'attribut cassée, pour laquelle Mojarra aurait généralement lancé un Faceletexception avec un message très détaillé avec numéro de ligne et position, etc.

Pour empêcher le ViewExPiredException , vous devrez actualiser la page par une demande d'obtention avant de faire des actions à ce sujet. Si vous utilisez une version Mojarra où ce bogue ne se manifeste pas (par exemple 2.0.2 ou plus, ou 2.1.0 ou plus récent), vous pouvez le gérer gracieusement avec un Dans web.xml sur l'exception particulière et fournissez une page d'erreur personnalisée dans laquelle l'endutilisateur est informé que la session a été expirée, ainsi qu'un lien vers l'URI initiale de la demande.


12 commentaires

J'ai exactement la même question actuelle, je mettrai à jour ma version de Mojarra et que je vois si je reçois une sorte de problème similaire.


Je reçois une page d'erreur mentionnée dans mon web.xml mais je veux savoir ce qui cause cette question et ce qui pourrait être une solution appropriée pour cela.


@Rachel: Si vous posez des questions sur IllegalArgumentException: NULL Source , comme mentionné dans la 1ère paragraphe, c'est un bogue à Mojarra. Mise à niveau vers au moins 2.1.0. Le 2e paragraphe explique ce que le bogue est et une autre cause possible de IllegalArgumentException: null source lors de l'utilisation de Mojarra avec ce bogue. Le 3ème paragraphe explique comment traiter l'exception réelle , qui est ViewExPiredException dans le cas particulier de OP. Si vous souhaitez plus d'informations sur ViewExPiredException , check Stackoverflow.com/tags/viewexpiredException/info


Je n'ai certainement pas ViewExPiredException car ma session est stockée dans cookies et je n'ai pas gardé ma page ouverte pour assez longtemps. Aussi juste une pensée, des tiers basés sur JSF comme Icefaces , richfaces et PrimeFaces devrait réduire également l'effort de développement En tant qu'efforce de configuration, j'ai eu un peu de temps difficile à la faire comprendre.


@Rachel: Ensuite, c'est juste l'autre cause possible: une erreur de syntaxe dans XHTML. Passez à au moins 2.1.0, vous verrez la réelle Exception.


Oui, je travaille sur cette mise à niveau, entre je cherchais autour de moi et qu'il semble que 2.1.0 ait un autre ensemble de puzzles avec elle, communauté.jboss.org/thread/174379?_ssscc=t , communauté.jboss.org/thread/160868


@Rachel: C'est aussi une ancienne version :) J'ai dit au moins 2.1.0. Il est corrigé depuis cette version. Les versions plus récentes bien sûr n'ont plus ce bug. Actuellement, il est à 2.1.7. Vous devriez bien sûr choisir la dernière version.


Je mettrai à jour mes expériences ici, merci pour des informations utiles.


+1 Pour revisiter et répondre aux commentaires pour une réponse déjà sélectionnée, merci Balusc.


communauté.jboss.org/thread/174379 Détails quelques problèmes que je suis confronté à Mojarra 2.0 a jboss-faces.jar, JSF-API-2.0.3-B05.jar et JSF-IMP-2.0.3-B05.jar et j'ai téléchargé Javax.Faces-2.1.7.jar, ma consonfusion est que dans JSF- libs, est-ce que j'ajoute que Javax.Faces-2.1.7.jar ou j'ai besoin d'avoir d'autres potes comme JBoss-Faces.jar, JSF-API-2.1.7-B05.JAR et JSF-IMP-2.1.7-B05 .jar aussi?


@Rachel: Vous devriez certainement garder jboss-faces.jar . Celui-ci prend soin du déploiement JBoss JSF. Les autres sont des libs spécifiques de JSF et doivent être supprimés lorsque vous avez une version plus récente. Le javax.faces.jar est un nouveau fichier de paquet de Mojarra 2.1.5 qui contient l'API et IPL. Alors utilisez soit celui-ci, ou les fichiers API / Implex séparés. Oh, dans le futur, veuillez poser une nouvelle question. Ceci est exclus.


Bien sûr, je me tromperai, je me suis trompé dans ma compréhension concernant les sessions, j'ai ajouté un commentaire à Stackoverflow.com/q/9705443/164299.




3
votes

aussi longtemps que javax.faces.partial_state_saving est défini sur faux Vous recevrez que java.lang.illegalargumentException . Si vous définissez javax.faces.partial_state_saving sur vrai (et vous savez ce que vous faites), vous obtiendrez le "bon vieux" javax.faces.application. ViewExpiredException retour.


0 commentaires

-1
votes

Dans mon cas, je avais manqué une balise de fin dans le fichier XHTML pour l'un des appels JSTL. J'utilisais Choisir la balise et l'une des quand les étiquettes entre le choix n'ont pas eu d'étiquette finale


0 commentaires