2

スクリプトレットを持つレガシー JSP があり、Websphere 7.0.0.13 のアプリケーションでテストしています。Weblogic 10.3.2 では、まったく同じデータを持つ同じ JSP が正しく機能します。

JSP はコードを使用して、大量の HTML 出力と JavaScript を生成します。Websphere では、JSP の出力の途中で NullPointerException が発生し、一貫して失敗します。失敗するたびに、ページ内の約 680 KB のデータで失敗します。

ブラウザからソースを表示すると、出力の最後の行が途切れます。次のようになります。

";document.getElementById( 'start.123.12345.67891.123123123').appendChild(divTag);exError 500: java.lang.NullPointerException

他の出力はありません。ログは、JSP からのキャッチされていない NullPointerException を報告します。

この出力のほとんどは、スクリプトレット内のページの JspWriter を使用して生成されますout.println();

autoflush=true のページ ディレクティブを追加しようとしましたが、バッファの問題である可能性があると考えていますが、それでも失敗します。<%@page autoFlush="true" %>

4

1 に答える 1

1

keep generated JSP エンジン構成パラメーターを使用して生成された Java ファイルを確認し、NullPointerException のスタック トレースからの行番号を使用して、この問題を解決しました。

元の開発者は、ファイルの末尾にあるスクリプトレットで JspWriter を null に設定しました。

<% 
  out = null;
%>
</html>

Websphere で生成された .java ファイルでは、次のように out 変数が null に設定されます。

out = null;
out.write(_jsp_string55);

out = null;JSP ファイルのステートメントをコメントアウトすると、問題が解決します。

参考までに - ループして JspWriter に出力するだけで、680 KB をはるかに超えるデータを書き出すテスト JSP も作成しました。出力のサイズに関係なく、同じ NullPointerException を再現できないことがわかりました。

于 2013-01-08T20:18:33.840 に答える