2013-08-26 3 views
6

私はサンプルコードを入力した後、私はhttp://docs.oracle.com/javaee/7/tutorial/doc/jsf-facelets005.htm#GIQZRはjava.util.concurrent.ConcurrentHashMap.putIfAbsent

からのJava EE 7チュートリアルを読んでいる時にjava.lang.NullPointerExceptionが発生します章私のIDEで8.5複合コンポーネントとGlassFish4.0上の例を実行するには、私はその後、私はこのチュートリアルの古いバージョンをチェックし、エラー

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) 

を持って、私は違いを発見しました。私は、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://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> 

のが、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> 

に:のJava EE 7バージョンemail.xhtmlコードで

は、次のようなものです、エラーはなくなります。違いは名前空間です。これがこのチュートリアルの問題かどうかはわかりません。知ってる?

答えて

9

新しいxmlns.jcp.org XMLネームスペースの処理方法は、最初のMojarraリリース2.2.0および2.2.1では壊れています。 Mojarra 2.2.2で修正されています(注:リンク内のチケットにはさまざまな問題の症状が説明されていますが、カバーの下では基本的に同じ原因です)。少なくともMojarra 2.2.2にアップグレードすることをお勧めします(できるだけ最新のものを選んでください)。 GlassFish 4.0には2.2.0がバンドルされています。あなたはjavaserverfaces.java.netからJARを入手できます。 GlassFishの/modulesフォルダのjavax.faces.jarファイルを新しいバージョンに置き換えるだけです。

Java EE 7チュートリアル自体は問題ありません。それは壊れたばかりの実装でした。この種の問題は、GlassFishの最初のメジャーリリースでは珍しいことではありません。 GlassFish 4.0.1または4.1が今後の驚きを避けるために引き出されるまでJava EE 7で待つことをお勧めします。 Apache TomcatやJBoss ASのような他のベンダーは、Java EE 7コンテナをリリースする時間がかかることに注意してください。彼らはまだ生産準備版を持っていません。

+0

リンクからjar Mojarra 2.2.2をダウンロードして、/ modulesに入れました。しかし、私はまだ同じ問題があります。私はGlassFish 4.1を待つべきだと思います。とにかく、あなたの返事をありがとう。 – Chris

+2

未修正のGF4セットアップで問題を再現できました。 Mojarra 2.2.2でアップグレードした後、ユースケースが私のために働き始めました。あなたはGF4 work/cache/deployフォルダをクリーンアップしましたか?どのようにサーバーを管理していますか?スタンドアローンまたはIDE経由ですか?私自身も非常に問題を確認/経験していなければ、私は一般に回答を投稿しないことに注意してください。 – BalusC

+0

最初のコメントは残念です。 jarファイルの名前を変更してGlassFishに最初にロードさせることを忘れてしまいます。それは今働く。おかげで – Chris