Hi Mark,
see below

Mark R. Diggory wrote:
This is an issue that is not specific to Jakarta Taglibraries, but I cannot find a relevant location to deal with issues that seem to arise with different versions of Tomcat and the Implementation of Custom Taglibraries. (If anyone can recommend a better list to discuss this on please tell me.

I've got a custom tag that implements a TryCatchFinally interface, its relatively simple and mirrors the behavior of the Catch tag in JSTL. My problem is that with the latest version of Tomcat (4.1.12). I am getting a null BodyContent object from this.getBodyContent(); in the doAfterBody() method, can anyone tell me why this would be happening?

I don't understand when, where and why BodyContent could end up Null...

Any advice would be helpfull. I've been trying to migrate my taglibraries (including my new JNDI taglibrary that I was going to donate to Apache as a "Sandbox" taglibrary). But first I need to get them upgraded and running properly and this BodyContent issue has been a major flaw this week.

Tag Class:

package edu.harvard.hmdc.taglib.conditional;

import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.IterationTag;
import javax.servlet.jsp.tagext.BodyTag;
import javax.servlet.jsp.tagext.TagSupport;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.ServletRequest;
import java.io.PrintWriter;
import java.io.IOException;

import java.util.*;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
* Generated tag class.
*/
public class TestTag extends BodyTagSupport implements javax.servlet.jsp.tagext.TryCatchFinally{

/** Log object for this class. */
private Log log = null;

public TestTag() {
super();
log = LogFactory.getLog(this.getClass());
log.debug("log enabled in Get Tag");
}


public int doStartTag() throws JspException, JspException {
return EVAL_BODY_INCLUDE;

}
If I'm not totally confused, this should be EVAL_BODY_BUFFERED if you want to have the BodyContent set on the tag.

    public int doEndTag() throws JspException, JspException {
        return EVAL_PAGE;
    }

    public int doAfterBody() throws JspException {
        try {
            BodyContent bodyContent = getBodyContent();
            JspWriter out = bodyContent.getEnclosingWriter();

            bodyContent.writeOut(out);
            bodyContent.clearBody();

        } catch (IOException ex) {
            log.error(ex.getMessage(),ex);
        }

        return SKIP_BODY;
    }

    public void doCatch(Throwable t) throws Throwable {
       log.debug("doCatch(Throwable t)");
       log.debug("t="+t.getClass().getName());
       //throw t;
    }


    public void doFinally() {
        log.debug("doFinally()");
    }

}


JSP Example:

    <cond:test>
    <!-- test content -->
    <%
        if(request.getParameter("throw") != null){
                throw new java.lang.Exception("Message from Exception");
        }
        %>
    Successfully completed test block without exception.
    </cond:test>

--
Christopher Lenz
/=/ cmlenz at gmx.de


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to