- PR -

Tomcat 3.x へ Cocoon のセットアップ

投稿者投稿内容
おがわ
大ベテラン
会議室デビュー日: 2001/08/01
投稿数: 199
お住まい・勤務地: 千葉県
投稿日時: 2001-09-01 01:12
「XMLサーバ/Cocoon自由自在! 第1回 Cocoonをセットアップしよう」を拝見しました。
最後に載っていた、Tomcat 3.x へ Cocoon をセットアップできないという問題は大変有名な話ですよね。
同じことが Apache SOAPでも指摘され、現在リリースされている最新バージョン(v2.2)では、Xerces --> JAXP を元に全面的に書き直されていると思いました。
厳密には、Versionの異なるXML仕様が実装されたI/F同士の競合ですよね。
Tomcat 3.x では、DOM1/SAX1で実装されてますけど
Cocoon 1.8.x では、DOM2/SAX2を元に書き下ろされています。
JavaのクラスパスはTomcat側を優先していますので、CocoonがI/Fの不整合により動作しないわけですよね。
そこで、Tomcat内部で使用しているJAXP 1.0を、JAXP 1.1へ強引に上書きしたところ、Cocoonが無事動作するようになりました。
まだ確実な方法とはいえませんが、JAXP 1.1は、JAXP 1.0との互換性が保証されているとドキュメントに記載されていたと思いましたので、多分大丈夫だと思います。
ちなみに、Tomcat 4.0 では、JAXP 1.1 を使用しているので、Cocoonは特に問題なく動作します。
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2001-09-01 13:37
私も現在cocoonのセットアップをしているのですが、
うまく動作してくれず情報を探していると、
偶然にも@ITのトップに似た記事を見つけここに
きました。


私の場合は、「NoSuchMethodError」ではないですが
動作確認のために、Cocoon Live Show にアクセス
すると下記のエラーが出ています。

エラーを見ると「//org/apache/cocoon/processor/xsp/library/java/util.xsl」 という
リソースが見つからないと言っているようですが、WEB-INF\lib の配下にコピーした
cocoon.jar を展開すると上記のリソースが含まれています。

[エラー内容]
Publishing Engine could not be initialized.
java.lang.RuntimeException: Error loading logicsheet at resource://org/apache/cocoon/processor/xsp/library/java/util.xsl due to java.lang.Exception: Resource not found or retrieving error.
at org.apache.cocoon.processor.xsp.XSPProcessor.init(XSPProcessor.java:302)
at org.apache.cocoon.framework.Manager.create(Manager.java:109)
at org.apache.cocoon.framework.Router.init(Router.java:80)
at org.apache.cocoon.framework.Manager.create(Manager.java:109)
at org.apache.cocoon.Engine.<init>(Engine.java:179)
at org.apache.cocoon.Engine.getInstance(Engine.java:232)
at org.apache.cocoon.Cocoon.init(Cocoon.java:157)
at org.apache.tomcat.core.ServletWrapper.doInit(ServletWrapper.java:317)
at org.apache.tomcat.core.Handler.init(Handler.java:215)
at org.apache.tomcat.core.ServletWrapper.init(ServletWrapper.java:296)
at org.apache.tomcat.core.Handler.service(Handler.java:254)
at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:812)
at org.apache.tomcat.core.ContextManager.service(ContextManager.java:758)
at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:213)
at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:501)
at java.lang.Thread.run(Thread.java:484)

[環境]
Tomcat 3.2.3
Cocoon 1.8.2
JDK 1.3.0_02

これもやはり、Cocoon と Tomcat のバージョンに
よるものなのでしょうか?
おがわ
大ベテラン
会議室デビュー日: 2001/08/01
投稿数: 199
お住まい・勤務地: 千葉県
投稿日時: 2001-09-01 15:14
> 私の場合は、「NoSuchMethodError」ではないですが
> 動作確認のために、Cocoon Live Show にアクセス
すると下記のエラーが出ています。
>
> ( 省略 )
>
> エラーを見ると 「//org/apache/cocoon/processor/xsp/library/java/util.xsl」 という
> リソースが見つからないと言っているようですが、WEB-INFlib の配下にコピーした
> cocoon.jar を展開すると上記のリソースが含まれています。
>
>
> これもやはり、Cocoon と Tomcat のバージョンに
> よるものなのでしょうか?
いいえ。このエラーは、Cocoon内部で使用しているリソースファイルが見つからないというものであり、Tomcatとは何も関係ありません。
cocoon.propertiesというプロパティの中に、リソースファイルの配置先が設定されている項目(processor.xsp.logicsheet だったような...)が記述されています。
その項目を修正すれば、サンプルが動くようになるでしょう。
cocoon.propertiesの詳しいカスタマイズ方法に関しては、第1回の記事にまだ載っていないようですね。
第2回の記事で詳しく紹介していただけるのでしょうか。
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2001-09-01 19:18
リプライありがとうございます。

cocoon.properties 等の設定を確認してみました。
ただ、私には設定が間違っているように思えなかったので
間違い等あればご指摘ください。

