2013-08-26 33 views
6

Sto leggendo Java EE 7 Tutorial dal http://docs.oracle.com/javaee/7/tutorial/doc/jsf-facelets005.htm#GIQZRUsando nuovo spazio dei nomi xmlns.jcp.org su compositi provoca java.lang.NullPointerException a java.util.concurrent.ConcurrentHashMap.putIfAbsent

Dopo aver digitato il codice di esempio in Componenti capitolo 8,5 compositi nella mia IDE ed eseguire l'esempio a GlassFish4.0, ho ottenuto un errore

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) 

Poi controllare la versione precedente di questo tutorial, ho trovato una differenza.

In Java EE 7 versione del codice email.xhtml è come segue:

<!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> 

Ma nella versione Java EE 6

<!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> 

Dopo aver cambiato il codice per Java EE 6 versione , l'errore è andato. La differenza è lo spazio dei nomi. Non so se questo è un problema di questo tutorial. C'è qualche sa?

risposta

9

Il modo in cui sono stati gestiti i nuovi spazi dei nomi XML xmlns.jcp.org è stato risolto nelle prime versioni di Mojarra 2.2.0 e 2.2.1. È stato corretto in Mojarra 2.2.2 (nota: il ticket nel collegamento descrive diversi sintomi del problema, ma sotto le copertine, è essenzialmente la stessa causa). Si consiglia di aggiornare almeno a Mojarra 2.2.2 (selezionare sempre il più recente disponibile, se possibile). GlassFish 4.0 ha 2.2.0 in bundle. È possibile ottenere il JAR dal javaserverfaces.java.net. Tutto quello che devi fare è sostituire il file javax.faces.jar nella cartella /modules di GlassFish con la versione più recente.

La stessa esercitazione Java EE 7 va bene. Era solo l'implementazione che era stata interrotta. Questo tipo di problemi non è insolito con la primissima versione di GlassFish (tutto ha fretta di essere pronto in tempo). Consiglio di attendere con Java EE 7 fino a quando GlassFish 4.0.1 o 4.1 non è stato portato fuori per evitare future sorprese. Si noti che altri fornitori come Apache Tomcat e JBoss AS si prendono il tempo per rilasciare un contenitore Java EE 7; non hanno ancora una versione pronta per la produzione.

+0

Ho scaricato il jar Mojarra 2.2.2 dal link e lo metto in/modules. Ma ho ancora lo stesso problema. Penso che dovrei aspettare GlassFish 4.1. Comunque, grazie per la tua risposta. – Chris

+2

Sono riuscito a riprodurre il problema su una configurazione GF4 non modificata. Il tuo caso d'uso ha iniziato a funzionare per me dopo averlo aggiornato con Mojarra 2.2.2. Hai ripulito le cartelle di lavoro/cache/deploy di GF4? Come stai gestendo il server? Standalone o tramite IDE? Nota che generalmente non invio le risposte se non ho confermato/sperimentato anche io il problema stesso. – BalusC

+0

Ci scusiamo per i primi commenti. Ho dimenticato di rinominare il file jar per consentire a GlassFish di caricarlo prima. Ora funziona. Grazie – Chris