ENGLISH

Apache Forrestの小ネタ

公開 : 2012-02-24
最終更新日 : $Date: 2012-02-25 16:54:25 +0900 (Sat, 25 Feb 2012) $

前口上

この文書では、Apache Forrestについて個人的に調べた結果を並べています。 この文書は技術的に正確であることを意図して書いてはいますが、どこかで大嘘をついていたり、 もっと有効な方法があることを見逃していたり、経年により陳腐化しているかもしれません。 私の理解の最前線を書いているようなものなので必ずしもわかりやすくはないかもしれません。

目次

  1. 使っている環境
  2. Forrest-0.9の障害対応
  3. 参考リンク

使っている環境

Forrest-0.9の障害対応

チュートリアルでの例外

最初のチュートリアルである、 Explanation and features によれば、

>forrest seed
>forrest

を、実行しなさいということになっています。しかし >forrest の時点で例外のスタックトレースが 大量に出てきます。 (参考:Forrest のメーリングリスト) まずこれを何とかします。

java.lang.NullPointerException
        at org.apache.cocoon.environment.AbstractEnvironment.release(AbstractEnvironment.java:563)
        at org.apache.cocoon.environment.wrapper.MutableEnvironmentFacade.release(MutableEnvironmentFacade.java:314)
        at org.apache.cocoon.generation.FileGenerator.recycle(FileGenerator.java:64)
        at org.apache.avalon.excalibur.pool.InstrumentedResourceLimitingPool.put(InstrumentedResourceLimitingPool.java:407)
        at org.apache.avalon.excalibur.component.PoolableComponentHandler.doPut(PoolableComponentHandler.java:212)
        at org.apache.avalon.excalibur.component.ComponentHandler.put(ComponentHandler.java:425)
        at org.apache.avalon.excalibur.component.ExcaliburComponentSelector.release(ExcaliburComponentSelector.java:307)
        at org.apache.cocoon.components.ExtendedComponentSelector.release(ExtendedComponentSelector.java:301)
        at org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.recycle(AbstractProcessingPipeline.java:723)
        at org.apache.cocoon.components.pipeline.impl.BaseCachingProcessingPipeline.recycle(BaseCachingProcessingPipeline.java:78)
        at org.apache.cocoon.components.pipeline.impl.AbstractCachingProcessingPipeline.recycle(AbstractCachingProcessingPipeline.java:1130)
        at org.apache.avalon.excalibur.pool.InstrumentedResourceLimitingPool.put(InstrumentedResourceLimitingPool.java:407)
        at org.apache.avalon.excalibur.component.PoolableComponentHandler.doPut(PoolableComponentHandler.java:212)
        at org.apache.avalon.excalibur.component.ComponentHandler.put(ComponentHandler.java:425)
        at org.apache.avalon.excalibur.component.ExcaliburComponentSelector.release(ExcaliburComponentSelector.java:307)
        at org.apache.cocoon.components.ExtendedComponentSelector.release(ExtendedComponentSelector.java:301)
        at org.apache.cocoon.components.EnvironmentDescription.release(CocoonComponentManager.java:695)
        at org.apache.cocoon.components.CocoonComponentManager.endProcessing(CocoonComponentManager.java:262)
        at org.apache.cocoon.Cocoon.process(Cocoon.java:739)
        at org.apache.cocoon.bean.CocoonWrapper.getPage(CocoonWrapper.java:514)
        at org.apache.cocoon.bean.CocoonBean.processTarget(CocoonBean.java:499)
        at org.apache.cocoon.bean.CocoonBean.process(CocoonBean.java:356)
        at org.apache.cocoon.Main.main(Main.java:321)

手っ取り早く直したい人は、 このjarファイル%FORREST_HOME%\lib\core\ 置いてください。 cocoon.2.1.12-dev.jarは、拡張子を適当に変えてforrestからロードされないようにしてください。 これで、例外がスローされることなく普通に実行できるようになります。

疑り深い人向け。 このjarは、Cocoon2.1.11のソースにちょっと手を入れてビルドすれば作れます。

  1. http://cocoon.apache.org/mirror.cgi から、 cocoon-2.1.11-src.zipをダウンロードする。
  2. zipをどこか作業フォルダに展開する。
  3. \src\java\org\apache\cocoon\environment\AbstractEnvironment.java の562行目付近で、 nullのチェックを入れる。
    修正前
    public void release(final org.apache.excalibur.source.Source source) {
        if (null != source) {
            this.sourceResolver.release(source);
        }
    }
    
    修正後
    public void release(final org.apache.excalibur.source.Source source) {
        if (null != source && this.sourceResolver != null ) {
            this.sourceResolver.release(source);
        }
    }
    
  4. Cocoon に付属しているbuild.batを実行してjarファイルをビルドする。実行にはJDK5が必要のようです。 Java6ではうまくいきません。ビルドの詳細は Installing Apache Cocoonを参考にどうぞ。

「こんな修正で大丈夫か?」という向きもあると思いますが、動作優先ということで。

日本語の文字化け

>forrest seed が出来たらコンテンツのひな形が出力されます。 作業フォルダの \src\documentation\content\xdocs 配下のxmlをどんどん編集したいのですが、 日本語を入力する時はもうひとつ設定が必要です。

%FORREST_HOME%\main\targets\site.xml 最後のほう(version0.9なら255行目付近)の、 fixcrlfタスクに、encoding="UTF-8"という属性を追加してください。 UTF-8としていますが、実際に本文に使うエンコーディングを属性値にする必要があります。 今時ならばUTF-8で問題ないでしょう。 これで、文字化けなく普通に >forrest が実行できるようになります。

<fixcrlf srcdir="${project.site-dir}" encoding="UTF-8"> <!-- ここにencoding属性を追加 -->
<include name="**/*.html"/>
<!-- The CSS Includes are a workaround for FOR-925 -->
<include name="**/*.css"/>
</fixcrlf>

本文のHTMLは化けなくなりますが、生成されるPDFは化けたままです。(フォントの情報がない?) これはまたおいおい調べる予定。


クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 2.1 日本 ライセンスの下に提供されています。
作者: Fukuhara Kazuro.

トップページに戻る