・cocoon.properties の設定
processor.xsp.logicsheet.context.java = resource://org/apache/cocoon/processor/xsp/library/java/context.xsl
processor.xsp.logicsheet.cookie.java = resource://org/apache/cocoon/processor/xsp/library/java/cookie.xsl
processor.xsp.logicsheet.global.java = resource://org/apache/cocoon/processor/xsp/library/java/global.xsl
processor.xsp.logicsheet.request.java = resource://org/apache/cocoon/processor/xsp/library/java/request.xsl
processor.xsp.logicsheet.response.java = resource://org/apache/cocoon/processor/xsp/library/java/response.xsl
processor.xsp.logicsheet.session.java = resource://org/apache/cocoon/processor/xsp/library/java/session.xsl
processor.xsp.logicsheet.util.java = resource://org/apache/cocoon/processor/xsp/library/java/util.xsl
processor.xsp.logicsheet.sql.java = resource://org/apache/cocoon/processor/xsp/library/sql/sql.xsl
processor.xsp.logicsheet.esql.java = resource://org/apache/cocoon/processor/xsp/library/sql/esql.xsl
processor.xsp.logicsheet.fp.java = resource://org/apache/cocoon/processor/xsp/library/fp/fp.xsl

・ディレクトリ構成
[tomcat]
+[webapps]
+[cocoon]
+[conf]
| +cocoon.properties ←この中で上記の設定をしている
+[samples]
| +index.xml
+[WEB-INF]
+web.xml
+[lib]
+cocoon.jar ←これを展開すると util.xsl がある


・web.xml の設定
<web-app>
<servlet>
<servlet-name>org.apache.cocoon.Cocoon</servlet-name>
<servlet-class>org.apache.cocoon.Cocoon</servlet-class>
<init-param>
<param-name>properties</param-name>
<param-value>conf/cocoon.properties</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>org.apache.cocoon.Cocoon</servlet-name>
<url-pattern>*.xml</url-pattern>
</servlet-mapping>
</web-app>

ちなみにプロパティファイルがちゃんと読み込めていないのではないかと考えて
<init-param>を
<param-name>properties</param-name>
<param-value>/conf/cocoon.properties</param-value>
~
としても同じでした。
(まあ、エラーにもプロパティファイルにも同じ「resource://org/apache/cocoon/processor/
xsp/library/java/util.xsl」という文字列があるので、読み込めているんでしょうけど・・・)

上記の設定は参考書「Javaサーバサイドプログラミング 原田洋子著」に書かれている
ものと同じ設定にしているので設定自体は間違っていると思えません。
(cocoon.properties は修正していないですけど…)


このエラーが cocoon が出していることから、Cocoon.class が含まれている cocoon.jar は
読み込めていると思うのですが、同じjarファイルに含まれる util.xsl ファイルが読み込まれない
というのがどうも納得がいきません。(当然ながらjarファイル内のパスもあっているようですし)


何かが間違っていると思うのですが、私には何が間違いなのかわかりません。
ヒントのようなもので十分ですので(自分で調べる気はありますので)
もし何かお気づきの点があればご指摘ください。

ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2001-09-01 19:22
行の先頭の空白が削除されて、ディレクトリ構成が
よく分からなくなってしまっていたので、再度
投稿いたします。(全角空白に変えました。)

・ディレクトリ構成
[tomcat]
 +[webapps]
  +[cocoon]
   +[conf]
   | +cocoon.properties ←この中で上記の設定をしている
   +[samples]
   | +index.xml
   +[WEB-INF]
    +web.xml
    +[lib]
     +cocoon.jar ←これを展開すると util.xsl がある
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2001-09-01 20:27
プロパティファイルの設定をいろいろ変えてやっていますが、相変わらず同じエラーが出ています。。。

設定を変えると、それに応じてエラーメッセージ中のリソースの文字列が変わってくるのでやはりプロパティファイルは、読み込めているようです。

また、設定内容によっては、以下のように
java.io.FileNotFoundException
のエラーとなることもありました。

java.lang.RuntimeException: Error loading logicsheet at resource:/processor/xsp/library/java/util.xsl due to java.io.FileNotFoundException: resource:\processor\xsp\library\java\util.xsl (?????????????????????? ???????????????)

あまり参考にならないかもしれませんが、
一応追加報告まで。。。
おがわ
大ベテラン
会議室デビュー日: 2001/08/01
投稿数: 199
お住まい・勤務地: 千葉県
投稿日時: 2001-09-01 21:09
ちなみに、Cocoon 1.7.4 ではどうですか。
同じ問題が発生しますか???

「XMLサーバ/Cocoon自由自在! 第1回 Cocoonをセットアップしよう」では
Cocoon 1.7.4 をベースに紹介されているみたいですから。
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2001-09-02 00:31
今ちょっと試してみただけなので、原因はこれから調べてみますが、Cocoon 1.7.4 では下記のエラーが出ました。

java の環境をいろいろいじくっているので
おかしくなってしまっているのでしょうか?

java.lang.RuntimeException: Error creating org.apache.cocoon.processor.LinkEncodingProcessor: class is not found
at org.apache.cocoon.framework.Manager.create(Manager.java:106)
at org.apache.cocoon.framework.Router.init(Router.java:80)
at org.apache.cocoon.framework.Manager.create(Manager.java:101)
at org.apache.cocoon.Engine.(Engine.java:165)
at org.apache.cocoon.Engine.getInstance(Engine.java:202)
at org.apache.cocoon.Cocoon.init(Cocoon.java:141)
at org.apache.tomcat.core.ServletWrapper.doInit(ServletWrapper.java:317)
at org.apache.tomcat.core.Handler.init(Handler.java:215)
at org.apache.tomcat.core.ServletWrapper.init(ServletWrapper.java:296)
at org.apache.tomcat.core.Handler.service(Handler.java:254)
at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:812)
at org.apache.tomcat.core.ContextManager.service(ContextManager.java:758)
at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:213)
at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:501)
at java.lang.Thread.run(Thread.java:484)


あと、最初に書き忘れていましたが、windows2000
を使っているというのは何か関係あるでしょうか?

スキルアップ/キャリアアップ(JOB@IT)