2011-07-28 8 views
3

私はWicketのCaptchaImageResourceを使用して、提出フォームをボットから保護しています。私のテスト環境(Mac)では、Jettyサーバーを使用して、ローカルのTomcatインスタンスにデプロイされたときに正常に動作します。Wicket CaptchaImageResource Linuxサーバで長さゼロの画像を作成する

しかし、アプリケーションがリモートLinuxサーバー上のTomcat 7にデプロイされたときにCaptchaイメージがレンダリングされません。代わりにゼロバイトの応答が得られます。

HTTP/1.1 200 OK 
Date: Thu, 28 Jul 2011 14:28:22 GMT 
Set-Cookie: JSESSIONID=6D37183A1FF2C3F43C35B49433A0FC1B; Path=/; HttpOnly 
Cache-Control: no-cache, must-revalidate 
Content-Type: image/png 
Content-Length: 0 
Connection: close 

* Closing connection #0 

私の最初の本能は、Tomcatが-Djava.awt.headless=trueで実行するために必要なことだった。ここではどのような画像URLのcurl -vリターンです。私はそれを設定し、psで実際にそのオプションで実行されていることを確認しましたが、captchaはまだレンダリングに失敗します。

Tomcatのログにエラーメッセージや警告が表示されません。リモートデバッグを可能にするために行ったところで、ブレークポイントをCaptchaImageResource.render()の深いところに設定しました。それはその方法に入っていますが、私はそれが戻ってくるのを見ません。 291行目のどこかで、私のブレークポイントにぶつかるのは不思議なことです。

サーバーJVMはjava-1.6.0-openjdk.x86_64です。 JVMがヘッドレスモードでAWTグラフィックスをレンダリングできない理由はありますか?

+0

あなたはどのLinuxのフレーバーに展開していますか?私はCentOSのJFreeChartで同様の問題をレンダリングしています(Tomcatコンテナーもあります)。 – ireddick

+0

@ireddick - 私にとっては同じです.RackspaceのCentosサーバーです。 –

+1

同じマシンでスタンドアロンテストを試しましたか?あるいは、別のOSでのTomcatテスト。 – biziclop

答えて

4

ああ、biziclopが私を正しい方向に導いてくれました。私はこのクイックスタンドアロン(すなわち無Tomcatの)テストを書いた:次のエラーが生じた

public static void main(String[] args) throws Exception 
{ 
    CaptchaImageResource resource = new CaptchaImageResource(); 
    int avail = resource.getResourceStream().getInputStream().available(); 
    System.out.println("avail: " + avail); 
} 

:その文字列のいくつかのグーグルは、以下のパッケージをインストールするために私を導い
Probable fatal error:No fonts found. 

yum install bitmap* 
yum install dejavu-lgc* 
yum install bitstream-vera* 

これで動作します。

+0

いいです。私はいつかそれが私にも便利になると賭ける。 :) – biziclop

関連する問題