You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Andreas Pardeike <an...@pardeike.net> on 2006/06/19 09:49:09 UTC
null exception on invoke, tapestry 3.0.3 - HELP!! (source)
Seems like the attachments didn't make it. Here's the source:
### DBTextSnippet.jwc
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE component-specification PUBLIC
"-//Apache Software Foundation//Tapestry Specification 3.0//EN"
"http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
<!-- generated by Spindle, http://spindle.sourceforge.net -->
<component-specification
class="se.pardeike.tapestry.Extras.DBTextSnippet.DBTextSnippet"
allow-body="no" allow-informal-parameters="no">
<description>A piece of dynamic text fetched from a database</
description>
<parameter name="textid" type="java.lang.String" property-
name="snippetID" direction="in" required="yes">
<description>ID of the text snippet</description>
</parameter>
<parameter name="textloc" type="java.util.Locale" property-
name="snippetLocale" direction="in" required="yes">
<description>Locale of the text snippet</description>
</parameter>
</component-specification>
### DBTextSnippet.java
package se.pardeike.tapestry.Extras.DBTextSnippet;
import java.lang.reflect.Method;
import java.util.Locale;
import org.apache.tapestry.AbstractComponent;
import org.apache.tapestry.IMarkupWriter;
import org.apache.tapestry.IPage;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.PageRedirectException;
public abstract class DBTextSnippet extends AbstractComponent
{
private static String snippetGetter = "getSnippetText";
private static Method snippetGetterMethod;
private static String snippetConverter = "TextEditSnippet2HTML";
private static Method snippetConverterMethod;
private static boolean hasSnippetConverter = true;
public abstract void setSnippetID(String newID);
public abstract String getSnippetID();
public abstract void setSnippetLocale(Locale newLocale);
public abstract Locale getSnippetLocale();
protected void renderComponent(IMarkupWriter writer, IRequestCycle
cycle)
{
IPage page = cycle.getPage();
Object visitObject = page.getVisit();
if(visitObject == null)
{
System.out.println("No visit object so far. Restarting page.");
throw new PageRedirectException(page);
}
Class visitClass = visitObject.getClass();
Object[] arguments = null;
try
{
Class[] parameterTypes = new Class[] {String.class,
Locale.class};
arguments = new Object[] {getSnippetID(), getSnippetLocale()};
if(snippetGetterMethod == null)
snippetGetterMethod = visitClass.getMethod(snippetGetter,
parameterTypes);
String txt = (String)snippetGetterMethod.invoke(visitObject,
arguments);
if(txt != null)
{
if(hasSnippetConverter)
{
parameterTypes = new Class[] {String.class};
arguments = new Object[] {txt};
if(snippetConverterMethod == null)
{
Method[] methods = visitClass.getMethods();
for(int i = 0; i < methods.length; i++)
if(methods[i].getName().equals(snippetConverter))
{
snippetConverterMethod = visitClass.getMethod
(snippetConverter, parameterTypes);
break;
}
if(snippetConverterMethod == null)
hasSnippetConverter = false;
}
if(snippetConverterMethod != null)
txt = (String)snippetConverterMethod.invoke(visitObject,
arguments);
}
writer.printRaw(txt);
}
else
writer.print("[" + getSnippetID() + "/" + getSnippetLocale()
+ " not found]");
}
catch(Exception e)
{
writer.print("page: " + page);
writer.print("visitObject: " + visitObject);
writer.print("visitClass: " + visitClass);
writer.print("arguments[0]: " + arguments[0]);
writer.print("arguments[1]: " + arguments[1]);
writer.print("snippetGetterMethod: " + snippetGetterMethod);
writer.printRaw("<hr>");
writer.print("Component exception : " + e.getMessage());
writer.printRaw("<hr>");
StackTraceElement[] st = e.getStackTrace();
for(int i = 0; i < st.length; i++)
{
writer.print(st[i].toString());
writer.printRaw("<br>");
}
}
}
}
### and inside the visit object, getSnippetText is defined as:
// called by component TextEdit to fetch txt from db
public String getSnippetText(String id, Locale locale)
{
String localeStr = locale.getLanguage()+','+locale.getCountry();
Texter snippet = textForID(id, localeStr, true);
if(snippet != null)
return snippet.getSnippetText().trim();
return null;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org