Czytam Java EE 7 Tutorial z http://docs.oracle.com/javaee/7/tutorial/doc/jsf-facelets005.htm#GIQZRKorzystanie nową nazw xmlns.jcp.org na kompozytach powoduje java.lang.NullPointerException na java.util.concurrent.ConcurrentHashMap.putIfAbsent
Po wpisaniu kodu przykład w w rozdziale 8.5 Komponenty kompozytowe w moim IDE i uruchomić przykład na GlassFish4.0, mam błąd
java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1078)
at com.sun.faces.util.Cache.get(Cache.java:116)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.getComponentMetadata(FaceletViewHandlingStrategy.java:237)
at com.sun.faces.application.ApplicationImpl.createComponent(ApplicationImpl.java:951)
at javax.faces.application.ApplicationWrapper.createComponent(ApplicationWrapper.java:648)
Potem sprawdzić wersję tego poradnika, znalazłem różnicę.
W Java EE 7 wersja kodu email.xhtml jest jak następuje:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:composite="http://xmlns.jcp.org/jsf/composite"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>This content will not be displayed</title>
</h:head>
<h:body>
<composite:interface>
<composite:attribute name="value" required="false"/>
</composite:interface>
<composite:implementation>
<h:outputLabel value="Email id: "></h:outputLabel>
<h:inputText value="#{cc.attrs.value}"></h:inputText>
</composite:implementation>
</h:body>
</html>
Ale w Java EE 6 wersji
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>This content will not be displayed</title>
</h:head>
<h:body>
<composite:interface>
<composite:attribute name="value" required="false"/>
</composite:interface>
<composite:implementation>
<h:outputLabel value="Email id: "></h:outputLabel>
<h:inputText value="#{cc.attrs.value}"></h:inputText>
</composite:implementation>
</h:body>
</html>
Po zmianie kodu Java EE 6 wersji , błąd zniknął. Różnica polega na przestrzeni nazw. Nie wiem, czy to jest problem z tego samouczka. Czy jest ktoś wie?
Pobrałem jar Mojarra 2.2.2 z linku i umieściłem go w/modules. Ale wciąż mam ten sam problem. Myślę, że powinienem poczekać na GlassFish 4.1. W każdym razie, dziękuję za odpowiedź. – Chris
Udało mi się odtworzyć Twój problem na niezmodyfikowanej konfiguracji GF4. Twój przypadek użycia zaczął działać dla mnie po aktualizacji z Mojarra 2.2.2. Czy wyczyściłeś foldery pracy/pamięci podręcznej/wdrożenia w GF4? Jak zarządzasz serwerem? Autonomiczny lub przez IDE? Zauważ, że generalnie nie zamieszczam odpowiedzi, jeśli sam nie potwierdziłem/nie doświadczyłem tego samego problemu. – BalusC
Przepraszamy za pierwsze komentarze. Zapomniałem zmienić nazwę pliku jar, aby GlassFish wczytał go jako pierwszy. Teraz działa. Dzięki – Chris