[mayaa-user:500] ページ表示時に NullPointerException が発生する場合と発生しない場合がある

Chihiro Ueta [E-MAIL ADDRESS DELETED]
2007年 4月 18日 (水) 17:27:31 JST


いつもお世話になっております。
植田と申します。

Mayaa1.1.6 を使用させて頂いております。
表題の件、質問させてください。

[環境]
Mayaa1.1.6
Struts1.2.9
Tomcat4.1.31
Engine設定で、キャッシュ有効

subA
 |_contentsA.html
 |_contentsA.mayaa
 |_contentsB.html
 |_contentsB.mayaa

上記のようなファイル構成の場合、contentsA.html表示の場合だけ、下のような
NullPointerException が発生するケースがあります。contentsB.html の表示時
には問題なく表示されます。

contentsA.html に関してだけ例外が発生する場合があるので、contentsA.html
および contentsA.mayaa の記述に関してなんらかの記述間違いがあると考えて
いるのですが、確認する限りおかしな所をみつけることができません。


以下のような条件で例外が発生するので、なにかお気づきの点がございましたら
ご教授いただけませんでしょうか?

[NullPointerException が発生する状況。]
1.
Mayaa のキャッシュが存在しない場合は、問題なく表示されます。

2.
1で表示された際にキャッシュが作成されますが、その後Tomcatを再起動するま
では正常にページを閲覧することができます。

3.
Tomcat 再起動を行ってから、同じ操作で contentsA.html を表示させようとす
ると NullPointerException が発生します。

4.
キャッシュファイルを無効にするために、 contentsA.html を開いて何も変更せ
ずにタイムスタンプだけを更新します。(1で表示された際のキャッシュを無効
にするため)

5.
再度、 contentsA.html を表示させると、正常にページが表示されます。


ElementProcessor#resolvePrefix で例外が発生するのは、どのような場合が考
えられるでしょうか?
また、どのような記述が欠如している場合に、NullPointerException が発生す
るでしょうか?

以下はスタックトレースです。

16:23:45,875 ERROR TemplateErrorHandler:87 - handled exception, null
java.lang.NullPointerException
	at
org.seasar.mayaa.impl.engine.processor.ElementProcessor.resolvePrefix(ElementProcessor.java:191)
	at
org.seasar.mayaa.impl.engine.processor.ElementProcessor.resolvePrefixAll(ElementProcessor.java:212)
	at
org.seasar.mayaa.impl.engine.processor.ElementProcessor.renderInit(ElementProcessor.java:460)
	at
org.seasar.mayaa.impl.engine.processor.ElementProcessor.doStartProcess(ElementProcessor.java:448)
	at
org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:140)
	at
org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:157)
	at
org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:157)
	at
org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:157)
	at
org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:157)
	at
org.seasar.mayaa.impl.engine.processor.InsertProcessor.renderTemplate(InsertProcessor.java:339)
	at org.seasar.mayaa.impl.engine.RenderUtil.renderPage(RenderUtil.java:311)
	at
org.seasar.mayaa.impl.engine.processor.InsertProcessor.doStartProcess(InsertProcessor.java:241)
	at
org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:140)
	at
org.seasar.mayaa.impl.engine.RenderUtil.renderTemplateProcessor(RenderUtil.java:157)
	at
org.seasar.mayaa.impl.engine.RenderUtil.renderProcessorTree(RenderUtil.java:237)
	at
org.seasar.mayaa.impl.engine.TemplateImpl.doTemplateRender(TemplateImpl.java:151)
	at org.seasar.mayaa.impl.engine.PageImpl.renderTemplate(PageImpl.java:249)
	at org.seasar.mayaa.impl.engine.RenderUtil.renderPage(RenderUtil.java:311)
	at org.seasar.mayaa.impl.engine.PageImpl.doPageRender(PageImpl.java:192)
	at
org.seasar.mayaa.impl.engine.EngineImpl.doPageService(EngineImpl.java:356)
	at org.seasar.mayaa.impl.engine.EngineImpl.doService(EngineImpl.java:475)
	at org.seasar.mayaa.impl.MayaaServlet.doService(MayaaServlet.java:95)
	at org.seasar.mayaa.impl.MayaaServlet.doGet(MayaaServlet.java:78)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:696)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
	at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:627)
	at
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:382)
	at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:306)
	at
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
	at
org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
	at
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
	at
org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318)
	at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
	at net.t_ac.core.struts.CharsetProcessor.process(CharsetProcessor.java:47)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:696)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146)
	at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
	at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
	at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
	at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
	at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
	at
org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:199)
	at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
	at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
	at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
	at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
	at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
	at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
	at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
	at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
	at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
	at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
	at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
	at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
	at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
	at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
	at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
	at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
	at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
	at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	at java.lang.Thread.run(Thread.java:534)

以下は org.seasar.mayaa.provider.ServiceProvider の設定です。

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE provider
    PUBLIC "-//The Seasar Foundation//DTD Mayaa Provider 1.0//EN"
    "http://mayaa.seasar.org/dtd/mayaa-provider_1_0.dtd">
<provider>
	<engine class="org.seasar.mayaa.impl.engine.EngineImpl">
		<errorHandler
