its very hard to figure out problems like this without having running
code. you can either create a quickstart with a failing testcase, or
even better make a pull request on github that will add the failing
testcase directly into the codebase.

thanks,
-igor

On Mon, Nov 21, 2011 at 12:34 PM, Jablow, Eric R
<[email protected]> wrote:
>
> Igor>but you can create a testcase, reproducing the bare bits of code in a
> testcase just like you did in the email below. the advantage would be
> that i would have something i can play with which makes it much easier
> to find the problem.
>
> I will work on a quick start tonight, when I'm not at work. But here's what 
> I'd like to do, possibly extending Metagen. I have a Report object which 
> includes an abstract Document object.  Document has 3 concrete subclasses, 
> Book, Article, and Monograph. I have FormComponentPanels for each, which I'd 
> like to swap in and out. I've used Metagen to create ReportMeta, 
> DocumentMeta, BookMeta, etc.  I'd like to extend Metagen so I can write code 
> like
>
> IModel<Book> bookModel = 
> MetaModel.of(report).get(ReportMeta.document).as(Book.class);
>
> and
>
> IModel<String> isbnModel = 
> MetaModel.of(report).get(ReportMeta.document).as(Book.class).get(BookMeta.isbn);
>
> Since I don't want to modify the MetaModel class on my own, I've written a 
> SubClassModel class like so:
>
>        private static class SubClassModel<T> extends MetaModel<T> {
>                private static final long serialVersionUID = 
> 3511732306311269529L;
>
>                public SubClassModel(MetaModel<? super T> superModel, Class<T> 
> clazz) {
>                        super(superModel);
>                }
>
>                @Override
>                public T getObject() {
>                        return (T) super.getObject();
>                }
>                @Override
>                public void detach() {
>                        super.detach();
>                }
>
>                public static <T> MetaModel<T> as(MetaModel<? super T> 
> superModel, Class<T> clazz) {
>                        return new SubClassModel<T>(superModel, clazz);
>                }
>        }
> }
>
> Unfortunately, when the validation system gets its hands on this, it throws a 
> NPE as it adds the property validators:
>
> Caused by: java.lang.NullPointerException
>        at 
> net.ftlines.wicket.validation.bean.ReflectableProperty.init(ReflectableProperty.java:46)
>        at 
> net.ftlines.wicket.validation.bean.ReflectableProperty.<init>(ReflectableProperty.java:98)
>        at 
> net.ftlines.wicket.validation.bean.ModelPropertyResolver.resolve(ModelPropertyResolver.java:35)
>        at 
> net.ftlines.wicket.validation.bean.ValidationContext.resolveProperty(ValidationContext.java:80)
>        at 
> net.ftlines.wicket.validation.bean.ValidationForm$1.component(ValidationForm.java:170)
>        at 
> net.ftlines.wicket.validation.bean.ValidationForm$1.component(ValidationForm.java:163)
>        at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:143)
>        at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:161)
>        at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:122)
>        at 
> org.apache.wicket.MarkupContainer.visitChildren(MarkupContainer.java:908)
>        at 
> net.ftlines.wicket.validation.bean.ValidationForm.addPropertyValidators(ValidationForm.java:162)
>        at 
> net.ftlines.wicket.validation.bean.ValidationForm.onBeforeRender(ValidationForm.java:155)
>        at org.apache.wicket.Component.internalBeforeRender(Component.java:981)
>        at org.apache.wicket.Component.beforeRender(Component.java:1015)
>        at 
> org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1785)
>        ... 52 more
>
> This happens when Model is that SubclassModel<Book>.
>
> How would you use Metagen for this case?  Is it worth extending it?
>
> Respectfully,
> Eric Jablow
>
> This communication, along with any attachments, is covered by federal and 
> state law governing electronic communications and may contain company 
> proprietary and legally privileged information.  If the reader of this 
> message is not the intended recipient, you are hereby notified that any 
> dissemination, distribution, use or copying of this message is strictly 
> prohibited.  If you have received this in error, please reply immediately to 
> the sender and delete this message.  Thank you.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to