From: "Paul Michael Reilly" <[EMAIL PROTECTED]> > Now that I've got Jelly built from source I'm ready to contribute by > helping to find bugs. The original post in this thread dealt with > defining custom tags. I suspected, wrongly, that using the CVS > sources would enable the following to work: > > Script: > ... > <?xml version="1.0"?> > <j:jelly xmlns:j="jelly:core" > xmlns:log="jelly:log" > xmlns:dcc="psg.dcc.jelly.DCCTagLibrary"> > > <dcc:test> > <log:info>Testing custom jelly tags</log:info> > </dcc:test> > > <dcc:notdefined> > <log:info>Why does this print?</log:info> > </dcc:notdefined> > > </j:jelly> > > Tag library source: > ... > package psg.dcc.jelly; > > import org.apache.commons.jelly.TagLibrary; > import psg.dcc.jelly.tags.swing.FileChooserTag; > import psg.dcc.jelly.tags.ui.ShowPageTag; > import psg.dcc.jelly.tags.TestTag; > > /** > * A Jelly custom tag library that supports DCC. > * > * @author <a href="mailto:pmr@;pajato.com">Paul Reilly</a> > * @version $Revision: 1.0 $ > */ > public class DCCTagLibrary extends TagLibrary { > > public DCCTagLibrary() { > registerTag( "fileChooser", FileChooserTag.class ); > registerTag( "showPage", ShowPageTag.class ); > registerTag( "test", TestTag.class ); > } > } > > Tag source: > ... > package psg.dcc.jelly.tags; > > import org.apache.commons.jelly.XMLOutput; > import org.apache.commons.jelly.TagSupport; > > import org.apache.commons.logging.Log; > import org.apache.commons.logging.LogFactory; > > > /** > * Test custom tag creation. > * > * @author <a href="mailto:pmr@;pajato.com">Paul Reilly</a> > * @version $Revision: 1.0 $ > */ > public class TestTag extends TagSupport { > > /** The Log to which logging calls will be made. */ > private static final Log log = LogFactory.getLog(TestTag.class); > > public TestTag() { > > System.out.println( "Constructed the test tag." ); > } > > private XMLOutput output; > > // Tag interface > //------------------------------------------------------------------------- > public void doTag(XMLOutput output) throws Exception { > > this.output = output; > > System.out.println( "testing, testing" ); > } > > } > > Results: > ... > resources: > > run: > Nov 5, 2002 10:54:00 AM org.apache.commons.jelly.tags.log.InfoTag doTag > INFO: Testing custom jelly tags > Nov 5, 2002 10:54:00 AM org.apache.commons.jelly.tags.log.InfoTag doTag > INFO: Why does this print? > > BUILD SUCCESSFUL > Total time: 11 seconds > > > I invoke the script from a Java application. There are two issues: > > 1) Why do the print statements in the tag implementation not get > output?
Because its not even invoking your custom tag library. Though you almost did everything totally right. You need to prefix your namespace URI with 'jelly:' to get Jelly to automatically detect your new tag library. So just to change your namespace definition in the Jelly script to the following (notice the use of 'jelly:' as a prefix)... xmlns:dcc="jelly:psg.dcc.jelly.DCCTagLibrary" which should then use your tag library Another way around the problem is to create a JellyContext and register your TagLibrary class with a specific namespace URI before running your script; then your tag library can be bound to any namespace URI you like. > 2) Shouldn't the <notdefined> tag generate an undefined tag error? Default behaviour is to treat all XML elements that are not bound to a Tag as just static XML. Though your TagLibrary could throw an exception if an unknown tag name is used if it wished James ------- http://radio.weblogs.com/0112098/ __________________________________________________ Do You Yahoo!? Everything you'll ever need on one web page from News and Sport to Email and Music Charts http://uk.my.yahoo.com -- To unsubscribe, e-mail: <mailto:commons-dev-unsubscribe@;jakarta.apache.org> For additional commands, e-mail: <mailto:commons-dev-help@;jakarta.apache.org>