class="org.seasar.mayaa.impl.engine.error.TemplateErrorHandler">
			<parameter name="folder" value="/"/>
			<parameter name="extension" value="html"/>
		</errorHandler>
		<parameter name="pageClass"
value="org.seasar.mayaa.impl.engine.PageImpl"/>
		<parameter name="templateClass"
value="org.seasar.mayaa.impl.engine.TemplateImpl"/>
		<parameter name="defaultSpecification" value="/default.mayaa"/>
		<parameter name="checkTimestamp" value="true"/>
		<parameter name="suffixSeparator" value="$"/>
		<parameter name="welcomeFileName" value="index.html"/>
		<parameter name="requestCharacterEncoding" value="UTF-8"/>
		<parameter name="pageSerialize" value="true"/>
		<parameter name="surviveLimit" value="5"/>
		<parameter name="autoBuild" value="false"/>
		<parameter name="autoBuild.repeat" value="false"/>
		<parameter name="autoBuild.wait" value="60"/><!-- seconds -->
		<parameter name="autoBuild.fileNameFilters" value=".html"/><!--
.html;^(sample|howto).+\.htm$ -->
		<parameter name="autoBuild.renderMate" value="false"/>
	</engine>
    <templateBuilder
            class="org.seasar.mayaa.impl.builder.TemplateBuilderImpl">
        <resolver
class="org.seasar.mayaa.impl.builder.injection.MetaValuesSetter"/>
        <resolver
class="org.seasar.mayaa.impl.builder.injection.ReplaceSetter"/>
        <resolver
class="org.seasar.mayaa.impl.builder.injection.RenderedSetter"/>
        <resolver
class="org.seasar.mayaa.impl.builder.injection.InsertSetter"/>
        <resolver
class="org.seasar.mayaa.impl.builder.injection.InjectAttributeInjectionResolver"/>
        <resolver
class="org.seasar.mayaa.impl.builder.injection.EqualsIDInjectionResolver">
            <parameter name="reportUnresolvedID" value="true"/>
            <parameter name="reportDuplicatedID" value="true"/>
            <!-- HTMLのidとXHTMLのidを追加しないようコメントアウト
            <parameter name="addAttribute"
value="{http://www.w3.org/TR/html4}id"/>
            <parameter name="addAttribute"
value="{http://www.w3.org/1999/xhtml}id"/>
            -->
        </resolver>
        <resolver
class="org.seasar.mayaa.impl.builder.injection.XPathMatchesInjectionResolver"/>
        <parameter name="outputTemplateWhitespace" value="true"/>
        <parameter name="outputMayaaWhitespace" value="false"/>
        <parameter name="optimize" value="true"/>
    </templateBuilder>
	<templateAttributeReader>
		<!-- 無視する属性の設定(複数記述可能)-->
		<ignoreAttribute
			qName="{http://struts.apache.org/tags-html}*"
			attribute="id" />
		<ignoreAttribute
			qName="{http://struts.apache.org/tags-html}text"
			attribute="name" />
		<ignoreAttribute
			qName="{http://struts.apache.org/tags-html}text"
			attribute="value" />
		<ignoreAttribute
			qName="{http://struts.apache.org/tags-html}password"
			attribute="name" />
		<ignoreAttribute
			qName="{http://struts.apache.org/tags-html}password"
			attribute="value" />
		<ignoreAttribute
			qName="{http://struts.apache.org/tags-html}submit"
			attribute="name" />
		<ignoreAttribute
			qName="{http://struts.apache.org/tags-html}submit"
			attribute="value" />
		<ignoreAttribute
			qName="{http://struts.apache.org/tags-html}cancel"
			attribute="name" />
		<ignoreAttribute
			qName="{http://struts.apache.org/tags-html}cancel"
			attribute="value" />
		<ignoreAttribute
			qName="{http://struts.apache.org/tags-html}link"
			attribute="href" />

		<!-- 別名で置き換える属性の設定 (複数記述可能) -->
		<aliasAttribute
			qName="{http://struts.apache.org/tags-html}*"
			attribute="styleId"
			templateAttribute="id" />
		<aliasAttribute
			qName="{http://struts.apache.org/tags-html}*"
			attribute="styleClass"
			templateAttribute="class" />
		<aliasAttribute
			qName="{http://struts.apache.org/tags-html}*"
			attribute="onmouseover"
			templateAttribute="onMouseOver" />
		<aliasAttribute
			qName="{http://struts.apache.org/tags-html}*"
			attribute="onmouseover"
			templateAttribute="onMouseOver" />
		<aliasAttribute
			qName="{http://struts.apache.org/tags-html}*"
			attribute="onmouseout"
			templateAttribute="onMouseOut" />
		<aliasAttribute
			qName="{http://struts.apache.org/tags-html}*"
			attribute="onmouseclick"
			templateAttribute="onMouseClick" />
		<aliasAttribute
			qName="{http://struts.apache.org/tags-html}*"
			attribute="onclick"
			templateAttribute="onClick" />
		<!-- 機能を有効にする設定 (デフォルトは false) -->
		<parameter name="enabled" value="true" />
	</templateAttributeReader>
</provider>


以上、宜しくお願い致します。



mayaa-user メーリングリストの案内